Ejecución
de Estadísticas en la base de datos Oracle.
A continuación se indica el proceso de ejecución de las estadísticas en
las tablas de la base de datos Oracle.
Consultando
las tablas para un esquema y contando cuantas se tienen.
|
SELECT
* from all_tables where owner =
'CS'
SELECT
Count(*) from all_tables where owner
= 'CS'
|
Consultando
el último análisis realizado a una tabla y sus índices.
|
SELECT table_name, table_name
Object_name, num_rows, last_analyzed
from user_tables
where table_name = 'S_X'
union
select table_name,index_name Object_name,
num_rows, last_analyzed
from user_indexes
where table_name = 'S_X'
|
Consultando
el ultimo análisis a todas las tablas y los índices.
|
SELECT table_name, table_name
Object_name, num_rows, last_analyzed
from user_tables
union
select table_name,index_name Object_name,
num_rows, last_analyzed
from user_indexes
|
Consultando
el último análisis a las tablas de ciertos esquemas.
|
SELECT owner, table_name,
table_name Object_name, num_rows, last_analyzed
from all_tables
WHERE owner = 'CS' OR
owner
= 'ADM' OR
owner
= 'CS' OR
owner
= 'CKEP' OR
owner
= 'CB001' OR
owner
= 'CB008' OR
owner
= 'CBN001' OR
owner
= 'ORUS' OR
owner
= 'ORAUS' OR
owner
= 'USRN'
ORDER BY
LAST_ANALYZED
|
Una ejemplo
de consulta que genera el script de todas las tablas de un esquema, en que
nos arroja el comando con el esquema y tabla a ejecutar su análisis.
Lo relevante
en este caso es que al ejecutar la estadística por tabla, genera a la par el
análisis de los índices que cuenta la tabla.
|
select 'EXEC
DBMS_STATS.gather_table_stats('''||OWNER ||''', '''||TABLE_NAME||''',
estimate_percent => 30);' from all_tables where owner = 'CS'
|
A
continuación vemos la salida de los comandos ya armados con algunas tablas y
su esquema respectivo.
|
EXEC
DBMS_STATS.gather_table_stats('CS', 'SSO_LIBRE_B',
estimate_percent => 30);
EXEC
DBMS_STATS.gather_table_stats('CS', 'SDAS',
estimate_percent => 30);
EXEC
DBMS_STATS.gather_table_stats('CS', 'SSMOS',
estimate_percent => 30);
EXEC
DBMS_STATS.gather_table_stats('CS', 'SICTA', estimate_percent
=> 30);
EXEC
DBMS_STATS.gather_table_stats('ORAUS', 'SCH',
estimate_percent => 30);
|
Podemos
ejecutar el select para formar el script de las tablas que contienen un
número determinado de registros para poder evitar arrojar de golpe las
estadísticas.
|
select 'EXEC
DBMS_STATS.gather_table_stats('''||OWNER ||''', '''||TABLE_NAME||''',
estimate_percent => 30);' from all_tables where owner = 'CS'
AND
NUM_ROWS < 500000
|
Recordemos la
recomendación por parte de la consultoría, no ejecutar el analyze, y
realizarlo mediante estas funciones.
|
En la versión 11, se debe ejecutar con unos
nuevos procedimientos:
GATHER_SCHEMA_STATS
GATHER_TABLE_STATS
GATHER_INDEX_STATS
|
NOTA IMPORTANTE:
1.
NO EJECUTAR por
esquema, ni muchas tablas, puede afectar el rendimiento del servicio de bases
de datos, debe hacerse en horas que no afecte los procesos en línea que
continuamente se viven.
2.
Es mejor
realizarlo paulatino por tabla, sobre todo cuidar las tablas de muchos
registros.
|
No hay comentarios:
Publicar un comentario