🔸oracle hints

در این بخش قصد دارم به معرفی و نحوه تعریف برخی از hint هایی که به منظور بهینه سازی عملکرد پایگاه داده وجود دارند بپردازم

✅ سوال: hint چیست و کاربرد آن در چه مواقعی است ؟؟؟
👈 پاسخ: hint ها عباراتی هستند که در هنگام اجرای دستورات استفاده میشوند و عملکرد آنها را بهبود میبخشند

✅نحوه تعریف hint به صورت ذیل میباشد

/*+ hint_name(options)*/

✅ همیشه استفاده از hint ها باعث بهبود عملکرد نخواهد شد و باید نکات متفاوتی را در نظر داشت به عنوان مثال 👇👇👇👇
👈 برای استفاده حداکثری از مزیت parallel بهتر است با استفاده از پارتیشن بندی داده ها را در فضاهای مختلف دیسک قرار داد
👈 در صورتی میتوانید از parallel استفاده کنید که سرور دارای چندین cpu باشد که آنها چند نخی (multi threading) را پشتیبانی کند
👈 استفاده از append برای مواقعی مفید است که جدول مورد نظر ما truncate شده باشد
👈 استفاده از parallel برای داده های کوچک عملکرد را نه تنها بهبود نمیبخشد بلکه عملکرد بدتر هم خواهد شد
👈 استفاده از nologging امکان recovery کردن داده ها را سخت تر میکند
👈 و …..

✅ در پایگاه داده اوراکل میتوان از hint ها در سطوح زیر استفاده کرد

1️⃣ در سطح دستور 👇👇👇

syntax:

 select|insert|update|delete|merge  /*+ hint_name1(options)  hint_name2(options)  */   ……

examples:

select /*+ parallel */ from employees;

select /*+ parallel(7) ordered */ from employees;

insert /*+ parallel(7) append*/ into emp_new select * from employees;

delete /*+ parallel(7) nologging */ from departments;

2️⃣ در سطح شیء (فقط برای parallel قابل استفاده است) 👇👇👇

syntax:
alter <object_type> <object_name> parallel(degree DOP)

examples:
alter table employees parallel(degree 7);
alter index indx_hire_date parallel(degree 7);

3️⃣ در سطح session (فقط برای parallel قابل استفاده است) 👇👇👇

syntax:
alter <session> force parallel <statment_type> parallel [DOP]

examples:
alter session force parallel dml parallel 14
alter session force parallel ddl parallel 14
alter session force parallel query parallel 14

💡💡💡💡 در ادامه به معرفی چند hint پر کاربرد خواهم پرداخت

✅ اولین hint اشاره شده parallel است ، کاربرد آن در مواقعی است که میخواهیم عملیات مورد نظر در یک دستور یا یک session از چندین cpu برای اجرا استفاده کند و به صورت زیر استفاده میشود
/*+ parallel(DOP)*/
در واقع DOP یک عدد است که مشخص میکند که دستور SQL ما بااستفاده از چند cpu استفاده شود به عنوان مثال parallel(7) مشخص میکند که از 7 عدد core cpu برای اجرای دستور استفاده شود

✅ دومین hint اشاره شده append است که در دستور insert استفاده میشود و استفاده از آن باعث بهبود عملکرد دستور insert میشود ، به این صورت که برای insert داده ها به دنبال فضای خالی در بلاک ها برای درج داده نمیگردد و یک فضای جدید در دیسک برای داده های مورد نظر تخصیص میدهد ، اگر جدولی داریم که ماهیت truncate و insert دارد (ماهیت جدول temp دارد) استفاده از hint فوق پیشنهاد میشود و در غیر اینصورت در سیستم های OLTP برای insert های تک رکوردی پیشنهاد نمیشود چون باعث بوجود آمدن فضای خالی در دیسک میشود

✅ سومین hint اشاره شده nologging است که باعث میشود اوراکل از حداقل log در فایلهای online redo log file استفاده کند

✅ چهارمین hint اشاره شده result_cache است که باعث میشود خروجی پرس و جوی مورد نظر در حافظه اوراکل حفظ شده تا در تکرارهای مجدد پرس و جو از آن استفاده شود

✅ پنجمین hint اشاره شده ORDERED است که در دستور select استفاده میشود و در صورت join مابین چند جدول به ترتیبی که جداول در جلوی from قرار گرفته اند join انجام خواهد شد.

دانلود فایل pdf