Gerenciamento de Processos - Implementando o Database Resouce Manager – ORACLE 9i

 

Utilizamos o pacote Database Resource Manager para alocar recursos do sistema, ou melhor, porcentagem deles para as classes de usuários e tarefas. Por exemplo, podemos alocar 75% dos recursos de carga da CPU de um servidor de banco de dados para usuários que estejam trabalhando on-line na base. Para tanto, faz-se necessário criar três perspectivas de trabalho, são elas: Criar planos de recursos, grupos de consumidores desses recursos e diretivas do plano de recursos.

Porém, antes de usar os comandos do Database Resource Manager, devemos criar uma “área” de armazenamento denominada de área pendente para a realização do trabalho. Para isso, utilizaremos o comando CREATE_PENDING_AREA pertencente ao pacote DBMS_RESOUCE_MANAGER. Após concluir a operação, usa-se o VALIDATE_PENDING_AREA para verificar toda a estrutura criada (planos, subplanos e diretivas).

 

Então execute: DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

 

Para criar o plano de recursos, utilizaremos o comando CREATE_PLAN também do pacote DBMS_RESOUCE_MANAGER, segue a sintaxe:

 

CREATE PLAN

 (PLAN IN VARCHAR2,

 COMMENT                       IN VARCHAR2,

 CPU_MTH                        IN VARCHAR2 DEFAULT 'EMPHASIS',

 ACTIVE_SESS_TARGET_MTH        IN VARCHAR2 DEFAULT 'ACTIVE_SESS_ABSOLUTE',

 PARALLEL_DEGREE_LIMIT_MTH     IN VARCHAR2 DEFAULT P ARALLEL_DEGREE_LIMIT_ABSOLUT',

 QUEUEING_MTH                         IN VARCHAR2 DEFAULT 'FIFO_TIMEOUT')

 

Após criado um plano, daremos um nome ao mesmo:

 

DBMS_RESOURCE_MANAGER.CREATE_PLAN(

Plan =  'Meu plano',

Comment = 'Meu primeiro Plano');

 

Vale lembrar que alguns parâmetros são setados na criação do plano, logo acima. A variável cpu_mth = default 'emphasis' aloca os recursos de cpu por porcentagem. É importante ressaltar também que para executar os procedimentos de criação dos planos e grupos de consumidores de recursos, deve-se ter privilégio de administrador do sistema (DBA).

Para criar um grupo de consumidores de recursos, usaremos o comando CREATE_CONSUMER_GRUOP, também pertencente ao pacote DBMS_RESOURCE_MANAGER:

 

CREATE_CONSUME_GROUP

( consumer_group IN VARCHAR2,

comment  IN VARCHAR2,

cpu_mth IN VARCHAR2 default 'ROUND-ROBIN')

 

Logo após a criação dos grupos, estaremos designando usuários a pertencerem a um determinado grupo. Logo abaixo teremos um grupo para usuário que estão trabalhando on-line na base.

 

DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP

(CONSUMER_GROUP = 'usuários on-line',

comment = 'grupo on-line');

 

O próximo passo será a criação de diretivas dos planos de recursos. Este suportará a criação de diversos níveis de alocação de CPU para gerenciamento da carga. Assim, criaremos:

 

DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE

(PLAN =  'MEU PLANO',

GROUP = 'usuários on-line',

Comment = 'diretivas de gerenciamento da CPU',

Cpu_p1= 75,

Parallel_degree_limit-pl = 10);

 

Além de alocar recurso para a cpu, neste caso 75%, as diretivas de plano restringem o paralelismo das transações executadas pelo mesmo grupo de consumidores de recursos. Neste caso, o máximo de paralelismo suportado são 10 transações executadas ao mesmo instante pelos usuários que estão on-line.

Para ativar o Resource manager dentro do Oracle 9i, basta definir o parâmetro de inicialização do banco de dados, arquivo de inicialização, através da variável resource_manager_plan, com o nome do plano de recursos da instância. Vale lembrar que, estes planos poderão ter subplanos, de forma que possamos ter camadas de alocação dentro da instância.

Pode-se também alterar de forma dinâmica a instância para que ela possa usar um diferente plano, precisaremos alterar a variável initial_consumer_group, através do comando alter system. Para, indicaremos a ela o novo grupo a ser utilizado:

 

Alter system set initial_consumer_group = 'Novo Grupo'