Para banco de dados Oracle forneça esta informação:
Descreva os sintomas do problema
Descreva o comportamento que causa o problema. O comportamento da consulta é estável ou o problema ocorre apenas algumas vezes, com parâmetros específicos ou simples aleatórios. Você pode reproduzir esse comportamento em um IDE (por exemplo, SQL Developer)?
Descreva o ambiente
Defina a versão exata do Oracle
select * from v$version
Descreva como você se conecta ao banco de dados:driver, ORM, linguagem de programação. Forneça nomes e/ou números de versão.
Descreva a consulta
Poste o texto da consulta. Tente simplificar - mostre um exemplo reproduzível mínimo .
Exemplo - sua consulta problemática une 10 tabelas. Verifique se você vê os mesmos sintomas em uma consulta com 9 ou 8 junções. Desça até ver os problemas e mostre apenas a consulta reduzida.
Sim, isso é caro, mas aumenta muito a chance de você receber suporte! Quanto menor a consulta, maior ela atrai os apoiadores.
Descreva o plano de execução
Para obter o plano de execução, execute esta instrução (substitua o texto da consulta)
EXPLAIN PLAN SET STATEMENT_ID = '<some_id>' into plan_table FOR
select * from .... -- your query here
;
O plano de execução é armazenado em
PLAN_TABLE
, para vê-lo executar esta consulta SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', '<some_id>','ALL'));
Mostrar o resultado completo (não apenas a tabela com o plano de execução). Extremamente importante pode ser a seção de predicados e as notas abaixo.
Exemplo para
select * from dual where dummy = :1;
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / [email protected]$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("DUMMY"=:1)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "DUMMY"[VARCHAR2,1]
Não recorte e cole o resultado gráfico do seu plano de explicação do IDE.
Este plano de execução é o real que é executado?
Infelizmente nem sempre. Existem várias razões para a explicação plano de execução pode diferir do real.
Se você estiver em dúvida (especialmente quando você vê um bom plano, mas a consulta é ruim), você pode extrair o plano do cache do banco de dados fornecendo um
SQL_ID
. SELECT t.* FROM table(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>',null,'ALL')) t;
O SQL_ID para uma consulta que está em execução no momento (ou estava em execução em breve e ainda está em cache) pode ser encontrado com correspondência de texto e/ou o usuário do banco de dados:
select sql_id, sql_fulltext from v$sql a where
lower(sql_text) like lower('%<some identifying part of the query text>%')
and parsing_schema_name = '<user running the query>';
Se você tiver licença AWR, poderá obter o plano de execução a partir daí, mesmo para consultas em execução no histórico.
SELECT t.*
FROM table(DBMS_XPLAN.DISPLAY_AWR('10u2rj016s96k' )) t;
O SQL_ID pode ser encontrado usando
select sql_id, sql_text
from dba_hist_sqltext a
where lower(sql_text) like lower('%<some identifying part of the query text>%')
Descreva os dados
Mostre o DDL das tabelas e índices nessas tabelas.
Mencione se as estatísticas do otimizador foram coletadas recentemente e mostre os
dbms_stats
usados recolher declaração. Para as tabelas críticas, forneça informações sobre tamanho do segmento, número de linhas, particionamento,...
Para as colunas usadas em acessos ou junções, forneça informações sobre o número de valores distintos. Os valores são distribuídos uniformemente ou distorcidos (por exemplo, um pequeno número de valores que ocorre com muita frequência e um grande número de valores raros). Você define histogramas?
Algo mais?
Claro que isso é apenas o básico e outras informações ainda podem ser necessárias, como estatísticas do sistema ou parâmetros do otimizador. Mas, mais uma vez, tente fornecer as informações mínimas que (você) podem identificar o problema.
Boa sorte!