Resource manager lijkt de vergeten tool in de gereedschapskist van de DBA. Als je het er over hebt kijken de meesten alsof ze er nog nooit van hebben gehoord. Oracle is de resource manager blijven verbeteren bij elk versie en 10g is daarin geen uitzondering
- Zetten van de Consumer Group Switch Times Per Call
- Zetten van de Consumer Group Idle Time-outs
- Automatisch Resource Consumer Groups aan sessies toewijzen
Zetten van de Consumer Group Switch Times Per Call Oracle9i introduceerde het concept van switch times om het mogelijk te maken om van consumer group te wisselen als de executie tijd een bepaalde threshold heeft bereikt. Dit werkte goed voor basic sessies zoals jobs, maar was bijna zinloos voor multie-tier systemen die gebruik maken van connectie. De nieuwe SWITCH_TIME_IN_CALL parameter van de CREATE_PLAN_DIRECTIVE procedure lost dit probleem op zodat het resource gebruik van 1 client, de toekomstige clients in dezelfde sessie niet beïnvloed. De default waarde van deze parameter is NULL wat Unlimited time vertegenwoordigd. De waarde van dit attribuut kan geüpdate worden met de NEW_SWITCH_TIME_IN_CALL parameter van de UPDATE_PLAN_DIRECTIVE procedure. The SWITCH_TIME_IN_CALL en SWITCH_TIME parameters zijn wederzijds exclusief. Zetten van de Consumer Group Idle Timeouts De MAX_IDLE_TIME en MAX_IDLE_BLOCKER_TIME parameters van de CREATE_PLAN_DIRECTIVE procedure maakt het mogelijk om de time-out thresholds voor de consumer groups te zetten. The MAX_IDLE_TIME parameter definieert de maximum tijd dat een sessie in een idle staat aan deze consumer group gekoppeld kan zijn. De MAX_IDLE_BLOCKER_TIME parameter definieert de maximum tijd dat een sessie, in een idle staat, gekoppeld kan zijn aan deze consumer Group, terwijl andere sessie resources geblokkeerd zijn. PMON checkt iedere minuut op sessies die deze thresholds overschrijden en killt ze om andere resources vrij te geven. De default waarde van deze parameter is NULL wat Unlimited time vertegenwoordigd De waarden van de attributen kunnen geüpdate worden met de NEW_MAX_IDLE_TIME en NEW_MAX_IDLE_BLOCKER_TIME parameters van de UPDATE_PLAN_DIRECTIVE procedure.
Automatisch Resource Consumer Groups aan sessies toewijzen Oracle 10g introduceert een methode om sessie attributen aan consumer groups te koppelen, om het gebruik van de resource manager makkelijker en meer flexibel te maken. Een aantal logon en runtime attributen kunnen gebruikt worden om te beslissen welke consumer group aan welke sessie gekoppeld moet worden. De Volgende constanten zijn toegevoegd aan de DBMS_RESOURCE_MANAGER package. -- Login Attributes oracle_user CONSTANT VARCHAR2(30) := 'ORACLE_USER' service_name CONSTANT VARCHAR2(30) := 'SERVICE_NAME'; client_os_user CONSTANT VARCHAR2(30) := 'CLIENT_OS_USER'; client_program CONSTANT VARCHAR2(30) := 'CLIENT_PROGRAM'; client_machine CONSTANT VARCHAR2(30) := 'CLIENT_MACHINE'; -- Runtime Attributes module_name CONSTANT VARCHAR2(30) := 'MODULE_NAME'; module_name_action CONSTANT VARCHAR2(30) := 'MODULE_NAME_ACTION'; service_module CONSTANT VARCHAR2(30) := 'SERVICE_MODULE'; service_module_action CONSTANT VARCHAR2(30) := 'SERVICE_MODULE_ACTION'; Deze constanten worden gebruikt door de SET_CONSUMER_GROUP_MAPPING procedure om de consumer group koppelingen te definiëren. DBMS_RESOURCE_MANAGER.set_consumer_group_mapping ( attribute IN VARCHAR2, value IN VARCHAR2, consumer_group IN VARCHAR2 DEFAULT NULL) Aangenomen dat we 3 consumer hebben (OLTP_CONSUMER_GROUP, BATCH_CONSUMER_GROUP en OTHER_GROUPS) zouden we het als volgt kunnen invullen.. BEGIN DBMS_RESOURCE_MANAGER.set_consumer_group_mapping ( attribute => DBMS_RESOURCE_MANAGER.oracle_user, value => 'OLTP_USER', consumer_group => 'OLTP_CONSUMER_GROUP'); DBMS_RESOURCE_MANAGER.set_consumer_group_mapping ( attribute => DBMS_RESOURCE_MANAGER.oracle_user, value => 'BATCH_USER', consumer_group => 'BATCH_CONSUMER_GROUP'); DBMS_RESOURCE_MANAGER.set_consumer_group_mapping ( attribute => DBMS_RESOURCE_MANAGER.module_name, value => 'REPORT', consumer_group => 'BATCH_CONSUMER_GROUP'); END; / De combinatie van meerdere koppelingen en expliciete switch requests kan resulteren in een grote keuze van consumer group welke lijken te conflicteren. Gebruik makend van bovenstaand voorbeeld, zouden we een reporting sessie (met zijn module op "REPORT" gezet) welke gekoppeld is aan het OLTP_USER schema. Welke consumer group zouden we in de volgende situatie selecteren? DE SET_CONSUMER_GROUP_MAPPING_PRI procedure maakt de beslissing, welke consumer group te selecteren, eenvoudiger door voor ieder attribuut een prioriteit te zetten. DBMS_RESOURCE_MANAGER.set_consumer_group_mapping_pri ( explicit IN NUMBER, oracle_user IN NUMBER, service_name IN NUMBER, client_os_user IN NUMBER, client_program IN NUMBER, client_machine IN NUMBER, module_name IN NUMBER, module_name_action IN NUMBER, service_module IN NUMBER, service_module_action IN NUMBER) De parameters worden aan de constanten gekoppeld met uitzondering van de EXPLICIT parameter welke "explicit calls to switch consumer groups “ representeerd met de SWITCH_CURRENT_CONSUMER_GROUP, SWITCH_CONSUMER_GROUP_FOR_SESS en SWITCH_CONSUMER_GROUP_FOR_USER procedures. De prioriteiten die aangewezen worden, moeten unieke integers zijn van 1-10, met 1 als de hoogste prioriteit. BEGIN DBMS_RESOURCE_MANAGER.set_consumer_group_mapping_pri ( explicit => 1, oracle_user => 2, service_name => 3, client_os_user => 4, client_program => 5, client_machine => 6, module_name => 7, module_name_action => 8, service_module => 9, service_module_action => 10); END; / Bij bovenstaand voorbeeld heeft de ORACLE_USER een prioriteit dan de MODULE_NAME. |