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

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

آموزش جامع پکیج DBMS_RESOURCE_MANAGER در Oracle

مقدمه

در این مقاله آموزش اوراکل قراره با یکی از حرفه‌ای‌ترین قابلیت‌های 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 این ۷ مرحله رو طی می‌کنیم:

  1. فعال‌سازی محیط Pending
  2. ساخت Plan
  3. ساخت Group
  4. تعریف Directive
  5. اعتبارسنجی و اعمال
  6. نسبت دادن کاربران
  7. فعال‌سازی 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  در اوراکل دارید خوشحال میشم در بخش نظرات، تجربه های ارزشمندتان را با ما به اشتراک بگذارید! 🚀

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

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

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

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