- Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 17 anos atrás por
Anônimo.
-
AutorPosts
-
19 de março de 2009 às 8:00 pm #85876
mpvargas
ParticipanteCaros Amigos,
Usamos na empresa um ERP comprado e não é possível alterar determinados procedimentos. Quando executam a contabilização off-line, o servidor fica com excesso de I/O. Executei o ADDM e verifiquei que é por causa da query, conforme abaixo:FINDING 1: 54% impact (6701 seconds)
————————————
Individual database segments responsible for significant user I/O wait were found.RECOMMENDATION 1: Segment Tuning, 37% benefit (4506 seconds)
ACTION: Investigate application logic involving I/O on TABLE
“MSIGA.CT2010” with object id 56041.Tem alguma coisa que eu posso fazer no banco para pelo menos tentar aliviar esse problema.
Obrigado pela ajuda.19 de março de 2009 às 8:10 pm #85877Anônimo
vc pode começar com (se vc tiver a licença dos Advisors), rodando o segment Advisor :
declare
id number;
begin
declare
name varchar2(100);
descr varchar2(500);
obj_id number;
begin
name:=’minha_tarefa’;
descr:=’Segment Advisor ‘;dbms_advisor.create_task (
advisor_name => ‘Segment Advisor’,
task_id => id,
task_name => name,
task_desc => descr);dbms_advisor.create_object (
task_name => name,
object_type => ‘TABLE’,
attr1 => ‘MSIGA’,
attr2 => ‘CT2010’,
attr3 => NULL,
attr4 => NULL,
attr5 => NULL,
object_id => obj_id);dbms_advisor.set_task_parameter(
task_name => name,
parameter => ‘recommend_all’,
value => ‘TRUE’);dbms_advisor.execute_task(name);
end;
end;— depois é só vc fazer :
select * from dba_advisor_actions where task_name = ‘minha_tarefa’ ;
Veja as colunas attr1, attr2, attr3, caso o Oracle tenha alguma recomendação, estará nessas colunas.
[]´s
19 de março de 2009 às 9:02 pm #85881David Siqueira
ParticipanteAmigo pelo que você apresentou seu problema é tipico de performance de aplicação mesmo, o melhor seria você separar essa query que esta impactando e tirar as estatisticas e planos de execuções que envolvem esse objeto ( tabela) em questão, e verificar coisas básicas primeiramente, como :
– temos indices pelas colunas que estão sendo executadas?
– esses indices estão sendo eficientes?
– precisamos particionar essa tabela ?
– as estatisticas estão atualizadas? ( isso vai depender da sua aplicação e de como sua base de dados esta parametrizada)Acredito que isso seria um caminho inicial, feito isso e com todas essas informações na mão daria pra você ter uma idéia melhor do que poderia ser feito no sentido de melhorar sua query e consequentemente sua performance.
Abcs.
David
19 de março de 2009 às 9:07 pm #85882Rodrigo Almeida
ParticipanteO seu problema chama MICROSIGA!!! hehehehehehe… brincadeira.
Marcelo,
Existem alguns passos que pode realizar a nível de banco de dados para retirar o excesso de I/O, físico ou lógico, tem que saber isso primeiro!
Você pode colocar as tabelas desse SELECT em DB_KEEP_CACHE_SIZE, e alterar a estrutura da tabela para Buffer_pool keep!!!
Tu pode verificar se é possível trabalhar com uma bloco de dados maior em uma determinada tablespace e passar as tabelas para lá!
Verificar se está com as estatísticas atualizadas!
Verificar se os índices estão bem da vida!
E outras coisas mais…
Abraços,
Rodrigo Almeida19 de março de 2009 às 11:10 pm #85885mpvargas
ParticipanteCaros Amigos,
Obrigado pela ajuda de todos.Só para efeito de informação, segue abaixo o ultimo plano de execução:
Operação SELECT STATEMENT
Ordem 3
Custo 2477543Operação TABLE ACCESS BY INDEX ROWID
Objeto CT2010
Tipo de Objeto TABLE
Ordem 2
Linhas 5032
Tamanho (KB) 280.102
Custo 2477543
Tempo (seg) 29731
Custo da CPU 30555189430
Custo de Entrada/Saída 2473977Operação INDEX RANGE SCAN DESCENDING
Objeto CT20101
Tipo de Objeto INDEX
Ordem 1
Linhas 7085270
Tamanho (KB)
Custo 66273
Tempo (seg) 796
Custo da CPU 3757005981
Custo de Entrada/Saída 6583419 de março de 2009 às 11:35 pm #85887mpvargas
Participantevdrago
Posso executar esse advisor com a máquina em produção?Rodrigo,
realmente essa microsiga é uma tristeza hehehehe
a tablespace e indíces dessa tabela estão separados
e executo estatística do banco todo 3 vezes por semanaDavid
Como posso testar a eficiência do indice?Obrigado pela ajuda de todos.
20 de março de 2009 às 12:17 am #85888David Siqueira
ParticipanteA eficiencia dos indices tu pode testar via MOnitoring, assim verifica se eles realmente estão sendo utilizados pelas querys cotidianas ou se estão apenas ocupando espaço, em muitos casos tu pode testar a eficiencia pegando querys que tem problemas e vendo se em todos os passos elas acessam indices pra orimizar sua performance, mais o jeito mais prático mesmo é via MONITORING.
Abcs.
David
20 de março de 2009 às 6:35 pm #85890David Siqueira
ParticipanteMp meu velho falei, falei e falei e esqueci de dar o caminho das pedras, segue ai a receitinha de bolo pra usar o Monitoring brother , abração!!!
http://www.oracle-base.com/articles/10g/IndexMonitoring.php
David
20 de março de 2009 às 9:35 pm #85891Anônimo
cara, vc pode sim executar o advisor na máquina de produção. Dependendo do segmento a análise demora um pouco mais (laro!!).
Até agora, nunca tive problema em executar o advisor e causar problema de performance. Como sempre, vale a recomendação de executar em horários de menos atividade.
-
AutorPosts
- Você deve fazer login para responder a este tópico.