OracleMania en Español Volumen 1 | Page 31

rincon del dba

dba

31

Luego del intercambio de partición, los índices

globales siguen estando en estado “VALID”:

SQL> select table_name, index_name, STATUS from dba_indexes where table_name='A';

TABLE_NAME INDEX_NAME STATUS

---------- -------------------- --------

A A1 N/A

A A2 N/A

A A3 VALID

Las estadísticas en los índices

Otro aspecto que debe tomarse en cuenta son las estadísticas, recuerden que tener a la fecha las estadísticas influye mucho en los planes de ejecución y por lo tanto en el rendimiento de nuestras consultas. Sabemos que las particiones de los índices LOCALES son intercambiadas por los segmentos de los índices en la tabla no particionada, es decir los datos se intercambian a nivel del diccionario de datos, pero… ¿las estadísticas también son intercambiadas? Esta pregunta es la que trataremos de contestar a continuación.

Repetir el paso No. 0 y continuar con lo siguiente

CREATE INDEX a1 ON a(a,b) LOCAL;

CREATE INDEX a2 ON a(a,c) LOCAL;

CREATE INDEX a3 ON a(c);

CREATE INDEX b1 ON b(a,b);

CREATE INDEX b2 ON b(a,c);

Las estadísticas de los índices de la tabla “B” fueron borradas a propósito para poder explicar de mejor

manera qué está pasando con las estadísticas:

SQL> select table_name, index_name, last_analyzed from dba_indexes where table_name in ('A','B');

TABLE_NAME INDEX_NAME LAST_ANAL

---------- ------------------------------ ---------

B B1

B B2

A A1 07-JUN-14

A A2 07-JUN-14

A A3 07-JUN-14

Veamos a nivel de cada partición hasta que fecha existen estadísticas:

SQL> select index_name, partition_name, last_analyzed from dba_ind_partitions where index_name like 'A%' order by 1;

INDEX_NAME PARTITION_NAME LAST_ANAL

---------- ------------------------------ ---------

A1 SYS_P145 07-JUN-14

A1 SYS_P142 07-JUN-14

A1 SYS_P144 07-JUN-14

A1 POS_DATA_P2 07-JUN-14

A1 SYS_P143 07-JUN-14

A1 SYS_P141 07-JUN-14

A2 SYS_P144 07-JUN-14

A2 SYS_P143 07-JUN-14

A2 SYS_P145 07-JUN-14

A2 SYS_P141 07-JUN-14

A2 POS_DATA_P2 07-JUN-14

A2 SYS_P142 07-JUN-14

12 rows selected.

Intercambio de la partición

SQL> ALTER TABLE A EXCHANGE PARTITION POS_DATA_P2 WITH TABLE B INCLUDING INDEXES WITHOUT VALIDATION UPDATE GLOBAL INDEXES;

Table altered.

Después de ejecutar el intercambio de la partición ahora los índices de la tabla “B” poseen estadísticas hasta la misma fecha que la tabla “A”, esto nos dice que las estadísticas también fueron transportadas:

SQL> select table_name, index_name, last_analyzed from dba_indexes where table_name in ('A','B');

TABLE_NAME INDEX_NAME LAST_ANAL

---------- ---------- ---------

B B1 07-JUN-14

B B2 07-JUN-14

A A1 07-JUN-14

A A2 07-JUN-14

A A3 07-JUN-14

Vemos a nivel de partición qué fue lo que pasó: