DBAtlas · Veritabanı operasyon atlası

Basit bir Resource Manager planı oluştur ve etkinleştir

OracleScheduler

Komut

-- 1) Pending area icinde grup, plan, direktif ve eslesme tanimla (PDB veya non-CDB):
BEGIN
  DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;

  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('OLTP_GRP',  'Online islemler');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('RAPOR_GRP', 'Raporlama / batch');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN('GUNDUZ_PLAN', 'Mesai saati plani');

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'GUNDUZ_PLAN', group_or_subplan => 'OLTP_GRP',
    comment => 'OLTP oncelikli', mgmt_p1 => 70);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'GUNDUZ_PLAN', group_or_subplan => 'RAPOR_GRP',
    comment => 'Rapor sinirli', mgmt_p1 => 20,
    parallel_degree_limit_p1 => 4,
    switch_group => 'CANCEL_SQL', switch_time => 1800, switch_for_call => TRUE);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'GUNDUZ_PLAN', group_or_subplan => 'OTHER_GROUPS',
    comment => 'Diger herkes (zorunlu)', mgmt_p1 => 10);

  DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
    attribute      => DBMS_RESOURCE_MANAGER.ORACLE_USER,
    value          => 'RAPOR_KULLANICI',
    consumer_group => 'RAPOR_GRP');

  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
END;
/
-- Eslesmenin gecerli olmasi icin switch yetkisi:
EXEC DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP('RAPOR_KULLANICI', 'RAPOR_GRP', FALSE);

-- 2) Etkinlestir (FORCE: bakim penceresinin plani degistirmesini engeller):
ALTER SYSTEM SET resource_manager_plan = 'FORCE:GUNDUZ_PLAN' SCOPE = BOTH;

-- 3) Izle:
SELECT sid, username, resource_consumer_group FROM v$session WHERE username IS NOT NULL;
SELECT name, active_sessions, execution_waiters, consumed_cpu_time, cpu_wait_time
FROM   v$rsrc_consumer_group;

-- 4) Geri al: plani kapat, sonra sil
-- ALTER SYSTEM SET resource_manager_plan = '' SCOPE = BOTH;
-- BEGIN DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
--       DBMS_RESOURCE_MANAGER.DELETE_PLAN_CASCADE('GUNDUZ_PLAN');
--       DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA; END;
-- /

Ne yapar?

CPU darboğazında hangi iş yükünün öncelikli olacağını belirler: OLTP grubuna %70, rapor grubuna %20 CPU payı verir; rapor grubunda paralelliği 4 ile sınırlar ve 30 dakikayı aşan çağrıyı iptal eder (CANCEL_SQL). Kullanıcılar consumer group'lara otomatik eşlenir.

Ne zaman kullanılır?

Gün içi raporların OLTP'yi yavaşlattığı karma iş yüklerinde, kontrolsüz paralel sorguları sınırlamak, kaçak (runaway) sorguları otomatik kesmek için.

Dikkat

Resource Manager Enterprise Edition gerektirir (SE2'de çok sınırlıdır); ek lisans gerekmez. mgmt_p1 yüzdeleri yalnız CPU yarıştığında devreye girer ve bir seviyede toplam %100'ü geçemez. CANCEL_SQL çalışan sorguyu ORA-00040 ile keser; yanlış eşleme kritik işleri kesebileceği için eşikleri önce test ortamında dene. Plan etkinken CPU throttling 'resmgr:cpu quantum' wait event'i olarak görünür. CDB seviyesinde PDB'ler arası paylaşım için CREATE_CDB_PLAN kullanılır.

DBAtlas'ta aç →

İlgili