Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mvmpedro

Shared Server Performance

Recommended Posts

E aí pessoal, tudo bom?! Estou tendo problemas com o Shared Server, segue o cenário:Máquina:HP RISC RP4440 - 4 CPU's 800Mhz - 8GB RAMSistema Operacional: HP-UX 11.11Quantidade de memória livre antes de iniciar o banco: 6133336K freeQuantidade de memória após iniciado o banco: 3284656K freeBanco sendo utilizado: Connected to:Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.6.0 - ProductionAlguns parâmetros:sga_max_size = 3222765832 byteslarge_pool_size = 369098752 bytesshared_pool_size = 419430400shared_servers = 10max_shared_servers = 150shared_server_sessions = 165dispatchers = (protocol=TCP)(disp=1)(con=700)max_dispatchers = 4circuits = 170Nesse primeiro momento, terei no máximo 500 usuários conectados, a aplicação é PL/Web...não tem nada de Java. A string para conexão da aplicação está como shared, a conexão é feita através de um middle tier (Oracle Application Server), mas, isso indifere no resultado final. Pois via SQL*Plus o resultado é o mesmo.Quando executo uma procedure específica, conectado como shared o tempo para execução é de 45 segundos. Como dedicated vai para 10 segundos. Fiz o mesmo teste num servidor de aplicações de desenvolvimento que aponta para o banco, mudei a string de conexão e o resultado foi o mesmo:Dedicated = 10 segsShared = 45 segs.O Explain Plain é praticamente igual, não tem nada de diferente...Já fiz o teste alternando o número de shared_servers e dispatchers, mas o resultado foi o mesmo. Inclusive rodei scripts para monitorar o tempo de espera e performance dos shared_servers e dispatchers, o tempo de espera está mínimo...Todo o banco está perfeito, todas as procedures estão com ganho de desempenho em relação à máquina do projeto piloto (que é bem inferior à esta citada acima e que está com o banco em dedicated), exceto esta procedure...a única coisa que estou intrigado é em relação às global temporary tables em conjunto com o shared server, já que essa procedure acessa 3 tabelas temporárias...Do resto, não enxerguei algo que possa estar prejudicando tanto...AbraçosVinicius

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Marcus,

 

O problema está somente nessa procedure mencionada, ou você percebeu lentidão na base inteira?

 

O recurso de mémoria é normal, quando você inicia a instância, seu volume de mémoria irá diminuir mesmo, por causa do seu SGA alocado para o banco de dados.

 

Porém, seu banco de dados está em RAC? Ou você configurou mesmo como shared na criação do banco!

 

Isso é um "problema" legal, pois muitas pessoas dizem que quando se tem muitos usuários na rede, o idéal é projetar um banco SHARED, pois compartilha o SQL CACHE LIBRARY do SGA com os usuários, e percebeu que como DEDICATED é mais rápido, 3x mais.

 

Mais vamos lá, alguns pontos que você pode levantar:

 

Na procedure, veja :

 

* As tabelas que estão acessando, e veja suas estatísticas. Caso seu optimizador esteja em CHOOSE ou CUSTO.

* Veja se existe cursor, e veja como está sendo aberto.

* Veja se existe índices nas tabelas com faça refinação dos dados.

* Veja se está utilizando SQL dinâmico.

 

Isso é um tuning em objeto, que talvez possa ajudar o andamento da procedure.

 

Caso contrário, poste mais informações e tentamos fazer um tuning no banco.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rodrigo, sim, em relação à SGA eu sei, apenas expressei como exemplo para ver que os recursos estão disponíveis "em abundância".

 

O problema está somente nessa procedure...

 

O banco não está em RAC, quando ele foi criado, já foi criado como shared...

 

Em relação ao objeto, veja, fiz duas experiências nessa base:

 

1) SQL*Plus, string=dedicated, tempo de execução: 10 segs;

2) SQL*Plus, string=shared, tempo de execução: 45 segs.

 

O Explain Plan tanto no shared como no dedicated está igual!

 

Vou explicar um pouco mais sobre o cenário...

 

Atualmente o banco está como um piloto, com 50 clientes conectados, mas não nessa máquina, e sim numa outra máquina com configuração inferior, porém, o banco em dedicado.

 

Essa máquina que passei a configuração no email anterior é a máquina que entrará em produção, com aproximadamente 300 usuários conectados...

 

Fizemos testes em toda a base, comparando os resultados da base "piloto" que está em produção (que está como dedicated), com a base que está em homologação e logo entrará em produção (essa que está como shared), e, em todos os testes executados, a nova base (shared) foi mais performática do que a base atual (piloto)...exceto essa procedure.

 

Por isso pergutnei se não pode ser algo com as 3 tabelas temporárias que ela acessa. Existe algum bug de tabelas temporárias com shared server??

 

Consegui ser claro?

 

E antes de me despedir...eu sou o "mala" que te enche o saco de vez em quando no email, fiz aula no IBTA...lembra?

 

Abraços

 

Vinicius

 

Olá Marcus,

 

O problema está somente nessa procedure mencionada, ou você percebeu lentidão na base inteira?

 

O recurso de mémoria é normal, quando você inicia a instância, seu volume de mémoria irá diminuir mesmo, por causa do seu SGA alocado para o banco de dados.

 

Porém, seu banco de dados está em RAC? Ou você configurou mesmo como shared na criação do banco!

 

Isso é um "problema" legal, pois muitas pessoas dizem que quando se tem muitos usuários na rede, o idéal é projetar um banco SHARED, pois compartilha o SQL CACHE LIBRARY do SGA com os usuários, e percebeu que como DEDICATED é mais rápido, 3x mais.

 

Mais vamos lá, alguns pontos que você pode levantar:

 

Na procedure, veja :

 

* As tabelas que estão acessando, e veja suas estatísticas. Caso seu optimizador esteja em CHOOSE ou CUSTO.

* Veja se existe cursor, e veja como está sendo aberto.

* Veja se existe índices nas tabelas com faça refinação dos dados.

* Veja se está utilizando SQL dinâmico.

 

Isso é um tuning em objeto, que talvez possa ajudar o andamento da procedure.

 

Caso contrário, poste mais informações e tentamos fazer um tuning no banco.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae Rapaz,

 

Procurei pelo seu nome e ví os e-mails que trocamos, gostou dos cursos do IBTA? hehehehe....

 

Seguinte, vamos a suas dúvidas.

 

O problema que talvez possa estar ocorrendo é em relação aos parametros de configuração do PGA e SGA, pois quando estamos trabalhando em SHARED SERVER, temos poucas processos do servidor, diferente do dedicado, e isso pode estar ocorrendo contigo.

 

E como tu disse que está "pendendo" nas tabelas temporárias, possa estar com problemas de SORT_AREA_SIZE, SHARED_POOL_SIZE e LARGE_POOL_SIZE, como não uma aplicação JAVA, então não precisa mexer nos parametros dele.

 

Aumente esses paramêtros e execute novamente a procedure, e veja os resultados.

 

Antes, se utilizar o SQL*PLUS, grave o timing da cada execução para comparar posteriomente.

 

Você verificou o tuning nos objectos e está tudo certinho!!!

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae Rodrigo!Gostei dos cursos sim, o retorno foi rápido, 11 dias após terminar o "módulo" de Tuning já estava empregado...Bom:SHARED_POOL_SIZE = 400MLARGE_POOL_SIZE = 350M.O meu SORT_AREA_SIZE não está sendo usado. Já que estou usando os parâmetros PGA_AGGREGATE_TARGET com 100M e o parâmetro WORKAREA_SIZE_POLICY como AUTO.Os valores estavam anteriormente estavam em:SHARED_POOL_SIZE = 350M.LARGE_POOL_SIZE = 300M.PGA_AGGREGATE_TARGET = 70MLembrando que o problema de performance é apenas no SHARED_SERVER, e detalhe: por enquanto, só tem 1 usuário conectado! Mas como falei anteriormente, apenas essa procedure apresenta problema de performance...Já fizemos um stress teste na máquina com 100 usuários pendurados executando a mesma procedure (cada qual com seu valor é claro), e o tempo de execução foi o mesmo para todos: 45 segs.O resultado foi o mesmo! :o Abraços!Vinicius

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, ontem você matou a charada!

 

Bom, de acordo com o material oficial da Oracle, é dito que ao se usar o parâmetro PGA_AGGREGATE_TARGET com valor definido, junto com o WORKAREA_SIZE_POLICY como AUTO, os valores dos parâmetros *_AREA_SIZE são ignorados.

 

Até aí tudo bem, nada de segredo, no entanto, no documento 223299.1 Subject: Top Oracle 9i init.ora Parameters Affecting Performance do Metalink, olha o que fala:

 

"If PGA_AGGREGATE_TARGET is set in the init.ora and Dedicated Server connection is used, then SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE and CREATE_bitmap_AREA_SIZE are ignored. If Shared server connection is used then PGA_AGGREGATE_TARGET will be ignored and the *_AREA_SIZE parameter will take precedence. "

 

Essa informação eu não havia encontrado em nenhum lugar da documentação (posso ter procurado mal...), mas pelo menos no material do curso não referencia nada...

 

Bom, executei a procedure no shared server...o que demorava 45 segundos agora leva:

 

Elapsed: 00:00:06.85

 

Bom, é isso, problema resolvido! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Obrigado!

 

Abraços!

 

Vinicius

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala ae Rapaz....

 

Que bom que resolvemos o problema, quando trabalhamos em SHARED SERVER e temos aplicações envolvidas no ambiente, sempre devemos lembrar do PGA e quando for mais embaixo o problema, vericar o UGA.

 

Agora sua base ficou um foguetinho.... depois tu me paga uma cerveja!!! hehehehehehe...

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.