sql >> Base de Datos >  >> RDS >> Oracle

Consulta para encontrar escaneos completos de tablas en Oracle

Muchas veces, el rendimiento de la base de datos será lento. Primero debemos averiguar si se está realizando un análisis completo de la tabla grande.

Primero veamos qué es el escaneo completo de la tabla y luego veremos la consulta para encontrar escaneos completos de la tabla en Oracle

¿Qué es el escaneo completo de la tabla?

  • La exploración completa de la tabla es uno de los métodos de acceso utilizados por Optimizer. En esto, se escanean todos los bloques de la tabla (hasta HWM) y se aplican las condiciones de filtro de la cláusula WHERE y se devuelven las filas que cumplieron con la condición de filtro. Explicar el plan se mostrará así
Execution Plan
TABLE ACCESS FULL OF HZ_PARTIES
  • La exploración completa de la tabla escaneó la tabla usando la lectura de múltiples bloques. Se escanearon varios bloques para cada IO –> se realizan menos operaciones de IO
  • El parámetro db_multiblock_read_count init.ora decide el recuento de multibloques. Versión reciente, Oracle mismo ajusta este parámetro según el Sistema y no necesita definirlo
  • Qué es HWM – High Water Mark:es el límite que separa los bloques que contienen o han contenido datos de los bloques en los que nunca se han insertado. El número de bloques por debajo del HWM se puede obtener a través de la columna de bloques de la vista dba_tables

consulta para encontrar escaneos completos de tablas en 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
/

La consulta anterior informará cualquier exploración de tabla completa actual que se realice en la base de datos. Puede encontrar el nombre de la tabla en la siguiente consulta

select segment_name
from dba_extents
where file_id = &fileid
and &block between block_id and block_id + blocks - 1
;

Si desea ver el historial de todas las sesiones actuales en la base de datos para un escaneo completo de la tabla, podemos usar la siguiente consulta

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
/

Si desea encontrar todo el sql almacenado en caché en la memoria caché de la biblioteca para la declaración de exploración de tabla completa

select sql_id,object_owner,object_name from V$SQL_PLAN where
operation='TABLE ACCESS' and
options='FULL' and
object_owner <> 'SYS';

Puede obtener el texto completo de sql_id mediante la siguiente consulta

SELECT sql_text, parsing_schema_name, module
FROM v$sql
WHERE sql_id = '&1'

Cómo evitar el análisis completo de la tabla en Oracle

El escaneo completo de la tabla no es un mal necesario. El optimizador de Oracle elige el plan en función del punto de datos. Si ha elegido el escaneo completo de datos, ciertamente lo ha encontrado bueno. Además, con bastante frecuencia, el escaneo de índice puede no ser bueno para la consulta y es más costoso que el escaneo de tabla completa. Por lo tanto, debemos analizar a fondo antes de tomar una decisión sobre el escaneo completo de la tabla

Las siguientes son algunas de las cosas que debe verificar
(a) Estadísticas obsoletas del optimizador:verifique si las estadísticas del optimizador disponibles en las tablas son actuales y no difieren mucho de los datos reales
(b) Verifique los índices y el índice factor de agrupación:es posible que le falten los índices correctos
(c) La consulta podría estar usando una cláusula paralela y, por lo tanto, elegir el escaneo completo de la tabla como plan óptimo
(d) Configuración de parámetros incorrecta para Optimizer_mode, optimizer_index_cost_adj, Optimizer_index_caching

A veces, ejecutar el asesor de ajuste de SQL en la consulta ayuda

Artículos relacionados
plan de explicación en oracle:todo sobre el plan de explicación en oracle, cómo leer el plan de explicación de oracle para problemas relacionados con el rendimiento, cómo encontrar el plan de explicación para la consulta en el cursor
qué es lectura lógica en oracle:qué es lectura lógica en Oracle y E/S física en Oracle, que es mejor E/S lógica y física en términos de rendimiento, consultas para encontrar lecturas físicas caché, cómo se crea y ejecuta la tarea de ajuste de sql para obtener la recomendación
buscar índices en una tabla en oracle:consulte este artículo para encontrar consultas sobre cómo encontrar índices en una tabla en oracle, enumere todos los índices en el esquema ,estado del índice, columna de índice
variables de vinculación en oracle:la variable de vinculación es el marcador de posición para los valores en sqlplus y PLSQL y se reemplaza con valores cuando se ejecuta la declaración
cómo verificar el perfil de sql en oracle:verificar vea esta publicación sobre cómo verificar el perfil de sql en Oracle, cómo encontrar el contenido de sql prof ile, cómo soltar el perfil sql