AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 107096
Accepted
Jacobm001
Jacobm001
Asked: 2015-07-16 10:25:04 +0800 CST2015-07-16 10:25:04 +0800 CST 2015-07-16 10:25:04 +0800 CST

Oracle Autotrace x Explicação

  • 772

Minha equipe usa Oracle 11 e SQL Developer. Ultimamente, tenho confiado muito em explicar planos para tentar determinar a maneira mais eficiente de resolver vários problemas. Recentemente, um colega de trabalho apontou que o plano de explicação nem sempre é preciso para o que realmente acontece no banco de dados e que um autotrace é uma indicação melhor, pois a consulta é realmente executada nos dados.

Testando uma consulta, obtive os seguintes resultados

_________________________________
|      Method        |   Cost   | 
|--------------------|----------|
| Query A Explain    |  306,188 |
| Query A Autotrace  |  399,131 |
| Query B Explain    |   99,226 |
| Query B Autotrace  |  137,661 |
|____________________|__________|

Ao utilizar o autotrace, a consulta A teve um aumento de custo de 30% e a consulta B de quase 40%. Obviamente, eu deveria estar usando a consulta b em ambos os casos, mas não entendo o que faz com que sejam diferentes.

oracle oracle-sql-developer
  • 2 2 respostas
  • 1679 Views

2 respostas

  • Voted
  1. thatjeffsmith
    2015-07-17T06:19:15+08:002015-07-17T06:19:15+08:00

    O Autotrace no SQL Developer obtém o plano de v$sql_plan e também obtém as estatísticas de sua sessão, faz um delta de estatísticas de sessão antes e depois de executar a consulta.

    O plano de explicação pergunta ao banco de dados o que ele ACHA que será o plano para sua consulta.

    Seu colega de trabalho está certo, eles podem diferir muito, e é melhor você usar o AutoTrace ou nosso novo recurso no 4 e superior, onde mostramos o plano em cache (um controle suspenso no botão explicar plano os torna disponíveis).

    insira a descrição da imagem aqui

    • 6
  2. Best Answer
    Justin Cave
    2015-07-16T11:45:50+08:002015-07-16T11:45:50+08:00

    Há uma série de coisas que podem fazer com que o plano real seja diferente do plano estimado (e se você quiser se aprofundar nas ervas daninhas, há muitas coisas que podem fazer com que métodos diferentes de produzir o plano real produzam resultados diferentes mas vou ignorar isso).

    O mais simples (e mais comum) gira em torno de variáveis ​​de ligação. Se eu fizer uma EXPLAIN PLANconsulta simples como

    SELECT COUNT(*)
      FROM my_table
     WHERE col1 = :1
    

    A Oracle não tem informações sobre qual valor eu posso passar, col1então faz uma estimativa muito genérica. Se houver 20 valores distintos, por exemplo, provavelmente ele adivinhará que a consulta precisaria acessar 5% das linhas da tabela. Se você realmente executar esta instrução e passar um valor, por outro lado, o Oracle tem muito mais informações - ele pode saber por um histograma que o valor que você passou realmente exigirá que ele acesse 7% das linhas no tabela. Se o plano de consulta real permanecer inalterado, é totalmente plausível que costaumente em 40%, já que a quantidade de trabalho esperada aumentou em 40%.

    Uma lista completa de tudo o que faz com que os detalhes de um plano de consulta estimado sejam diferentes dos detalhes de um plano de consulta real e uma explicação de como essas coisas interagem seria muito longa para este formato (principalmente porque muitos dos itens ficam muito complicados muito rapidamente). Existem situações em que as estatísticas de um objeto estão ausentes, por exemplo, onde o otimizador precisa fazer uma amostra aleatória dos dados para inferir as estatísticas em tempo de compilação que serão um pouco diferentes toda vez que a consulta for compilada. Existem várias situações em que o otimizador tem algum tipo de mecanismo de feedback que entra em ação quando uma consulta está sendo executada, o que não ocorre quando um plano de consulta está sendo estimado -- ele pode escolher um grau de paralelismo com base nos recursos disponíveis , pode alterar o custo de uma classificação, dependendo de quanto espaço PGA pode obter, dependendo da versão, pode mudar de curso se uma operação recuperar substancialmente mais ou menos dados do que o esperado. Existem efeitos para os planos sendo armazenados em cache ou diferentes tecnologias que tentam garantir a estabilidade do plano quando as consultas são realmente compiladas.

    • 5

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve