Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Consulta para encontrar varreduras completas de tabela no oracle


Muitas vezes, o desempenho do banco de dados será lento. Primeiro, precisamos descobrir  se alguma grande verificação de tabela completa está acontecendo.

Vamos primeiro verificar o que é Full table scan e então veremos a consulta para encontrar full table scans no oracle

O que é Verificação de tabela completa

  • A verificação completa da tabela é um dos métodos de acesso usados ​​pelo Optimizer. Neste Todos os blocos na tabela (até HWM) são verificados e as condições de filtro da cláusula WHERE são aplicadas e as linhas que satisfazem a condição de filtro são retornadas. O plano de explicação será exibido assim
Execution Plan
TABLE ACCESS FULL OF HZ_PARTIES
  • A varredura completa da tabela varreu a tabela usando leitura de vários blocos.Vários blocos varridos para cada IO –> menos operações de IO são feitas
  • O parâmetro
  • db_multiblock_read_count init.ora decide a contagem de multiblocos. Versão recente, o próprio oracle ajusta este parâmetro de acordo com o Sistema e você não precisa defini-lo
  • O que é HWM – High Water Mark :É o limite que separa os blocos que contêm ou continham dados dos blocos que nunca foram inseridos. O número de blocos abaixo do HWM pode ser obtido através da coluna blocks da view dba_tables

consulta para encontrar varreduras de tabela completas no oracle

col event format a25
col module format a50
col File format 9999
col Block format 9999999
set lines 130
set trimspool on
select sessw.SID, sessw.EVENT, sessw.p1 "File",sessw.p2 "Block", s.MODULE
from v$session_wait sessw, v$session sess
where sessw.sid = sess.sid
and sessw.event like '%scattered%'
order by 1
/

A consulta acima relatará qualquer verificação de tabela completa atual no banco de dados. Você pode encontrar o nome da tabela na consulta abaixo
select segment_name
from dba_extents
where file_id = &fileid
and &block between block_id and block_id + blocks - 1
;

Se você quiser ver o histórico de toda a sessão atual no banco de dados para verificação completa da tabela, podemos usar a consulta abaixo
column user_process heading "Name |SID" format a20;
column long_scans heading "Long Scans" format 999,999,999;
column short_scans heading "Short Scans" format 999,999,999;
column rows_retreived heading "Rows Retrieved" format 999,999,999;
set linesize 1000
set timing on
select ss.username||'('||se.sid||') ' "USER_PROCESS",
sum(decode(name,'table scans (short tables)',value)) "SHORT_SCANS",
sum(decode(name,'table scans (long tables)', value)) "LONG_SCANS",
sum(decode(name,'table scan rows gotten',value)) "ROWS_RETRIEVED"
from v$session ss, v$sesstat se, v$statname sn
where se.statistic# = sn.statistic#
and (name like '%table scans (short tables)%'
or name like '%table scans (long tables)%'
or name like '%table scan rows gotten%' )
and se.sid = ss.sid
and ss.username is not null
group by ss.username||'('||se.sid||') '
order by LONG_SCANS desc
/

Se você deseja encontrar todo o sql armazenado em cache no cache da biblioteca para a instrução de verificação de tabela completa
select sql_id,object_owner,object_name from V$SQL_PLAN where
operation='TABLE ACCESS' and
options='FULL' and
object_owner <> 'SYS';

Você pode obter o texto completo de sql_id usando a consulta abaixo
SELECT sql_text, parsing_schema_name, module
FROM v$sql
WHERE sql_id = '&1'

Como evitar a verificação completa da tabela no Oracle


A varredura completa da tabela não é um mal necessário. O otimizador Oracle escolhe o plano com base no ponto de dados. Se ele escolheu a varredura completa de dados, certamente achou bom. Além disso, muitas vezes a varredura de índice pode não ser boa para a consulta e é mais cara que a varredura de tabela completa. Portanto, precisamos analisar minuciosamente antes de tomar qualquer decisão sobre a verificação completa da tabela

A seguir estão alguns dos itens a serem verificados
(a) Estatísticas do Otimizador obsoleto:verifique se as estatísticas do otimizador disponíveis nas tabelas são atuais e não diferem muito dos dados reais
(b) Verifique os índices e o índice fator de agrupamento :Você pode estar perdendo os índices corretos
(c) A consulta pode estar usando a cláusula paralela e, portanto, escolher Verificação completa da tabela como plano ideal
(d) Configurações de parâmetro incorretas para Optimizer_mode,optimizer_index_cost_adj, optimizer_index_caching

Às vezes, executar o sql tuning advisor na consulta ajuda

Artigos relacionados
plano de explicação no oracle:tudo sobre o plano de explicação no Oracle, como ler o plano de explicação do oracle para problemas relacionados ao desempenho, como encontrar o plano de explicação para consulta no cursor
o que é leitura lógica no oracle:o que é leitura lógica no oracle e E/S física no Oracle, qual é a melhor E/S lógica e física em termos de desempenho, consultas para encontrar leituras físicas
sql tuning advisor :Como executar o sql tuning advisor para sql_id no cursor cache, como a tarefa de ajuste de sql é criada e executada para obter a recomendação
encontrar índices em uma tabela no oracle :confira este artigo para encontrar consultas sobre como encontrar índices em uma tabela no oracle, listar todos os índices no esquema ,status do índice, coluna do índice
variáveis ​​de vinculação no oracle :A variável de vinculação é o espaço reservado para valores em sqlplus e PLSQL e é substituída por valores quando a instrução é executada
como verificar o perfil sql no oracle :Verifique saiu este post sobre como verificar o perfil sql no oracle, como encontrar o conteúdo do sql prof ile, como descartar o perfil sql