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 / 68996
Accepted
Martin
Martin
Asked: 2014-06-26 03:20:29 +0800 CST2014-06-26 03:20:29 +0800 CST 2014-06-26 03:20:29 +0800 CST

Posso obter alguma justificativa do Optimzer por que ele escolheu um determinado plano de explicação?

  • 772

Não se trata de ler um plano de explicação.

Não se trata de adicionar dicas ou medir o desempenho de uma consulta específica.

Sempre me perguntei se é possível para um determinado plano de explicação para uma consulta (ou um autotrace da consulta) "perguntar" ao Otimizador por que ele escolheu esse plano em vez de outros planos disponíveis para ele.

  • Existe uma maneira de pedir ao banco de dados para exibir uma comparação de diferentes planos que considerou para a mesma consulta?
  • Existe uma maneira de visualizar quais cálculos foram incluídos no custo exibido para um plano? (Por exemplo, o que o Optimizer assumiu wrt. acesso ao disco vs. coisas na memória, etc.)

Justificativa da pergunta: Com o EXPLAIN PLAN como eu conheço, quando o banco de dados escolhe um determinado plano de execução, e este é insuficiente/muito lento/... no primeiro momento um DBA ou desenvolvedor ad hoc não sabe: Se existe havia alguma alternativa a este plano e, além disso, não sabe por que, se o desenvolvedor conhece alternativas (por exemplo, um índice não utilizado), as alternativas não foram usadas.

oracle explain
  • 2 2 respostas
  • 259 Views

2 respostas

  • Voted
  1. Best Answer
    ik_zelf
    2014-06-26T04:17:29+08:002014-06-26T04:17:29+08:00

    Sim você pode.

    Isso é chamado de rastreamento do otimizador Oracle. Fazer isso cria um arquivo de rastreamento no qual o otimizador despeja todo o raciocínio feito ao compor um plano.

    Um exemplo de geração de rastreamento para um SQL específico pode ser encontrado aqui como rastrear otimizador para todo o sistema SQL específico - 10053 evento de rastreamento

    Você pode precisar de um pouco de tempo para lê-lo, dada a quantidade de dados encontrados no trace, é incrível que o Oracle ainda encontre tempo para fazer isso e retornar em um tempo decente.

    • 2
  2. Vérace
    2014-06-26T05:21:01+08:002014-06-26T05:21:01+08:00

    O Optimizer da Oracle é uma ciência inteira em si. Além de @ik_zelf, você deve consultar o TKPROF, que ajuda a tornar os arquivos .trc legíveis por humanos. Confira aqui e aqui os livros de Cary Millsap (principalmente o Oracle trace). Confira o livro de Jonathan Lewis e seu blogpara saber muito sobre o otimizador Oracle. O livro de Lewis tem 536 páginas (só se chama Fundamentals!) e ele disse que iria escrever outro (ainda não saiu). Há também um conceito chamado "estabilidade do plano" (Google it), onde você pode corrigir o plano se estiver satisfeito com o desempenho e não quiser que o otimizador "adivinhe" você, às vezes produzindo planos abaixo do ideal. Essas ideias parecem estar na linha de "melhor o diabo que você conhece do que aquele que você não conhece" - ou seja, é melhor um plano abaixo do ideal que funcione razoavelmente bem do que um que _poderia_ funcionar brilhantemente, mas com o risco de atrapalhar o funciona se o otimizador der errado.

    • 1

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