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'