
مقدمه
در این مقاله آموزش اوراکل قراره با یکی از حرفهایترین قابلیتهای Oracle Database آشنا بشی: DBMS_RESOURCE_MANAGER.
اگر DBA من هستی یا توی تیمهای performance کار میکنی، این ابزار کلیدی رو باید بشناسی!
اگر می خواهید در با مفهوم DBMS_LOCK در اوراکل pl/sql بیشتر آشنا بشید، نوشته زیر را مطالعه کنید:
در این نوشته شما می خوانید
DBMS_RESOURCE_MANAGER چیست؟
DBMS_RESOURCE_MANAGER یک پکیج در Oracle Database هست که بهت اجازه میده منابع دیتابیس مثل CPU، سشنها و زمان اجرا رو بین کاربران یا برنامهها کنترل شده تقسیم کنی.
این قابلیت مخصوص محیطهای پرترافیکه مثل:
- سازمانهای بزرگ
- دیتابیسهای با کاربران زیاد
- سیستمهای چندتایی (Oracle RAC)
- یا وقتی بخوای عدالت بین تیمها برقرار کنی 💡
چرا از DBMS_RESOURCE_MANAGER استفاده کنیم؟
خیلی ساده: چون همه کاربرها نباید منابع مساوی بگیرن. بعضیها مهمترن، بعضیها فقط شبها باید Job اجرا کنن.
مثلاً:
- تیم فنی فقط شبها میتونه Batch اجرا کنه
- تیم مالی توی ساعت کاری بیشترین قدرت CPU رو داره
- کاربران معمولی فقط باید بتونن ۳ سشن باز کنن
اینجا DBMS_RESOURCE_MANAGER وارد میشه 💪
مفاهیم پایهای در Resource Manager
🔷 Resource Plan
طرحی که تعیین میکنه منابع چطور بین گروهها تقسیم بشن.
🔷 Consumer Group
گروهی از یوزرها یا سشنها که قوانین خاص بهشون اعمال میشه.
🔷 Plan Directive
اتصال بین یک Plan و یک Group و تعریف محدودیتهایی مثل:
- درصد استفاده از CPU (مثل
cpu_p1) - حداکثر تعداد سشن همزمان
- محدودیت زمانی برای Idle بودن یا بلاک شدن
مراحل ساخت یک Resource Plan
برای استفاده از DBMS_RESOURCE_MANAGER این ۷ مرحله رو طی میکنیم:
- فعالسازی محیط Pending
- ساخت Plan
- ساخت Group
- تعریف Directive
- اعتبارسنجی و اعمال
- نسبت دادن کاربران
- فعالسازی Plan
فانکشنها و پروسیجرهای DBMS_RESOURCE_MANAGER
| تابع / پروسیجر | کاربرد |
|---|---|
| CREATE_PENDING_AREA | آغاز تغییرات جدید |
| CREATE_PLAN | ساخت Resource Plan جدید |
| CREATE_CONSUMER_GROUP | ساخت گروه کاربری |
| CREATE_PLAN_DIRECTIVE | اتصال Plan به Group |
| SUBMIT_PENDING_AREA | اعمال تغییرات در دیتابیس |
| GRANT_SWITCH_CONSUMER_GROUP | اجازهی تغییر گروه به یوزر |
| SWITCH_CONSUMER_GROUP_FOR_USER | جابجایی یوزر به گروه مشخصشده |
مثال ۱: مدیریت منابع بین کاربران تعاملی و Batch
🎯 سناریو:
INTERACTIVE_USERS: کاربران فعال با تعامل زیاد (۶۰٪ CPU)BATCH_USERS: برای Jobها و Taskهای شبانه (۳۰٪ CPU)
📜 اسکریپت کامل:
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
DBMS_RESOURCE_MANAGER.CREATE_PLAN('office_resource_plan',
'Modiriat Manabe Baraye Sherkat');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('INTERACTIVE_USERS',
'Karbaran Taamoli');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('BATCH_USERS',
'Karbaran Batch Job');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'office_resource_plan',
group_or_subplan => 'INTERACTIVE_USERS',
cpu_p1 => ۶۰,
active_sess_pool_p1 => ۵
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'office_resource_plan',
group_or_subplan => 'BATCH_USERS',
cpu_p1 => ۳۰,
active_sess_pool_p1 => ۲
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'office_resource_plan',
group_or_subplan => 'OTHER_GROUPS',
cpu_p1 => ۱۰
);
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
END;
/
🔄 فعالسازی:
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'office_resource_plan';
💡 مثال ۲: تفکیک کاربران عادی از Jobها
🎯 سناریو:
- کاربران عادی = ۸۰٪ CPU + ۸ سشن
- Jobها = ۱۰٪ CPU با بلاک شدن max تا ۶۰ ثانیه
📜 اسکریپت کامل:
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
DBMS_RESOURCE_MANAGER.CREATE_PLAN('interactive_batch_plan',
'Tafkik Manabe);
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('INTERACTIVE_GROUP',
'Online Users');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('JOB_GROUP', 'Jobها');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'interactive_batch_plan',
group_or_subplan => 'INTERACTIVE_GROUP',
cpu_p1 => ۸۰,
active_sess_pool_p1 => ۸
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'interactive_batch_plan',
group_or_subplan => 'JOB_GROUP',
cpu_p1 => ۱۰,
max_idle_blocker_time => ۶۰
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'interactive_batch_plan',
group_or_subplan => 'OTHER_GROUPS',
cpu_p1 => ۱۰
);
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
END;
/
مثال ۳: استفاده از Subplan برای ساختار سلسلهمراتبی
🎯 سناریو:
- Plan اصلی:
corporate_plan - Subplan داخلی برای
TEAM_A
📜 اسکریپت کامل:
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
DBMS_RESOURCE_MANAGER.CREATE_PLAN('corporate_plan',
'Modiriat Manabe Kalan');
DBMS_RESOURCE_MANAGER.CREATE_PLAN('team_a_plan',
'team_a_plan');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('team_a_users',
'team_a_users);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'team_a_plan',
group_or_subplan => 'team_a_users',
cpu_p1 => ۱۰۰,
active_sess_pool_p1 => ۳
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'corporate_plan',
group_or_subplan => 'team_a_plan',
cpu_p1 => ۵۰
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'corporate_plan',
group_or_subplan => 'OTHER_GROUPS',
cpu_p1 => ۵۰
);
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
END;
/
مانیتورینگ Resource Planها (ویووهای سیستمی)
| ویو | کاربرد |
|---|---|
| DBA_RSRC_PLANS | مشاهده پلانهای تعریفشده |
| DBA_RSRC_CONSUMER_GROUPS | مشاهده گروههای کاربری |
| DBA_RSRC_PLAN_DIRECTIVES | مشاهده دستورالعملهای Plan |
| V$RSRC_CONSUMER_GROUP | نمایش وضعیت لحظهای گروهها |
نکات مهم و Best Practices
- همیشه
OTHER_GROUPSرو تعریف کن (اجباریه!) - قبل از
SUBMIT، ازVALIDATE_PENDING_AREAاستفاده کن - از Planها برای تفکیک محیط Development و Production استفاده کن
- برای محیط RAC یا Multitenant، Plan در سطح
PDBتنظیم بشه
سوالات متداول درباره پکیج DBMS_RESOURCE_MANAGER
DBMS_RESOURCE_MANAGER یک پکیج سیستمی در Oracle است که برای کنترل و مدیریت منابع دیتابیس بین کاربران یا گروهها استفاده میشود.
وقتی چندین کاربر یا اپلیکیشن همزمان از دیتابیس استفاده میکنند و مصرف منابع بالا میرود، با استفاده از این ابزار میتوانید:
- مصرف CPU را بین کاربران محدود کنید
- تعداد سشنهای فعال را کنترل کنید
- کاربرهای خاص را در اولویت بالاتری قرار دهید
این ابزار برای محیطهای پرترافیک، سرورهای اشتراکی، Oracle RAC، و دیتابیسهای Enterprise فوقالعاده کاربردی است.
Consumer Group گروهی از کاربران است که رفتار مصرف منابع مشابهی دارند. مثلاً کارمندان بخش مالی یا کاربران Batch.
Resource Plan طرح کلی تخصیص منابع است که مشخص میکند هر Consumer Group چه مقدار از منابع (مثل CPU یا تعداد سشنها) را دریافت کند.
در واقع Resource Plan، رفتار کلی سیستم را مدیریت میکند، و Consumer Group مشخص میکند که چه کسی این رفتار را دریافت کند.
گروه OTHER_GROUPS یک گروه پیشفرض سیستمی است که برای مدیریت Sessionهایی استفاده میشود که در هیچیک از گروههای تعریفشده شما قرار نگرفتهاند.
اگر آن را تعریف نکنید، اجرای SUBMIT_PENDING_AREA یا فعالسازی Plan با خطا مواجه خواهد شد.
همیشه باید در هر Resource Plan حداقل یک Directive برای OTHER_GROUPS داشته باشید، حتی اگر فقط ۵٪ منابع به آن اختصاص دهید.
نتیجهگیری
Oracle با ارائهی DBMS_RESOURCE_MANAGER کنترل بینظیری روی منابع دیتابیس به شما میده.
با استفاده از Plan و Groupها، میتونی استفادهی کاربران از CPU، تعداد سشنها و jobها رو با دقت مدیریت کنی و پرفورمنس سیستم رو همیشه توی سطح بالا نگه داری.
📢 نظر شما چیست؟ اگر شما هم اطلاعات و تجربه خوبی در استفاده از پکیج DBMS_RESOURCE_MANAGER در اوراکل دارید خوشحال میشم در بخش نظرات، تجربه های ارزشمندتان را با ما به اشتراک بگذارید! 🚀
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید