Recopilación de información estadística en el procesamiento por lotes de habilidades de Oracle

Información de contexto

En muchos procesos comerciales del sistema, especialmente la aplicación ETL y el negocio de procesamiento por lotes del almacén de datos, se diseñan y utilizan una gran cantidad de tablas intermedias o tablas temporales. Las operaciones de DML como truncar, insertar datos masivos y eliminar a menudo se realizan en estas tablas, es decir, los registros de estas tablas a menudo cambian en los casos extremos de 0 o gran capacidad.

Estas tablas o no tienen información estadística, o la información estadística recopilada en una ventana de tiempo fija todos los días y noches, no refleja con precisión la situación real de los datos, lo que hace que el optimizador CBO no garantice necesariamente la optimización de las declaraciones SQL. accedido por estas tablas. Con este fin, se pueden adoptar las siguientes estrategias.

solución

(1) Bloquear estadísticas

La tecnología de información estadística de bloqueo mencionada anteriormente se puede adoptar para recopilar y bloquear la información estadística del estado de datos típico de estas tablas en el negocio de procesamiento por lotes. De esta manera, no importa cómo cambie la información de estas tablas, Oracle siempre genera el plan de ejecución de la declaración SQL en base a la información estadística del estado típico de los datos.

La ventaja de esta estrategia es que consume menos recursos y básicamente puede mantener la estabilidad del plan de ejecución de la instrucción SQL, pero la desventaja es que no puede elegir el plan de ejecución óptimo basado en datos cambiantes.

(2) Recopilar estadísticas en tiempo real

La diferencia con la estrategia anterior es que en el proceso por lotes, después de cambios extremos en los datos de la tabla, la información estadística se recopila en el acto. P.ej:

execute immediate 'truncate table  &TNAME'; 
commit; 
 
execute immediate ' exec DBMS_STATS. GATHER_TABLE_STATS 
    (ownname=>'&OWNER', tabname=>'&TNAME',estimate_percent=>10, 
     Degree=>8, Cascade=>TRUE, Granularity=>'ALL'); 

Las ventajas y desventajas de esta estrategia son todo lo contrario a la estrategia anterior, es decir, la ventaja es que se puede seleccionar el plan de ejecución óptimo según los datos que cambian cada vez, y la desventaja es que el consumo de recursos es relativamente grande. .

(3) Utilice la tecnología HINT (método antiguo, ¡no recomendado!)

Mediante el uso de tecnología HINT en sentencias SQL, para asegurar que el plan de ejecución esté en un estado estable y optimizado.

La ventaja de esta estrategia es hacer un uso completo de la propia experiencia y el nivel del desarrollador, en lugar de depender de la recopilación de información estadística de Oracle; la desventaja es que será problemático si el desarrollador usa el HINT incorrecto, y esta estrategia es demasiado rígida y difícil de escribir en los planes de implementación del programa, y ​​los datos cambian constantemente.

Supongo que te gusta

Origin blog.csdn.net/weixin_38623994/article/details/109231187
Recomendado
Clasificación