نگاهی به اثر منفی پرفورمنسی Out Of Place Refresh

بروزرسانی Materialized View(MV) به روش Out of Place ، قابلیت جدیدی بود که در اوراکل نسخه 12c ارائه شد، در این روش، در زمان بروزرسانی MV، به جای دستکاری جدول جاری MV، اوراکل جدول جدیدی را ایجاد می کند و حاصل اجرای متن MV را در این جدول درج خواهد کرد بعد از آنکه اطلاعات بروز شده به صورت کامل در جدول جدید درج شد، این جدول با جدول جاری MV جایگزین می شود.

با توجه به آنکه در مورد ویژگی Out Of Place Refresh قبلا مطلبی را ارائه کردیم از تکرار مجدد آن پرهیز کرده و در این مطلب به بررسی یکی مضرات پرفورمنسی این شیوه از بروزرسانی خواهیم پرداخت.

Out Of Place Refresh در کنار مزایایی که دارد ممکن در شرایطی برای دیتابیس سربار پرفورمنسی ایجاد کند. چرا که در این روش از بروزرسانی، با هر بار بروزرسانی MV، جدولی حذف و جدول جدیدی ایجاد خواهد شد و جدول جدید مشخصات مختص به خود را دارد(نظیر object_id و …) و برای دیتابیس یک object جدید محسوب می شود.

ایجاد جدول جدید سبب می شود تا فرمهای پارس شده همه پرس و جوهایی که به این MV رجوع کرده اند، نامعتبر شده و از حافظه خارج شوند و این پرس و جوها برای اجرای مجدد، باید یکبار دیگر پارس شوند.

(بیشتر…)

روشی برای شناسایی ایندکس های تکراری

همانطور که در مطلب ایندکس های ترکیبی اشاره شد می توان در کنار ایندکس های عادی، ایندکس های ترکیبی که ترتیب ستون های آنها از اهمیت زیادی برخوردار است ایجاد کرد تا QUERYهای مختلف بتوانند با سرعت بالاتر اجرا شوند.

از طرفی دیگر استفاده از ایندکس های زیاد سبب ایجاد سربار در عملیات DML می شود و فضای دیتابیس را هدر می رود. در این متن یک QUERY برای یافتن ایندکس هایی که ستون های تکراری دارند معرفی می شود.

(بیشتر…)

ایندکس های ترکیبی

ایندکس ترکیبی یا COMPOSITE INDEX برای دو یا چند ستون از جدول تعریف می شود ولی به هر ترتیبی که ستون ها در عبارت ساخت ایندکس قرار گیرند فقط یکسری از QUERYها می توانند از آن ایندکس استفاده کنند. در این متن روش استفاده مناسب از ایندکس های ترکیبی و نحوه عملکرد آنها را توضیح می دهیم.

(بیشتر…)

ایندکس های B-TREE عادی و UNIQUE

ایندکس B-TREE پرکاربردترین ایندکس در دیتابیس اوراکل است که در حالت پیش فرض به صورت غیر UNIQUE ساخته می شود. ایندکس های B-TREE را می توان به صورت UNIQUE نیز تعریف نمود که هیچ تفاوتی از لحاظ PERFORMANCE و ساختار داده ها با ایندکس عادی ندارند. در این متن ساختمان داده و روش عملکرد ایندکس های عادی B-TREEE و UNIQUE را توضیح می دهیم.

(بیشتر…)

در چه شرایطی برای یک ستون هیستوگرام تهیه می شود؟

قبلا در مطلبی توضیح دادیم که اوراکل وضعیت بروز و یا stale بودن آمارهای جدول را بر اساس اطلاعات موجود در جدول $sys.mon_mods_all تعیین می کند(ویوی dba_tab_modifications شکل خواناتری را از این اطلاعات نمایش می دهد.) و بر اساس آن تصمیم می گیرد که آمار چه جداولی را باید بروزرسانی کند.

در این متن قصد داریم بررسی کنیم که اوراکل در زمان جمع آوری آمار، بر چه مبنایی به این نتیجه می رسد تا برای ستونی Histogram تهیه کند؟

(بیشتر…)

ایندکس های FUNCTION BASED

در دیتابیس اوراکل انواع مختلفی از ایندکسها وجود دارند که به منظور بهبود کارایی دیتابیس استفاده می شوند ولی هر کدام از آنها دارای کاربرد و ساختار متفاوت است.

ایندکس ها عناصر اختیاری برای جداول و کلاسترها هستند که می توانند با فراهم نمودن مسیرهای جدید دسترسی به داده ها سبب افزایش سرعت اجرای دستوات SQL شوند. در این متن ایندکس های از نوع FUNCTION BASED و روش استفاده مناسب از آنها را توضیح می دهیم.

(بیشتر…)

auto_only Large Page در اوراکل 19c

در مطلب پیکربندی Huge Page برای دیتابیس اوراکل در مورد مقادیری که برای پارامتر USE_LARGE_PAGES قابل تنظیم است، نکاتی را مطرح کردیم و توضیح دادیم که برای این پارامتر می توان یکی از مقادیر FALSE, ONLY, TRUE را تنظیم کرد(مقدار AUTO در نسخه های جدید قابل تنظیم نیست.)

Connected to Oracle Database 18c Enterprise Edition Release 18.0.0.0.0

SQL> select value from v$parameter_valid_values p where upper(name)= ‘USE_LARGE_PAGES’;

VALUE

————–

TRUE

AUTO

ONLY

FALSE

در اوراکل نسخه 19c، مقدار AUTO_ONLY هم به این مجموعه مقادیر اضافه شده است که در این متن به بررسی این مقدار خواهیم پرداخت.

Connected to Oracle Database 19c Enterprise Edition Release 19.0.0.0.0

SQL> select value from v$parameter_valid_values p where upper(name)= ‘USE_LARGE_PAGES’;

VALUE

————–

TRUE

AUTO

ONLY

FALSE

AUTO_ONLY

(بیشتر…)

Fix کردن پلن کوئری های فاقد bind variable

برای دستور زیر، دو plan در دیتابیس موجود است:

SQL> select * from mytbl where object_id=9;

SQL> @plan_hash_value

قصد داریم با ایجاد sql profile، پلن شماره 1787877304 را برای پرس و جو 9tfrqw5x3qw8s، فیکس کنیم:

SQL> @coe_xfr_sql_profile.sql    9tfrqw5x3qw8s    1787877304

(بیشتر…)

حذف ایندکسهای ایجاد شده با فیچر Auto Indexing

ایندکسهای از نوع auto index را نمی توان با دستور drop index حذف کرد:

SQL> select index_name,auto from dba_indexes where AUTO=’YES’;

INDEX_NAME                   AUTO

———————-               ——–

SYS_AI_9qxxvpz1p5359    YES

SQL> drop index “SYS_AI_9qxxvpz1p5359”;

ORA-65532: cannot alter or drop automatically created indexes

(بیشتر…)

ایندکس BITMAP در اوراکل

در دیتابیس اوراکل انواع مختلفی از ایندکسها وجود دارند که از آنها به منظور بهبود کارایی دیتابیس استفاده می شود ولی هر کدام دارای کاربرد و ساختار متفاوت هستند. در این متن ایندکس های از نوع BITMAP که فقط در نسخه های ENTERPRISE اوراکل قابل تعریف و استفاده هستند را توضیح می دهیم.

(بیشتر…)