Create Resource Manager Plans & Directive
نشر بواسطة : Obay Salah , November 19, 2024
إنشاء Resource Manager Plans & Directives:
في الخطوات السابقة، عرفنا أن المستخدمين في قاعدة البيانات ينظمون في عدد من Consumer Groups، لكن كيف يتم تقسيم الموارد بين هذه المجموعات؟
الإجابة عن طريق Plans.
تقوم الPlan بتقسيم الموارد بين مجموعة الConsumer Groups، وقد يكون في قاعدة البيانات الواحدة عدد من Resource Manager Plans، ولكن في اللحظة الواحدة تنشط Plan واحدة فقط، هي من تتحكم في الموارد ويتم تطبيقها على جميع قاعدة البيانات. ولحظة إنشاء قاعدة البيانات يتم إنشاء ثلاث خطط تحدثنا عنها سابقا.
مبدئياً يمكن توزيع الموارد على المجموعات على ثمانية مستويات.
والحقيقة أن هناك عدد من الموارد نستطيع التحكم بها من خلال الPlan Manager Resource:
- CPU Method: وهي تمكنك من التحكم ولتحديد مصادر وحدة المعالجة المركزية CPU وتقسيمها بين المجموعات Consumer Groups أو الSubplan.
- Active Session Pool with Queuing: يسمح لك تحديد عدد الSessions النشطة المتصلة في نفس الوقت عن طريق الConsumer Group، إذا تجاوزت المجموعة العدد المسموح به من الSessions فإن هذه الSessions تظل موجودة في صف بانتظار إنهاء أحد الSession النشطة. عموماً يمكنك أيضاً أن تحدد فترة زمنية لانتظار الSession في الصف قبل أن يصدر الخطأ.
- Degree of Parallelism: تمكنك من السيطرة على الدرجة القصوى للعمل على التوازي لأي عملية ضمن الConsumer Group.
- Execution Time Limit: تسمح لك بتحديد أقصى وقت مسموح به لتنفيذ العمليات.
- Idle Time Limit: تسمح لك بتحديد الوقت الذي يمكن أن تكون الSession عاطلة عن العمل قبل أن يتم إنهاؤها.
- Undo Pool: تستطيع من خلاله السيطرة على كمية الUndo التي يمكن أن تتولد من قبل الConsumer Group أو الSubplan.
نستخدم الإجراء CREATE_PLAN الموجود في الحزمة DBMS_RESOURCE_MANAGER لإنشاء الPLAN وهذا الإجراء يحتوي على عدد من المتغيرات.
وأيضاً سنستخدم الإجراء CREATE_PLAN_DIRECTIVE لمنح الموارد للCONSUMER GROUPS عن طريق الPLAN.
إذاً سنقوم بإنشاء الPLAN عن طريق الإجراء CREATE_PLAN ولكن سنقوم لاحقاً بإنشاء DIRECTIVE عن طريق الإجراء CREATE_PLAN_DIRECTIVE لتوزيع المصادر بين الCONSUMER GROUPS عن طريق الPLAN.
لنفرض مثلاً أننا سنقوم بإنشاء PLAN اسمها NEW_PLAN سنقوم بتوزيع المصادر باستخدام الDIRECTIVES عبر الPLAN بين الCONSUMER GROUPS، حيث سنقوم بتوزيع الموارد وهي:
(CPU Method، Active Session، Degree of Parallelism، Execution Time Limit، Idle Time Limit، Undo Pool)
هذه هي متغيرات الإجراء CREATE_PLAN_DIRECTIVE حيث:
- Plan: name of resource plan
- group_or_subplan: name of consumer group or subplan
- comment: comment for the plan directive
- cpu_p1: first parameter for the CPU resource allocation method
- cpu_p2: second parameter for the CPU resource allocation method
- cpu_p3: third parameter for the CPU resource allocation method
- cpu_p4: fourth parameter for the CPU resource allocation method
- cpu_p5: fifth parameter for the CPU resource allocation method
- cpu_p6: sixth parameter for the CPU resource allocation method
- cpu_p7: seventh parameter for the CPU resource allocation method
- cpu_p8: eighth parameter for the CPU resource allocation method
- active_sess_pool_p1: first parameter for the max. active sessions allocation method
- queueing_p1: queue timeout in seconds
- parallel_degree_limit_p1: first parameter for the degree of parallelism allocation method
- switch_group: group to switch once switch time is reached
- switch_time: max execution time within a group
- switch_estimate: use execution time estimate to assign group?
- max_est_exec_time: max. estimated execution time in seconds
- undo_pool: max. cumulative undo allocated for consumer groups
- max_idle_time: max. idle time
- max_idle_blocker_time: max. idle time when blocking other sessions
- switch_time_in_call: max execution time within a top call - will switch back to home group after call
لاحظ أن هناك 8 مستويات لتوزيع مصادر CPU بين المجموعات، مع التأكيد على أن كل DIRECTIVE موجهة لGroup Consumer واحدة.
لنفرض الآن أننا نريد إنشاء Plan تسمى NEW_PLAN هذه الPlan موجهة لثلاث مجموعات وهي (SYS_GROUP & NEW_GROUP & OTHER_GROUPS).
أي أننا بحاجة Plan واحدة وثلاث Directives، كل Directive موجهة لConsumer Group معينة.
لنفرض أننا نريد منح المجموعة SYS_GROUP جزء من موارد CPU على النحو التالي:
- المستوى الأول: 60%.
- المستوى الثاني: 50%.
- المستوى الثالث: 40%.
بمعنى أنه في المستوى الأول الأولية للمجموعة SYS_GROUP بنسبة تصل إلى 60% وأما النسبة الباقية وهي 40% سيتم تقسيمها بين المجموعتين الأخريين (NEW_GROUP & OTHER_GROUPS) وذلك على النحو التالي:
- المستوى الأول: 20%.
- المستوى الثاني: 25%.
- المستوى الثالث: 30%.
DECLARE PLAN VARCHAR2(200); GROUP_OR_SUBPLAN VARCHAR2(200); COMMENT VARCHAR2(200); CPU_P1 NUMBER; CPU_P2 NUMBER; CPU_P3 NUMBER; ACTIVE_SESS_POOL_P١ NUMBER; MAX_IDLE_TIME NUMBER; BEGIN PLAN := 'NEW_PLAN'; COMMENT := 'THIS IS NEW PLAN'; GROUP_OR_SUBPLAN := 'OTHER_GROUPS'; CPU_P1 :=20 ; CPU_P2 :=25 ; CPU_P3 :=30 ; ACTIVE_SESS_POOL_P1 :=3 ; MAX_IDLE_TIME := 2; SYS.DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA; SYS.DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA; SYS.DBMS_RESOURCE_MANAGER.CREATE_PLAN (PLAN,COMMENT ); SYS.DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE ('NEW_PLAN', 'OTHER_GROUPS', 'DIRECTIVE TO OTHER_GROUPS ', 20 ,25,30,3,2 ); SYS.DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE ('NEW_PLAN', 'SYS_GROUP', 'DIRECTIVE TO SYS_GROUP ',60,50,40,4,3 ); SYS.DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE ('NEW_PLAN', 'NEW_GROUP', 'DIRECTIVE TO NEW_GROUP ', 20,25,30,2,1); SYS.DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA; SYS.DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA; COMMIT; END;
هكذا قمنا بإنشاء PLAN تسمى NEW_PLAN وأيضًا قمنا بإنشاء ثلاثة Directives موجهة للمجموعات (OTHER_GROUPS & SYS_GROUP & NEW_GROUP).
يجب التذكير بأنك تستطيع التعامل مع ثمانية مستويات؛ بعد ذلك يمكن منح باقي المتغيرات مثل active_sess_pool_p1 وهي لتحديد أكبر عدد للSessions النشطة التي تنتمي لConsumer Group واحدة. بعد هذا العدد ستظل الـSessions في صف الانتظار. وأيضًا max_idle_time لتحديد الوقت الذي يمكن أن تظل فيه الـSession عاطلة قبل أن يتم إنهاء هذه الـSession وهكذا باقي المتغيرات.
الآن نستطيع تفعيل هذه الـPlan في قاعدة البيانات عن طريق الأمر:
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='NEW_PLAN';
في هذه اللحظة سوف يتم تفعيل هذه الـPlan على قاعدة البيانات.
يمكنك الاستعلام عن الـPlan والـDirective عن طريق:
- DBA_RSRC_PLANS
- DBA_RSRC_PLAN_DIRECTIVES
Comments
لايوجد تعليق حتى الان