Zarejestruj się na BitBay.net
Home > Oracle > Zarządzanie zasobami w Oracle 11G

Zarządzanie zasobami w Oracle 11G

oracle Na początku najważniejsza informacja: mechanizm zarządzania zasobami dostępny jest wyłącznie w Oracle 11G Enterprise Edition (EE). Jeśli nie masz tej edycji nie musisz już dalej czytać :). Ja zanim to sprawdziłem przestudiowałem całą dokumentację pt: „Using the Database Resource Manager”. Poniżej skrót wiadomości na ten temat. Jeśli coś źle napisałem powiadomcie mnie o tym.

Database Resource Manager – dostarcza narzędzia które pozwalają na zarządzanie zasobami procesora/procesorów w stosunku do grup użytkowników i aplikacji.

Podstawowe pojęcia:

  • Resource Consumer Groups – grupa konsumentów jest zbiorem użytkowników o podobnych wymagań dotyczących zużycia zasobów. Użytkownicy mogą być przypisani do więcej niż jednej grupy zasobów konsumentów, ale każda aktywna sesja użytkownika może być przypisana tylko do jednej grupy zasobów konsumentów w danym czasie.
  • Resource Plans – planu zasobów opisuje środki jakie będą przeznaczone na jedną lub więcej grup zasobów konsumentów. Na przykład mogę podać max procent wykorzystania procesora dopuszczalny dla danej grupy użytkowników.
  • Resource Plan Directives – Dyrektywy określające jakie grupy konsumentów z jakich planów zasobów mają korzystać. Czyli to takie jak by powiązanie Resource Consumer Groups z Resource Plans

Do administracji planami zasobów służy pakiet DBMS_RESOURCE_MANAGER

Każda zmiana w zarządzaniu zasobami powinna być skompilowana i zrewalidowana przed jej zastosowaniem. Poniższy kod przedstawia procedurę którą należy się kierować robiąc jakieś zmiany:

BEGIN
DBMS_RESOURCE_MANAGER.clear_pending_area;
DBMS_RESOURCE_MANAGER.create_pending_area;

- Zrób coś

DBMS_RESOURCE_MANAGER.validate_pending_area;
DBMS_RESOURCE_MANAGER.submit_pending_area;
END;
/

Zakładanie grup konsumenckich (Resource Consumer Groups):

BEGIN
DBMS_RESOURCE_MANAGER.clear_pending_area;
DBMS_RESOURCE_MANAGER.create_pending_area;

-- Create the consumer groups
DBMS_RESOURCE_MANAGER.create_consumer_group(
consumer_group => 'programisci',
comment        => 'Nasi kochani programisci.');

DBMS_RESOURCE_MANAGER.create_consumer_group(
consumer_group => 'batch_consumer_group',
comment        => 'Batch process consumer group.');

DBMS_RESOURCE_MANAGER.validate_pending_area;
DBMS_RESOURCE_MANAGER.submit_pending_area;
END;
/

Sprawdzanie grup:

select
consumer_group,
comments
from
dba_rsrc_consumer_groups
order by
consumer_group

Kasowanie grup:

BEGIN
DBMS_RESOURCE_MANAGER.clear_pending_area();
DBMS_RESOURCE_MANAGER.create_pending_area();

-- Delete consumer groups.
DBMS_RESOURCE_MANAGER.delete_consumer_group (
consumer_group => 'programisci');

DBMS_RESOURCE_MANAGER.validate_pending_area;
DBMS_RESOURCE_MANAGER.submit_pending_area();
END;
/

Plany zarządzania zasobami tworzymy za pomocą procedury create_plan, a następnie „łączymy je” z grupami konsumenckimi za pomocą procedury create_plan_directive.
Procedury te wyglądają następująco:

PROCEDURE create_plan (
plan                      IN  VARCHAR2,
comment                   IN  VARCHAR2,
cpu_mth                   IN  VARCHAR2 DEFAULT 'EMPHASIS',
active_sess_pool_mth      IN  VARCHAR2 DEFAULT 'ACTIVE_SESS_POOL_ABSOLUTE',
parallel_degree_limit_mth IN  VARCHAR2 DEFAULT 'PARALLEL_DEGREE_LIMIT_ABSOLUTE',
queueing_mth              IN  VARCHAR2 DEFAULT 'FIFO_TIMEOUT')

PROCEDURE create_plan_directive (
plan                      IN  VARCHAR2,
group_or_subplan          IN  VARCHAR2,
comment                   IN  VARCHAR2,
cpu_p1                    IN  NUMBER DEFAULT NULL,
cpu_p2                    IN  NUMBER DEFAULT NULL,
cpu_p3                    IN  NUMBER DEFAULT NULL,
cpu_p4                    IN  NUMBER DEFAULT NULL,
cpu_p5                    IN  NUMBER DEFAULT NULL,
cpu_p6                    IN  NUMBER DEFAULT NULL,
cpu_p7                    IN  NUMBER DEFAULT NULL,
cpu_p8                    IN  NUMBER DEFAULT NULL,
active_sess_pool_p1       IN  NUMBER DEFAULT NULL,
queueing_p1               IN  NUMBER DEFAULT NULL,
parallel_degree_limit_p1  IN  NUMBER DEFAULT NULL,
switch_group              IN  VARCHAR2 DEFAULT NULL,
switch_time               IN  NUMBER DEFAULT NULL,
switch_estimate           IN  BOOLEAN DEFAULT FALSE,
max_est_exec_time         IN  NUMBER DEFAULT NULL,
undo_pool                 IN  NUMBER DEFAULT NULL,
max_idle_time             IN  NUMBER DEFAULT NULL,
max_idle_blocker_time     IN  NUMBER DEFAULT NULL,
switch_time_in_call       IN  NUMBER DEFAULT NULL)

