ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

چگونه Execution Plan را در اوراکل بخوانیم؟ | راهنمای بهینه سازی کوئری

مقدمه : استفاده از Execution Plan در اوراکل چه اهمیتی دارد؟

یکی از مهم‌ترین مهارت‌هایی که هر توسعه‌دهنده پایگاه داده (DBA) باید داشته باشد، توانایی تحلیل Execution Plan در اوراکل است.

این طرح نشان می‌دهد که کوئری SQL شما چگونه اجرا می‌شود و چه مسیرهایی برای بازیابی داده‌ها انتخاب شده‌اند.

با تحلیل Execution Plan می‌توان مشکلات عملکردی را شناسایی و کوئری‌های SQL را بهینه‌سازی کرد.

در این مقاله، نحوه‌ی مشاهده، تحلیل و بهینه‌سازی Execution Plan را بررسی می‌کنیم.

اگر می خواهید در مورد ابزارهای امنیت داده در اوراکل بیشتر آشنا بشید نوشته زیر را مطالعه کنید:

در این نوشته شما می خوانید

Execution Plan چیست؟

هنگامی که یک کوئری SQL اجرا می‌شود، بهینه‌ساز اوراکل (Oracle Optimizer) مسیرهای مختلفی برای اجرای آن را بررسی کرده و بهترین مسیر را انتخاب می‌کند.

این مسیرها در قالب Execution Plan نمایش داده می‌شوند که شامل:
✔ اسکن جدول (Table Scan)
✔ استفاده از ایندکس (Index Scan)
✔ پیوستن جداول (Joins)
✔ مرتب‌سازی داده‌ها (Sorting)
✔ فیلتر کردن اطلاعات

روش‌های مشاهده Execution Plan در اوراکل

۱. استفاده از EXPLAIN PLAN

دستور EXPLAIN PLAN کوئری SQL را تحلیل کرده و نتیجه را در جدول PLAN_TABLE ذخیره می‌کند.

مثال:

				
					EXPLAIN PLAN FOR 
SELECT * FROM employees WHERE department_id = 10;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

				
			

✔ نمایش Execution Plan در خروجی

۲. استفاده از AUTOTRACE در SQL*Plus

فعال‌سازی AUTOTRACE در SQL*Plus به شما امکان مشاهده‌ی Execution Plan را می‌دهد.

مثال:

				
					SET AUTOTRACE ON;
SELECT * FROM employees WHERE department_id = 10;

				
			

✔ مشاهده Execution Plan همراه با اطلاعات عملکردی

۳. استفاده از V$SQL_PLAN برای کوئری‌های اجرا شده

				
					SELECT * FROM V$SQL_PLAN WHERE SQL_ID = 'your_sql_id';

				
			

برای یافتن SQL_ID:

				
					SELECT SQL_ID, SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE '%employees%';

				
			

✔ مشاهده Execution Plan کوئری‌های قبلی

تحلیل Execution Plan و مفاهیم کلیدی

ستون توضیح
ID شماره مرحله اجرای کوئری
OPERATION نوع عملیات انجام‌شده (TABLE ACCESS, INDEX SCAN, SORT)
OBJECT_NAME نام جدول یا ایندکس مورد استفاده
COST هزینه اجرای عملیات (عدد کمتر، بهتر است)
CARDINALITY تعداد ردیف‌های مورد انتظار
BYTES حجم تقریبی داده‌های پردازش شده

تحلیل یک Execution Plan واقعی

مثال زیر یک Execution Plan را نمایش می‌دهد:

				
					-----------------------------------------------------------------------
| ID  | OPERATION           | OBJECT_NAME | COST | CARDINALITY | BYTES |
-----------------------------------------------------------------------
|  ۰  | SELECT STATEMENT    |             |  12  |     100     |  5000 |
|  ۱  |  TABLE ACCESS FULL  | EMPLOYEES   |  12  |     100     |  5000 |
-----------------------------------------------------------------------

				
			

تحلیل:

TABLE ACCESS FULL نشان می‌دهد که کل جدول اسکن شده است، که ممکن است باعث افت عملکرد شود.
راه‌حل: استفاده از ایندکس برای کاهش زمان اجرای کوئری.

بهینه‌سازی Execution Plan و افزایش سرعت کوئری

اگر Execution Plan نشان داد که جدول به‌صورت FULL SCAN اسکن شده، از ایندکس استفاده کنید.

				
					CREATE INDEX emp_dept_idx ON employees(department_id);

				
			

می‌توان از Hints برای تأثیرگذاری روی بهینه‌ساز اوراکل استفاده کرد.

				
					SELECT /*+ INDEX(employees emp_dept_idx) */ * FROM employees 
WHERE department_id = 10;

				
			

اجبار اوراکل برای استفاده از ایندکس

سوالات متداول درباره Execution Plan در اوراکل

Execution Plan مسیر اجرای یک کوئری SQL را نشان می‌دهد و مشخص می‌کند که اوراکل چگونه داده‌ها را بازیابی می‌کند.

این ابزار به توسعه‌دهندگان کمک می‌کند تا عملکرد کوئری‌ها را بهینه‌سازی کرده و از مشکلاتی مانند Full Table Scan جلوگیری کنند.

برای مشاهده Execution Plan در اوراکل می‌توان از روش‌های زیر استفاده کرد:

  • استفاده از EXPLAIN PLAN FOR و نمایش آن با DBMS_XPLAN.DISPLAY
  • استفاده از SET AUTOTRACE ON در SQL*Plus
  • مشاهده Execution Plan کوئری‌های اجرا شده در V$SQL_PLAN

عواملی که می‌توانند باعث افت عملکرد کوئری شوند عبارتند از:

  • Full Table Scan به‌جای Index Scan
  • عدم استفاده از ایندکس‌ها یا ایندکس‌های نامناسب
  • استفاده از توابع روی ستون‌ها در شرایط WHERE (مثلاً UPPER(column_name))
  • عدم استفاده از فیلترهای مناسب برای کاهش تعداد ردیف‌های پردازش‌شده

روش‌های مختلفی برای بهبود Execution Plan وجود دارد، از جمله:

  • ایجاد ایندکس مناسب بر روی ستون‌های پرکاربرد
  • استفاده از Hints برای هدایت بهینه‌ساز اوراکل (مثلاً /*+ INDEX(table index_name) */)
  • بازنویسی کوئری برای کاهش حجم داده‌های پردازش‌شده
  • تحلیل هزینه اجرای عملیات (COST) و تلاش برای کاهش آن با بهینه‌سازی جداول و ایندکس‌ها

نتیجه‌گیری

Execution Plan در اوراکل نقشه‌ی راه اجرای یک کوئری توسط موتور پایگاه داده است و تحلیل آن برای بهینه‌سازی عملکرد، کاهش زمان پاسخ‌دهی و استفاده بهتر از منابع سیستم، امری ضروری در توسعه و نگهداری سیستم‌های مبتنی بر دیتابیس است.

Execution Plan به ما نشون می‌ده که اوراکل چطور جداول، ایندکس‌ها و عملیات‌ها رو برای اجرای کوئری پشت سر هم استفاده می‌کنه، و با بررسی اون می‌تونیم مشکلات عملکردی مثل Full Table Scanهای غیرضروری یا Joinهای ناکارآمد رو پیدا و اصلاح کنیم.

آیا تجربه‌ای در استفاده از Execution Plan در اوراکل دارید؟ پیشنهاد می کنیم نظرات خود را در کامنت‌ها بنویسید! 🚀

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *