Olá pessoal, no artigo de hoje irei comentar sobre um ótimo recurso do Oracle Database, chamado Shared Servers (Servidores Compartilhados), que permite economizar a memória alocada para os processos de usuários do Banco de Dados.
Antes de falar mais detalhes sobre Shared Servers, é necessário entender primeiro a diferença entre Dedicated Servers e Shared Servers. Para explicar resumidamente estes 2 conceitos, podemos dizer que Dedicated Servers é um modo de conexão do Banco de Dados Oracle, onde cada sessão de usuário cria um processo do Sistema Operacional (tratando-se de Database Oracle instalado em Linux). Em Shared Servers, múltiplas sessões de usuários podem compartilham processos do Sistema Operacional. Na arquitetura de Shared Servers, existem componentes adicionais chamados dispatchers, que são responsáveis por alocar as sessões de usuários em processos compartilhados.
Shared Servers são muito bons para reduzir a quantidade de memória utilizada em BD's OLTP's, onde muitos usuários permanecem conectados por um longo tempo, realizando transações intermitentes, cujo tempo de ociosidade da sessão é bem maior que o tempo de atividade (tempo de execução).
Fonte: Wikipedia |
Para habilitar Shared Servers em um BD Oracle, configure o parâmetro de inicialização SHARED_SERVERS para um valor maior que 0 (zero), como no exemplo abaixo:
Ex.: ALTER SYSTEM SET SHARED_SERVERS=10 SCOPE=BOTH;
Obs.: O valor igual a 10 para o parâmetro SHARED_SERVER no exemplo acima foi utilizado apenas para fins didáticos. O valor ideal deve ser calculado cuidadosamente considerando o número total de sessões de usuários que se conectam simultâneamente no BD e que permanecem a maior parte do tempo ociosas. Essa característica geralmente não se aplica a sessões de usuários de aplicações web, que se conectam e desconectam rapidamente ou que utilizam um pool de conexão.
Obs.: O valor igual a 10 para o parâmetro SHARED_SERVER no exemplo acima foi utilizado apenas para fins didáticos. O valor ideal deve ser calculado cuidadosamente considerando o número total de sessões de usuários que se conectam simultâneamente no BD e que permanecem a maior parte do tempo ociosas. Essa característica geralmente não se aplica a sessões de usuários de aplicações web, que se conectam e desconectam rapidamente ou que utilizam um pool de conexão.
O parâmetro SHARED_SERVERS é o único parâmetro obrigatório para habilitar Shared Servers e é ele quem define o número mínimo de processos compartilhados que são criados quando a instância de BD é inicializada. O Oracle Database pode ajustar dinamicamente o número de processos compartilhados necessários, conforme a necessidade e uso.
Outros parâmetros, opcionais, podem ser configurados para permitir uma configuração melhor do recursos de Shared Servers. Os principais são:
- MAX_SHARED_SERVERS: Permite especificar o número máximo de servidores compartilhados que podem ser criados para serem executados simultâneamente.
- DISPATCHERS: Permite configurar entre outras coisas, o protoloco, qtde. de dispatchers e qtde. de sessões gerenciadas por dispatcher na arquitetura de Shared Servers.
- SHARED_SERVERS_SESSIONS: Permite especificar a qtde. de sessões de usuários que podem executar simultâneamente em servidores compartilhados. Quando a qtde. de sessões de usuários conectadas alcançar este número, as próximas sessões serão conectadas em modo de Servidor Dedicado (Dedicated Server).
Por motivos diversos, entre eles performance, certos tipos de atividades não podem ou não devem ser executadas em modo Shared Server. Entre elas podemos destacar:
- Tarefas de administração do Banco de Dados;
- Operações de backup e restauração;
- Processamento batch e operações de carga em alto volume;
- Operações de data warehouse.
Ao habilitar Shared Server em um BD, este torna-se o modo de conexão padrão, ou seja, após habilitar Shared Server toda sessão de usuário irá se conectar em modo de servidor compartilhado. Nestes casos, quando for necessário abrir uma conexão em modo dedicado, clientes de BD que se conectam usando TNSNAMES, devem incluir no arquivo TNSNAMES.ORA de suas máquinas host a palavra-chave SERVER=DEDICATED, como no exemplo abaixo (considerando referência a uma instância de BD chamada PROD em um servidor chamado FABIOPRADO):
PROD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = FABIOPRADO)(PORT = 1521))
)
(CONNECT_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = FABIOPRADO)(PORT = 1521))
)
(CONNECT_DATA =
(SID = treina)
(SERVER = DEDICATED)
)
)
DICAS:
1- Configure de 20 a 30 shared servers para cada 500 sessões de usuários;
2- Configure 1 dispatcher para cada 50-100 sessões;
(SERVER = DEDICATED)
)
)
Um ponto muito importante para quem usa Shared Servers em Oracle Database 11G e está analisando, por exemplo, um AWR Report, é que o Wait Event virtual circuit wait normalmente não trata-se de um problema, ele apenas indica que existem servidores compartilhados ociosos. Experimente diminuir o valor do parâmetro SHARED_SERVERS e você verá que o valor deste evento de espera irá diminuir.
DICAS:
1- Configure de 20 a 30 shared servers para cada 500 sessões de usuários;
2- Configure 1 dispatcher para cada 50-100 sessões;
3- Utilize os scripts do artigo Scripts Shared Server para monitorar e otimizar os valores configurados nos itens 1 e 2 , se necessário.
COMENTÁRIOS FINAIS:
Habilitar Shared Servers em BD´s OLTP que possuem muitas sessões de usuários conectadas e onde o tempo de ociosidade delas é maior que o tempo de atividade, é um ótimo recurso para economizar memória e muitas vezes, otimizar o desempenho geral do BD, que poderia piorar se a memória do BD estivesse se esgotado. Isso já aconteceu comigo e eu tive que habilitar Shared Servers em um BD de Produção porque o servidor não tinha memória suficiente para comportar o número de sessões de usuários após a implantação de alguns novos sistemas.
Por hoje é só! Espero que o artigo seja útil!
[]s
Referências:
- Oracle® Database Administrator's Guide 11g Release 1 (11.1) - Shared Server (MTS) Diagnostics [ID 1005259.6]
0 comments:
Postar um comentário