Przykładowy resources plan:

BEGIN
DBMS_RESOURCE_MANAGER.clear_pending_area;
DBMS_RESOURCE_MANAGER.create_pending_area;

-- Create a new plan
DBMS_RESOURCE_MANAGER.create_plan(
plan    => 'day_plan',
comment => 'Plan suitable for daytime processing.');

-- Assign consumer groups to plan and define priorities
DBMS_RESOURCE_MANAGER.create_plan_directive (
plan             => 'day_plan',
group_or_subplan => 'oltp_consumer_group',
comment          => 'Give OLTP processes higher priority - level 1',
cpu_p1           => 80,
switch_group     => 'batch_consumer_group',
switch_time      => 60);

DBMS_RESOURCE_MANAGER.create_plan_directive (
plan             => 'day_plan',
group_or_subplan => 'batch_consumer_group',
comment          => 'Give batch processes lower priority - level 2',
cpu_p2           => 100);

DBMS_RESOURCE_MANAGER.create_plan_directive(
plan             => 'day_plan',
group_or_subplan => 'OTHER_GROUPS',
comment          => 'all other users - level 3',
cpu_p3           => 100);

DBMS_RESOURCE_MANAGER.validate_pending_area;
DBMS_RESOURCE_MANAGER.submit_pending_area;
END;
/

Sprawdzanie planów:

select
plan,
group_or_subplan,
status
from
dba_rsrc_plan_directives
order by
plan,
group_or_subplan;

Mapowanie użytkowników do grup:
Zasady mapowania użytkowników do grup tworzymy za pomocą procedury SET_CONSUMER_GROUP_MAPPING (kiedyś robiło się to za pomocą SET_INITIAL_CONSUMER_GROUP) która wygląda następująco:

Parameter Description
ATTRIBUTE The login or runtime session attribute type
VALUE The value of the attribute being mapped
CONSUMER_GROUP The consumer group to map to.

 

Attribute Type Description
ORACLE_USER Login The Oracle Database user name
SERVICE_NAME Login The service name used by the client to establish a connection
CLIENT_OS_USER Login The operating system user name of the client that is logging in
CLIENT_PROGRAM Login The name of the client program used to log into the server
CLIENT_MACHINE Login The name of the machine from which the client is making the connection
MODULE_NAME Runtime The module name in the application currently executing as set by the DBMS_APPLICATION_INFO.SET_MODULE procedure or the equivalent OCI attribute setting
MODULE_NAME_ACTION Runtime A combination of the current module and the action being performed as set by either of the following procedures or their equivalent OCI attribute setting: 

  • DBMS_APPLICATION_INFO.SET_MODULE
  • DBMS_APPLICATION_INFO.SET_ACTION

The attribute is specified as the module name followed by a period (.), followed by the action name (module_name.action_name).

SERVICE_MODULE Runtime A combination of service and module names in this form: service_name.module_name
SERVICE_MODULE_ACTION Runtime A combination of service name, module name, and action name, in this form: service_name.module_name.action_name

 

Przykład:

BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING
     (DBMS_RESOURCE_MANAGER.ORACLE_USER, 'scott', 'programisci');
END;

W przypadku gdyby wystąpiły jakieś konflikty podczas mapowania, można ustawić priorytety dla poszczególnych atrybutów. Ustawiamy je za pomocą procedury SET_CONSUMER_GROUP_MAPPING_PRI:

BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING_PRI(
	EXPLICIT => 1,
	SERVICE_MODULE_ACTION => 2,
	SERVICE_MODULE => 3,
	MODULE_NAME_ACTION => 4,
	MODULE_NAME => 5,
	SERVICE_NAME => 6,
	ORACLE_USER => 7,
	CLIENT_PROGRAM => 8,
	CLIENT_OS_USER => 9,
	CLIENT_MACHINE => 10
);
END;

Włączanie planów zarządzania zasobami:
Do włączania planów służy parametr inicjalizacyjny RESOURCE_MANAGER_PLAN:

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'day_plan';

Wyłączanie:

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = '';

Istnieje także coś takiego jak single-level resource plan. Jest to najprostszy plan jednopoziomowy. Do jego stworzenia wykorzystujemy procedurę CREATE_SIMPLE_PLAN np:

BEGIN
DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN(SIMPLE_PLAN => 'simple_plan1',
   CONSUMER_GROUP1 => 'mygroup1', GROUP1_CPU => 80,
   CONSUMER_GROUP2 => 'mygroup2', GROUP2_CPU => 20);
END;

Przydatna dokumentacja:

Kategorie:Oracle Tagi:,
  1. Brak komentarzy
  1. Brak jeszcze trackbacków
*