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

Recopilación de estadísticas incrementales en 11g

La base de datos -11g ha introducido la nueva función de recopilación de estadísticas incrementales

-Las estadísticas incrementales funcionarán solo para tablas particionadas donde las estadísticas globales se actualizan de forma incremental al escanear solo las particiones que han cambiado desde la última ejecución. Al habilitar las estadísticas incrementales en una tabla, solo en aquellas particiones se recopilan estadísticas donde hay DML, las restantes no se escanean, lo que ahorraría mucho tiempo.

-Las tablas particionadas son grandes y si necesitamos recopilar estadísticas regularmente sobre esto, llevaría mucho tiempo  y  la recopilación de estadísticas incrementales reduce el tiempo requerido para recopilar estadísticas

Ejemplo de la función de recopilación de estadísticas incremental de Oracle 11g en Oracle E-Business Suite.

Tomemos el ejemplo de xla_ae_lines, que es una tabla de particiones y tiene muchos registros en una instancia de ERP muy utilizada

Caso de prueba sin establecer preferencia incremental

-Cree una tabla xla_ae_lines_bkp como tabla de partición para realizar este caso de prueba
– Inserte datos de la tabla xla_ae_lines

insertar en xla.xla_Ae_lines_bkp seleccionar * de xla.xla_ae_lines;

2119409 filas creadas.

-establecer el tiempo de sincronización en

exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
Procedimiento PL/SQL completado con éxito.
Transcurrido:00:00:49.06
  • Tomó 49,06 segundos recopilar estadísticas por primera vez después de la inserción de datos.
  • Consulte las estadísticas y el nivel global y de partición
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" from dba_Tables where table_name like 'XLA_AE_LINES_BKP';

TABLE_NAME           último_analizado

—————————— ————————

XLA_AE_LINES_BKP 09-SEP-16 10:04:34

seleccione nombre_partición,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tab_partitions donde table_name como 'XLA_AE_LINES_BKP';

NOMBRE_PARTICIÓN       último_análisis

—————————— ————————

AP 09-SEP-16 10:04:15

AR 09-SEP-16 10:04:16

CE 09-SEP-16 10:04:16

CST 09-SEP-16 10:04:23

DPP 09-SEP-16 10:04:23

DIVERSIÓN 09-SEP-16 10:04:23

FV 09-SEP-16 10:04:23

GMF 09-SEP-16 10:04:23

CIG 09-SEP-16 10:04:23

IGI 09-SEP-16 10:04:23

LNS 09-SEP-16 10:04:23

OFA 09-SEP-16 10:04:23

OKL 09-SEP-16 10:04:23

OZF 09-SEP-16 10:04:23

PA 09-SEP-16 10:04:24

  • Elimine los datos de una de las particiones para comprobar cómo se calculan las estadísticas
eliminar de xla.xla_ae_lines_bkp donde application_id=222;
  • Recopilación de estadísticas usando fnd_Stats
    exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
    Procedimiento PL/SQL completado con éxito.
    Transcurrido:00:00:25.06
  • Después de eliminar los datos, recopiló estadísticas sin establecer la preferencia. Tardó 25,06 segundos
  • Comprobación de estadísticas globales y estadísticas de partición
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" from dba_Tables where table_name like 'XLA_AE_LINES_BKP';

TABLE_NAME último_analizado

—————————— ————————

XLA_AE_LINES_BKP 09-SEP-16 10:20:26

seleccione nombre_partición,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tab_partitions donde table_name como 'XLA_AE_LINES_BKP';

PARTITION_NAME último_analizado

—————————— ————————

AP 09-SEP-16  10:20:14

AR 09-SEP-16  10:20:14

CE 09-SEP-16  10:20:14

CST 09-SEP-16  10:20:15

DPP 09-SEP-16  10:20:15

DIVERSIÓN 09-SEP-16  10:20:15

FV 09-SEP-16  10:20:15

GMF 09-SEP-16  10:20:15

CIG 09-SEP-16  10:20:15

IGI 09-SEP-16  10:20:15

LNS 09-SEP-16  10:20:16

OFA 09-SEP-16  10:20:16

OKL 09-SEP-16  10:20:16

OZF 09-SEP-16  10:20:16

Pensilvania 09-SEP-16  10:20:17

