
از نسخهی ۱۹c، اوراکل شروع به معرفی قابلیت «ساخت خودکار ایندکس» کرد، اما در نسخهی جدید Oracle 23ai این ویژگی به بلوغ کامل رسیده.
قابلیت Automatic Indexing یعنی اوراکل خودش تصمیم میگیرد کجا ایندکس بسازد یا حذف کند تا سرعت Queryها افزایش یابد، بدون اینکه DBA وقتش را صرف کند.
در این نسخه، هوش مصنوعی Oracle AI به موتور Optimizer اضافه شده؛ تصمیمات الان پویا، تحلیلی و یادگیرنده هستند.
در این مقاله آموزش اوراکل در بخش آموزش Oracle 23ai کامل در مورد قابلیت Automatic Indexing صحبت می کنیم.
در نسخه جدید Oracle Database 23ai، با قابلیتهای تازهای مثل Adaptive Plans، AI-Assisted Tuning و نمایشهای آماری پیشرفته، تحلیل و رفع کندی Queryها بسیار سادهتر و دقیقتر شده است.
پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.
در این مقاله شما می خوانید
اوراکل در پسزمینه چهار مرحلهی کلیدی را اجرا میکند:
| مرحله | عملکرد | توضیح |
|---|---|---|
| ۱️⃣ جمعآوری دادهها | بررسی SQLهای پرتکرار در AWR | فقط Queryهایی که بار کاری بالا دارند بررسی میشوند |
| ۲️⃣ شناسایی فرصت | تحلیل ستونهای مناسب برای Index | توسط AI Optimizer انجام میشود |
| ۳️⃣ ساخت و تست | ایجاد ایندکس در حالت Invisible | فقط Optimizer آن را میبیند |
| ۴️⃣ ارزیابی و تصمیم نهایی | بررسی اثر واقعی بر کارایی Queryها | در صورت عدم بهبود، ایندکس حذف میشود |
این چرخه بهصورت دورهای تکرار میشود و همیشه با دادههای جدید سازگار است.
🔸 بررسی وضعیت فعلی قابلیت Automatic Indexing در دیتابیس
SELECT status FROM dba_autotask_status WHERE client_name = 'auto index';
اگر نتیجهی دستور DISABLED بود، باید قابلیت را فعال کنی.
🔸 نحوهی فعالسازی قابلیت Automatic Indexing در سطح سیستم
ALTER SYSTEM SET "AUTO_INDEX_MODE" = AUTO;
ALTER SYSTEM SET "AUTO_INDEX_CREATE" = TRUE;
ALTER SYSTEM SET "AUTO_INDEX_REBUILD" = TRUE;
ALTER SYSTEM SET "AUTO_INDEX_REPORTING" = TRUE;
نکته: در Oracle 23ai میتوان حتی در سطح Session فعالسازی کرد، خیلی کاربردی برای محیطهای تست و Dev.
🔍 مثالی از عملکرد Automatic Indexing در اوراکل
فرض کن جدولی به نام SALES داری:
CREATE TABLE sales (
sale_id NUMBER PRIMARY KEY,
customer_id NUMBER,
product_id NUMBER,
sale_date DATE,
amount NUMBER
);
Query پرتکرار شما:
SELECT SUM(amount)
FROM sales
WHERE customer_id = :C1 AND sale_date BETWEEN :D1 AND :D2;
اوراکل با فعال بودن ویژگی خودکار، بعد از تحلیل چند ساعت Workload، ایندکسی مثل زیر ایجاد میکند:
CREATE INDEX ai$_sales_customer_date ON sales (customer_id, sale_date);
این ایندکس ابتدا با Visibility = INVISIBLE ساخته میشود تا تأثیرش در Query تست شود.
اگر بهبود قابلتوجهی ببیند، به حالت VISIBLE تغییر وضعیت میدهد.
📈 گزارشگیری و مانیتورینگ ایندکسهای خودکار در اوراکل
میتوان تمام فرآیندهای ایندکسسازی خودکار را دید:
SELECT * FROM DBA_AUTO_INDEX_TASKS ORDER BY execution_end DESC;
برای دیدن ایندکسهای ساختهشده خودکار:
SELECT index_name, visibility, auto_created
FROM DBA_INDEXES
WHERE auto_created = 'YES';
ایندکسهای خودکار همیشه با پیشوند AI$_ مشخص هستند، پس پیدا کردنشان راحت است.
🚀 مقایسه قبل و بعد از فعالسازی قابلیت Automatic Indexing
قبل از Automatic Index:
Elapsed: 12.4 sec
بعد از فعالسازی:
Elapsed: 0.8 sec
نتیجه: تا ۹۴٪ افزایش سرعت اجرای Query — بدون دخالت DBA.
🧠 نکات حرفهای برای DBA در قابلیت Automatic Indexing
| نکته حرفهای | کاربرد |
|---|---|
| اختصاص Tablespace جداگانه برای ایندکسهای خودکار | کنترل فضای مصرفی و عملکرد سریعتر |
| فعالسازی در محیط تست قبل از Production | برای جلوگیری از ساخت ایندکسهای اضافی |
| حالت Reporting Only | فقط پیشنهاد میدهد، ایندکس نمیسازد |
| تحلیل DBA_AUTO_INDEX_TASKS | شناسایی ایندکسهای کماثر یا ناکارآمد |
| پیشوند AI$_ در نام ایندکسهای خودکار | تفکیک آسان از ایندکسهای دستی |
🔬 تفاوت Oracle 19c و ۲۳ai در Automatic Indexing
| ویژگی | Oracle ۱۹c | Oracle ۲۳ai |
|---|---|---|
| هوش تصمیمگیری | Rule‑Based (ساده) | AI‑Driven (هوش مصنوعی) |
| پشتیبانی از Partitioned Index | محدود | کامل و پایدار |
| گزارشدهی | Summary | دستهبندی بر اساس Workload |
| Adaptive Invisibility | ❌ ندارد | ✅ دارد |
| Integration با SGA Usage | ❌ ندارد | ✅ دارد (افزایش کارایی حافظه) |
📎 دستورات کاربردی سریع (Cheat Sheet) در Automatic Indexing
-- Enable Full state with report service
ALTER SYSTEM SET AUTO_INDEX_MODE = 'REPORT AUTO';
ALTER SYSTEM SET AUTO_INDEX_CREATE = TRUE;
-- list of index created by AI
SELECT table_name, index_name, visibility FROM DBA_INDEXES;
-- Report behbood karaei
SELECT task_exec_id, improvement_pct
FROM DBA_AUTO_INDEX_TASKS WHERE improvement_pct > ۲۰;
سوالات متداول درباره Automatic Indexing در Oracle 23ai
در Oracle ۲۳ai، الگوریتم تصمیمگیری بر پایهٔ هوش مصنوعی و دادههای واقعی Workload عمل میکند.
Optimizer ابتدا SQLهای پرتکرار و سنگین را از AWR و Cursor Cache استخراج میکند، سپس الگوی فیلترها و Joinها را تحلیل میکند تا ستونهایی را که بیشترین تأثیر در Selectivity دارند شناسایی کند.
بعد ایندکسی با پیشوند AI$_ در حالت INVISIBLE میسازد و عملکرد را امتحان میکند.
اگر latency بهطور معنادار کاهش پیدا کند، ایندکس VISIBLE شده و در سیستم باقی میماند.
همین چرخه باعث هوشمندی و پویایی دائم در ۲۳ai است.
در Oracle ۱۹c، تصمیمگیری صرفاً Rule‑based بود و گزارشدهی ساده داشت، اما در Oracle ۲۳ai، موتور تصمیمگیری AI‑Driven شده و پارامترهای جدید مثل Adaptive Visibility و Memory Aware Indexing اضافه شدهاند.
۲۳ai قادر است ایندکسهای Partitioned را خودش بسازد، آنها را بازسازی کند و حتی منبع مصرفی SGA را کنترل کند تا فشار حافظه زیاد نشود.
این تغییرات باعث میشوند Automatic Indexing به یک DBA Assistant واقعی تبدیل شود.
تمامی گزارشهای فرآیند Automatic Indexing در Viewهای سیستمی قابل مشاهدهاند.
برای بررسی میتوان از دستور زیر استفاده کرد:
SELECT * FROM DBA_AUTO_INDEX_TASKS ORDER BY EXECUTION_END DESC;
همچنین، ایندکسهای ساختهشده با پارامتر AUTO_CREATED='YES' در View DBA_INDEXES مشخصاند و نامشان با AI$_ شروع میشود.
حذف ایندکسها بهصورت خودکار است ولی اگر بخواهی دستی حذف کنی:
DROP INDEX “AI$_YOUR_INDEX_NAME”;
نه همیشه. در سیستمهایی با بار کاری ثابت و Queryهای پرتکرار (مثل ERP، بیمه، یا آموزش آنلاین) بسیار مفید است و تا ۳۰٪ بهبود عملکرد میدهد.
اما در دیتابیسهایی با بار کاری متنوع و لحظهای (مثل OLTP بسیار سنگین) بهتر است با حالت REPORT ONLY شروع شود تا فقط پیشنهاد ایجاد ایندکس بدهد، نه ساخت واقعی.
DBA میتواند پس از بررسی گزارشها تصمیم بگیرد ایندکس ساخته شود یا خیر.
جمعبندی
قابلیت Automatic Indexing در Oracle 23ai دیگر فقط یک ابزار کمکی نیست؛ به یک دستیار هوشمند DBA تبدیل شده.
در دیتابیسهایی که Queryهای پرتکرار زیادی دارند، فعالسازی آن باعث کاهش چشمگیر زمان پاسخ، مصرف CPU و هزینهی نگهداری ایندکسها میشود.
در پروژههای بزرگ (مثل بیمه یا ERP) فقط با روشن کردن این قابلیت، میتوان بین ۲۵ تا ۳۵ درصد بهبود کارایی کلی به دست آورد.
📥 اگر سوالی داری در مورد قابلیت Automatic Indexing در Oracle 23ai داری، در بخش کامنتها بپرس.

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