Oracle - uživatelské profily a resource plan
Zpracoval: Petr Svoboda
Obsah
Uživatelské profily
Profil je pojmenovaná množina limitů, kterou lze přiřadit uživateli. Uživatelský profil umožňuje nastavit kolik jakých prostředků uživatel může spotřebovat.
Každému uživateli můžeme přiřadit vlastní profil. Uživatelé bez konktrétního profilu mají přiřazen výchozí (DEFAULT
) profil.
Ve výchozím nastavení nejsou limity nastavené přes profily povoleny. Zapnout je lze dvěma způsoby:
- trvale nastavením
RESOURCE_LIMIT=TRUE
v inicializačním souboru, - dočasně pomocí
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;
, je k tomu potřeba systémové oprávněníALTER SYSTEM
a nastavení se netýká hesel a aktuálních sessions.
Vytvoření profilu
K vytvoření profilu je potřeba systémové oprávnění CREATE PROFILE
.
CREATE PROFILE clerk LIMIT
SESSIONS_PER_USER 2
CPU_PER_SESSION unlimited
CPU_PER_CALL 6000
LOGICAL_READS_PER_SESSION unlimited
LOGICAL_READS_PER_CALL 100
IDLE_TIME 30 CONNECT_TIME 480;
Všechny nenastavené limity se nastaví z výchozího profilu – profil DEFAULT
. Ve výchozím nastavení jsou v něm všechny limity nastavené na UNLIMITED
.
Správa profilů
Každému uživateli lze přiřadit maximálně jeden profil. Pokud je uživateli přiřazen profil a uživatel již nějaký má, starý profil se nahradí novým. Profil se uplatní až při dalším přihlášení uživatele. Profily nelze přiřazovat rolím.
Profily lze upravovat pomocí ALTER PROFILE
. Hodnotu limitu lze nastavit na výchozí nastevením hodnoty DEFAULT
.
ALTER PROFILE clerk LIMIT
CPU_PER_CALL default
LOGICAL_READS_PER_SESSION 20000;
Existuje také speciální limit COMPOSITE_LIMIT
, který umožňuje nastavit limit celkové zátěže, kterou uživatel generuje. Nastavuje se v tzv. „service units“, což je vážená suma vybraných prostředků.
Způsob výpočtu „service units“ lze nastavit pomocí ALTER RESOURCE COST
. Nastavit lze cenu těchto zdrojů:
CPU_PER_SESSION
(100 s),CONNECT_TIME
(min.),LOGICAL_READS_PER_SESSION
(počet bloků vč. přečtených z paměti),PRIVATE_SGA
(B)
ALTER RESOURCE COST
CPU_PER_SESSION 1
LOGICAL_READS_PER_SESSION 50;
Celkovou cenu zdrojů pak spočteme jako:
cost = (1 * CPU_PER_SESSION) + (50 * LOGICAL_READS_PER_SESSION)
Profil smažeme příkazem DROP PROFILE clerk CASCADE;
.
Infomace o profilech lze zjistit např. takto:
SELECT USERNAME, PROFILE FROM DBA_USERS;
SELECT * FROM DBA_PROFILES ORDER BY PROFILE;
Další související views:
USER_RESOURCE_LIMITS
,USER_PASSWORD_LIMITS
,RESOURCE_COST
,V$SESSION
,V$SESSTAT
,V$STATNAME
.
Nastavení profilu
CREATE USER jward IDENTIFIED BY aZ7bC2 PROFILE clerk;
Limity
SESSIONS_PER_USER
Specify the number of concurrent sessions to which you want to limit the user.
CPU_PER_SESSION
Specify the CPU time limit for a session, expressed in hundredth of seconds.
CPU_PER_CALL
Specify the CPU time limit for a call (a parse, execute, or fetch), expressed in hundredths of seconds.
CONNECT_TIME
Specify the total elapsed time limit for a session, expressed in minutes.
IDLE_TIME
Specify the permitted periods of continuous inactive time during a session, expressed in minutes. Long-running queries and other operations are not subject to this limit.
LOGICAL_READS_PER_SESSION
Specify the permitted number of data blocks read in a session, including blocks read from memory and disk.
LOGICAL_READS_PER_CALL
Specify the permitted the number of data blocks read for a call to process a SQL statement (a parse, execute, or fetch).
PRIVATE_SGA
Specify the amount of private space a session can allocate in the shared pool of the system global area (SGA), expressed in bytes. Use K
or M
to specify this limit in kilobytes or megabytes.
COMPOSITE_LIMIT
Specify the total resource cost for a session, expressed in service units. Oracle calculates the total service units as a weighted sum of CPU_PER_SESSION
, CONNECT_TIME
, LOGICAL_READS_PER_SESSION
, and PRIVATE_SGA
.
FAILED_LOGIN_ATTEMPTS
Specify the number of failed attempts to log in to the user account before the account is locked.
PASSWORD_LIFE_TIME
Specify the number of days the same password can be used for authentication. The password expires if it is not changed within this period, and further connections are rejected.
PASSWORD_REUSE_TIME
Specify the number of days before which a password cannot be reused. If you set PASSWORD_REUSE_TIME
to an integer value, then you must set PASSWORD_REUSE_MAX
to UNLIMITED
.
PASSWORD_REUSE_MAX
Specify the number of password changes required before the current password can be reused. If you set PASSWORD_REUSE_MAX
to an integer value, then you must set PASSWORD_REUSE_TIME
to UNLIMITED
.
PASSWORD_LOCK_TIME
Specify the number of days an account will be locked after the specified number of consecutive failed login attempts.
PASSWORD_GRACE_TIME
Specify the number of days after the grace period begins during which a warning is issued and login is allowed. If the password is not changed during the grace period, the password expires.
PASSWORD_VERIFY_FUNCTION
The PASSWORD_VERIFY_FUNCTION
clause lets a PL/SQL password complexity verification script be passed as an argument to the CREATE PROFILE
statement. Oracle provides a default script, but you can create your own routine or use third-party software instead.
- For
function
, specify the name of the password complexity verification routine. - Specify
NULL
to indicate that no password verification is performed.
RESOURCE PLAN
Pomocí RESOURCE PLANu lze vytvořit skupiny uživatelů a těmto skupinám nastavit, jakým způsobem mohou sdílet zdroje na serveru. Funkce pro jeho správu se nacházejí v balíčku funkcí DBMS_RESOURCE_MANAGER
.
Jednoduchý RESOURCE PLAN
BEGIN DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN(
SIMPLE_PLAN => 'great_bead',
CONSUMER_GROUP1 => 'sales',
GROUP1_CPU => 60,
CONSUMER_GROUP2 => 'market',
GROUP2_CPU => 20,
CONSUMER_GROUP3 => 'develop',
GROUP3_CPU => 20);
END;
Skupin může být maximálně osm.
Víceúrovňový RESOURCE PLAN
Skupin může být v jednom plánu maximálně 32 a může mít maximálně 32 úrovní. Jedna skupina může být i ve více plánech.
Pending area
Před vytvořením víceúrovňového RESOURCE PLANu je nejprve potřeba vytvořit tzv. pending area, kde lze resource plan vytvořit, ověřit korektnost a teprve z ní je plán nahrán do systému. Při jejím vytvoření jsou do ní nahrány staré plány, které také možné upravovat.
EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
EXEC DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;
Validaci není potřeba volat, ale je vhodná při vlastním vytváření.
Plány Vytváření, rušení a aktualizace plánů.
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'great_bread', COMMENT => 'great plan');
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN(PLAN => 'great_bread', NEW_COMMENT => 'great plan for great bread');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(PLAN => 'great_bread');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_CASCADE(PLAN => 'great_bread');
Skupiny
Vytváření, rušení a aktualizace skupin.
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP (
CONSUMER_GROUP => 'sales',
COMMENT => 'retail and wholesale sales');
UPDATE_CONSUMER_GROUP
DELETE_CONSUMER_GROUP
Po smazání skupiny se uživatel stane členem DEFAULT_CONSUMER_GROUP
. Týká se to i běžících sessions.
Speciální skupiny:
DEFAULT_CONSUMER_GROUP
Výchozí skupina pro uživatele bez specifikované skupiny.OTHER_GROUPS
Nelze přiřadit uživatele jako člena skupiny. „Obsahuje“ všechny skupiny nepřiřazené do žádného plánu.
Možná omezení
Čas na procesoru: kolik času může skupina strávit na procesoru, 8 úrovní priorit, skupina na nižší prioritě dostane čas na procesoru teprve tehdy, když všechny skupiny výše již vyčerpaly své zdroje.
Aktivní sessions: nastavuje, kolik může mít uživatel aktivních sessions, pokud by jejich počet překročil, je požadavek zařazen do fronty.
Stupeň paralelismu.
Automatické přepínání skupin: určuje, za jakých podmínek bude session automaticky přeřazena do jiné skupiny:
- switch group - skupina, do které se session má přepnou při splnění podmínek,
- switch time - doba, po které bude session přepnuta,
- use estimate time - pokud je nastaveno na TRUE a Oracle odhadne, že doba po kterou operace poběží bude delší než limit, session bude přepnuta ještě před spuštením operace, jinak pokračuje normálně.
Doba běhu operace: při jejím překročení je operace přerušena.
Velikost, kterou skupina může zabrat v „undo pool“.
Výchozí plán
Group | Level 1 | Level 2 | Level 3 |
---|---|---|---|
SYS_GROUP | 100,00% | - | - |
OTHER_GROUPS | - | 100,00% | - |
LOW_GROUP | - | - | 100,00% |
Pravidla plánu
Vytvoření ekvivalntního plánu k příkladu s jednoduchým plánem (zatím bez skupin).
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'great_bread', GROUP_OR_SUBPLAN => 'market',
COMMENT => 'marketing group', CPU_P1 => 20);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'great_bread', GROUP_OR_SUBPLAN => 'develop',
COMMENT => 'development group', CPU_P1 => 20);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'great_bread', GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
COMMENT => 'this one is required', CPU_P1 => 0, CPU_P2 => 100);
END;
Group | Level 1 | Level 2 | Level 3 |
---|---|---|---|
SYS_GROUP | 100,00% | - | - |
sales | - | 60,00% | - |
market | - | 20,00% | - |
develop | - | 20,00% | - |
OTHER_GROUPS | - | - | 100,00% |
Změny pravidel plánu
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE (
PLAN => 'great_bread',
GROUP_OR_SUBPLAN => 'develop',
NEW_CPU_P1 => 15);
DELETE_PLAN_DIRECTIVE
Omezení
CPU_P1-P8 (procenta)
ACTIVE_SESS_POOL_P1 QUEUEING_P1 (timeout in s)
PARALLEL_DEGREE_LIMIT_P1 SWITCH_GROUP SWITCH_TIME (s)
SWITCH_ESTIMATE (bool)
MAX_EST_EXEC_TIME (s)
UNDO_POOL
Interakce mezi plány: pokud je jedna skupina ve více plánech - je vybrán ten nejvíce omezující, u počtu sessions a času na CPU je to součet.
Správa skupin Nastavení výchozí skupiny
EXEC DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP ('scott', 'sales', TRUE);
EXEC DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP('scott', 'sales');
Povolení resource manageru
- trvale nastavením
RESOURCE_MANAGER_PLAN = mydb_plan
v inicializačním souboru, - dočasně pomocí
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN=mydb_plan;
, je k tomu potřeba systémové oprávněníALTER SYSTEM
a nastavení se netýká hesel a aktuálních sessions.