NOTA:las estadísticas se recopilan en todas las particiones aunque solo se eliminen los datos de la partición AR, last_analyzed se actualiza para todas las particiones

Caso de prueba con configuración de preferencia incremental

  • Elimine y vuelva a crear la tabla xla_ae_lines_bkp como una tabla de partición para realizar este caso de prueba

  • Insertar datos de la tabla xla_ae_lines

insertar en xla.xla_Ae_lines_bkp seleccionar * de xla.xla_ae_lines;

2119409 filas creadas.

-establecer el tiempo de sincronización en

exec dbms_stats.set_table_prefs('XLA','XLA_AE_LINES_BKP','INCREMENTAL','TRUE');
  • Compruebe si la preferencia está configurada
seleccione dbms_stats.get_prefs(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) de dual;

DBMS_STATS.GET_PREFS('INCREMENTAL','XLA','XLA_AE_LINES_BKP')

————————————————————

VERDADERO

  • Reúna estadísticas después de establecer la preferencia.
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');

Procedimiento PL/SQL completado con éxito.

Transcurrido:00:00:25.91

  • Después de establecer la preferencia, tomó 25,91 segundos recopilar estadísticas por primera vez después de la inserción de datos
  • comprobar la información de tiempo de las estadísticas
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" from dba_Tables where table_name like 'XLA_AE_LINES_BKP';

TABLE_NAME último_analizado

——————————   ————————

XLA_AE_LINES_BKP              09-SEP-16  10:35:32

seleccione nombre_partición,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tab_partitions donde table_name como 'XLA_AE_LINES_BKP';

18

PARTITION_NAME último_analizado

—————————— ————————

AP 09-SEP-16  10:35:30

AR 09-SEP-16  10:35:12

CE 09-SEP-16  10:35:10

CST 09-SEP-16  10:35:21

DPP 09-SEP-16  10:35:21

DIVERSIÓN 09-SEP-16  10:35:12

FV 09-SEP-16  10:35:10

GMF 09-SEP-16  10:35:10

CIG 09-SEP-16  10:35:10

IGI 09-SEP-16  10:35:12

LNS 09-SEP-16  10:35:10

OFA 09-SEP-16  10:35:10

OKL 09-SEP-16  10:35:12

OZF 09-SEP-16  10:35:30

Pensilvania 09-SEP-16  10:35:12

  • Eliminar los datos de una partición para ver cómo la recopilación de estadísticas incrementales ayudará la próxima vez que se recopilen estadísticas.
eliminar de xla_ae_lines_bkp donde application_id=222;

100233 filas eliminadas

  • Recopilar estadísticas después de eliminar datos de application_id 222 partición AR
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');

Procedimiento PL/SQL completado con éxito.

Transcurrido:00:00:4.11

  • Después de eliminar los datos de una partición, las estadísticas de recopilación incremental tardaron 4,11 segundos
  • Consultar estadísticas globales y de partición
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" from dba_Tables where table_name like 'XLA_AE_LINES_BKP';

TABLE_NAME último_analizado

—————————— ————————

XLA_AE_LINES_BKP 09-SEP-16  10:45:18

seleccione nombre_partición,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tab_partitions donde ta

ble_name como 'XLA_AE_LINES_BKP';

PARTITION_NAME último_analizado

—————————— ————————

AP 09-SEP-16  10:35 :30

AR 09-SEP-16  10:45:18

CE 09-SEP-16  10:35 :10

CST 09-SEP-16  10:35 :21

DPP 09-SEP-16  10:35 :21

DIVERSIÓN 09-SEP-16  10:35 :12

FV 09-SEP-16  10:35 :10

GMF 09-SEP-16  10:35 :10

CIG 09-SEP-16  10:35 :10

IGI 09-SEP-16  10:35 :12

LNS 09-SEP-16  10:35 :10

OFA 09-SEP-16  10:35 :10

OKL 09-SEP-16  10:35 :12

OZF 09-SEP-16  10:35 :30

Pensilvania 09-SEP-16  10:35 :12

Aspectos importantes a tener en cuenta: se recopilan estadísticas, la última fecha analizada se cambió solo para la partición AR y el tiempo también se redujo.

Vemos que la recopilación de estadísticas incrementales reduce el tiempo para recopilar estadísticas y puede ser bastante beneficioso para tablas de partición grandes.