- Este tópico contém 22 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 9 meses atrás por
eversonpiza.
-
AutorPosts
-
8 de junho de 2009 às 4:52 pm #87207
Marcio68Almeida
ParticipanteLá vamos nós de novo… risos…
Coloquei o hint, porém nada mudou…
Aliás, o meu DBA testou com diversos hints diferentes e nada mudou…
O plano de execução é feito pelo comando :
set autot trace explain stat
Não há tabelas temporárias… 🙁
Plano de Execução
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE (Cost=10 Card=1 Bytes=139)
1 0 FILTER
2 1 MERGE JOIN (CARTESIAN) (Cost=7 Card=1 Bytes=139)
3 2 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=109)
4 3 NESTED LOOPS (Cost=2 Card=1 Bytes=126)
5 4 TABLE ACCESS (BY INDEX ROWID) OF 'TB_OBRAS' (Cost=1 Card=1 Bytes=17)
6 5 INDEX (RANGE SCAN) OF 'IDX_OBRAS_02' (NON-UNIQUE) (Cost=1 Card=1)
7 4 INDEX (RANGE SCAN) OF 'PK_EMPRESAS_NFS' (UNIQUE) (Cost=1 Card=1)
8 2 BUFFER (SORT) (Cost=6 Card=1 Bytes=13)
9 8 VIEW (Cost=5 Card=1 Bytes=13)
10 9 SORT (AGGREGATE)
11 10 FILTER
12 11 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=39)
13 12 NESTED LOOPS (Cost=2 Card=1 Bytes=54)
14 13 TABLE ACCESS (BY INDEX ROWID) OF 'TB_OBRAS' (Cost=1 Card=1 Bytes=15)
15 14 INDEX (RANGE SCAN) OF 'IDX_OBRAS_02' (NON-UNIQUE) (Cost=1 Card=1)
16 13 INDEX (RANGE SCAN) OF 'PK_EMPRESAS_NFS' (UNIQUE) (Cost=1 Card=1)
17 11 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=24)
18 17 INDEX (RANGE SCAN) OF 'IDX_TB_EMPRESAS_NFS_03' (NON-UNIQUE) (Cost=1 Card=1)
19 11 TABLE ACCESS (BY INDEX ROWID) OF 'TB_ENCERRAMENTOS' (Cost=2 Card=1 Bytes=22)
20 19 INDEX (RANGE SCAN) OF 'ENC_PK' (UNIQUE) (Cost=3 Card=1)
21 1 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=24)
22 21 INDEX (RANGE SCAN) OF 'IDX_TB_EMPRESAS_NFS_03' (NON-UNIQUE) (Cost=1 Card=1)
23 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_ENCERRAMENTOS' (Cost=2 Card=1 Bytes=22)
24 23 INDEX (RANGE SCAN) OF 'ENC_PK' (UNIQUE) (Cost=3 Card=1)
Estatística
----------------------------------------------------------
6624351 recursive calls
0 db block gets
9406402 consistent gets
278 physical reads
0 redo size
42983 bytes sent via SQL*Net to client
15470 bytes received via SQL*Net from client
29 SQL*Net roundtrips to/from client
159613 sorts (memory)
0 sorts (disk)
406 rows processed
Ishii,
Que a aplicação é um lixo, não tenho dúvida alguma.
O problema é que, a mesma aplicação em um grupo (RAC) de bancos de dados com mais informações roda relativamente rápido, e neste outro demora e tem estes números absurdos.Cleiton,
Não temos nenhum processo de auditoria sendo executado neste banco.
O que você quer dizer com “forçando um FTS” ???8 de junho de 2009 às 5:20 pm #87208Ishii
ParticipanteMárcio,
Será que o DEGREE das tabelas está com um valor para o RAC? Se não me engano para uma instância ele deve estar com 1…
[]s Ishii
8 de junho de 2009 às 5:49 pm #87209Marcio68Almeida
ParticipanteRealmente as tabelas estão todas com degree 1, poucos são os índices que criei com parallel, a grande maioria é antigo e está básico…
8 de junho de 2009 às 10:34 pm #87214eversonpiza
ParticipanteMarcio,
Se me permitir participar do assunto.O tamanho das tabelas envolvidas na consulta é o mesmo?
Se sim, teste exportar as estatísticas do servidor que esta rápido, e importá-las no outro.Embora os dois servidores sejam idênticos, dificilmente as estatísticas tb serão, normalmente o que eu faço em ambiente de testes/homologação, é usar as estatísticas da produção.
Atn,
Everson8 de junho de 2009 às 11:19 pm #87215Marcio68Almeida
Participante[quote=”eversonpiza”:2jynfb9t]Marcio,
Se me permitir participar do assunto.O tamanho das tabelas envolvidas na consulta é o mesmo?
Se sim, teste exportar as estatísticas do servidor que esta rápido, e importá-las no outro.Embora os dois servidores sejam idênticos, dificilmente as estatísticas tb serão, normalmente o que eu faço em ambiente de testes/homologação, é usar as estatísticas da produção.
Atn,
Everson[/quote]
Toda ajuda é bem vinda… 😀
No servidor que demora menos, as tabelas são maiores.
Não posso usar estatísticas de outro servidor, pois, mesmo sendo a mesma aplicação, os clientes são distintos.8 de junho de 2009 às 11:29 pm #87216beneti
ParticipanteMarcio,
tente o seguinte:
set autotrace traceonly; (ao inves de set autot trace explain stat)
E rode a consulta (com o hint ou setando a sessao para rule). O custo está aparecendo pois você pede a stat. Pode ser que o plano mude.
Com regra não é pra aparecer nada de cost ou card, isso que está estranho.
9 de junho de 2009 às 12:14 am #87217Marcio68Almeida
Participante[quote=”beneti”:1ty2ke7j]Marcio,
tente o seguinte:
set autotrace traceonly; (ao inves de set autot trace explain stat)
E rode a consulta (com o hint ou setando a sessao para rule). O custo está aparecendo pois você pede a stat. Pode ser que o plano mude.
Com regra não é pra aparecer nada de cost ou card, isso que está estranho.[/quote]
O banco está configurado para choose, nenhuma configuração irá alterar isso…9 de junho de 2009 às 3:31 pm #87223eversonpiza
ParticipanteTente forçar ele a usar hash join no lugar no merge join, ele costuma ser bem mais eficiente, para isso use o hint use_hash (tabela a tabela b).
Tb de uma olhada no parâmetro pga_aggregate_target, pois para fazer hash ele vai precisar de memória. -
AutorPosts
- Você deve fazer login para responder a este tópico.