Técnicas de optimización del rendimiento de Oracle: obtenga el plan de ejecución real

Inserte la descripción de la imagen aquí

1. Antecedentes

Cuando sql optimiza, a menudo usamos planes de ejecución, como Navicat o plsql explica planes. De hecho, el resultado es solo un valor estimado, por lo que hará que el entorno de prueba se ejecute rápidamente y el entorno de producción sea lento.

Como se muestra abajo:

Inserte la descripción de la imagen aquí

El plan de ejecución obtenido usando AUTOTRACE o EXPLAIN PLAN FOR proviene de PLAN_TABLE. PLAN_TABLE es una tabla temporal a nivel de sesión, el plan de ejecución en el interior no es el plan de ejecución real de SQL, solo es estimado por el optimizador.

El plan de ejecución real no debe estimarse, debe ejecutarse realmente. El plan de ejecución ejecutado SQL existe en el pool compartido, específicamente en el diccionario de datos VS QLPLAN, el plan de ejecución con A - T ime viene de V SQL_PLAN, el plan de ejecución con A-Time viene de VSQLPLAN, con El plan de ejecución con A- El tiempo proviene de VSQL_PLAN, que es el plan de ejecución real, y el plan de ejecución obtenido a través de AUTOTRACE y EXPLAIN PLAN FOR es solo el plan de ejecución estimado por el optimizador. (Nota 1)

2. Entonces, ¿cómo obtener el plan de ejecución real?

Primero, debe tener acceso a la vista de rendimiento dinámico, puede usar la siguiente declaración para autorizar

grant select any dictionary to QAS_R_BIZ;

Después de tener la autoridad, divida en los siguientes pasos para continuar (no es necesario el superadministrador)

2.1 Ejecute la siguiente declaración

alter session set statistics_level = all;

(Este paso es válido para la ventana de sesión actual, se puede omitir, se explica a continuación)

2.2 Ejecute el sql a optimizar;

select  /* gather_plan_statistics */ R.RU_ID   AS ruId,
 R.MU_ID   AS muId,
 R.RU_NAME AS ruShortName,
 D.YW_DM   AS YWDM,
 D.yws     AS YWDMCOUNT
 from T_REGIONAL_UNIT r
 LEFT JOIN T_MANAGE_UNIT m
 on r.MU_ID = m.MU_ID
 left join (select YW_DM, sum(YW_DM_COUNT) as yws, SWJGDM
 from T_DAILY_SELF_SERVICE_HALL_YWS
 where SNAPSHOT_DATE between
 TO_DATE('2020-01-14 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
 TO_DATE('2020-12-14 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
 group by YW_DM, SWJGDM) D
 on m.MU_CODE = D.SWJGDM
 where 1 = 1
 and r.parent_ID = 10000
 order by r.display_index, D.YW_DM

Si no realiza el paso anterior, debe agregar / + collect_plan_statistics / en la declaración.

2.3 Averigüe el ID de SQL de la sentencia ejecutada, por ejemplo:

select * from v$sql where sql_text like '%gather_plan_statistics%'

El resultado es el siguiente

Inserte la descripción de la imagen aquí

2.4 Descubra el plan de ejecución basado en SQL ID

select * from table (dbms_xplan.display_cursor ('3ayyrp8bkzmb6', null, 'allstats last')); El
efecto es el siguiente,

Inserte la descripción de la imagen aquí

Cópielo y péguelo en el bloc de notas ++, para mostrar todos los resultados de la consulta, recuerde hacer clic en el botón Obtener última página, haga clic en la esquina superior izquierda para seleccionar todo.

Inserte la descripción de la imagen aquí

Pegar en el bloc de notas o el bloc de notas ++, el efecto es el siguiente

Inserte la descripción de la imagen aquí

Puede ver que hay más campos como A-Rows y A-Time.

Starts representa el número de ejecuciones de esta operación.
E-Rows representa el número de filas estimadas por el optimizador. Es decir, filas en el plan de ejecución ordinario.
A-Rows representa el número real de filas.
A-Time representa el total acumulado hora. A diferencia del plan de ejecución ordinario, el Time en el plan de ejecución ordinario es falso, mientras que el A-Time es real.
Buffers significa lecturas lógicas acumuladas.
Lecturas significa lecturas físicas acumuladas. El
plan de ejecución real proporciona información real sobre la ejecución de SQL, incluyendo A-Time (tiempo real), A-Rows (número de fila real), Starts (tiempos de ejecución de pasos), etc. Para los desarrolladores que no son de bases de datos, es muy intuitivo y conveniente.

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/liuxingjiaoyu/article/details/112261037
Recomendado
Clasificación