GENERAR COLLECT STATISTICS para los INDICES PRIMARIOS, SECUNDARIOS y PRIMARIOS PARTICIONADOS

Una vez terminado el diseño, y con las tablas creadas en la base de datos, siempre ocurre que hay que decidir qué estadísticas recopilar, y ejecutar los ‘COLLECT STATISTICS’. Aunque esta fase debe llevar también un análisis profundo, yo siempre comienzo por recopilar estadísticas para los índices primarios (particionados o no) y secundarios.

Para generar automáticamente estos ‘COLLECT STATISTICS’ sobre los índices (PRIMARIOS, SECUNDARIOS, PRIMARIOS PARTICIONADOS) utilizo la siguiente ‘query’ que he ido desarrollando:

--
--GENERAR COLLECT STATISTICS para los INDEXes (P, Q, S) de las tablas que tengan o no tengan NOMBRE:--
--
-- Author: Carlos Álvarez.
--

WITH RECURSIVE JERARQUICA (DATABASENAME,
TABLENAME,
INDEXNUMBER,
INDEXNAME,
COLUMNNAME,
COLUMNPOSITION)
AS
( SELECT a.DATABASENAME,
a.TABLENAME,
a.INDEXNUMBER,
COALESCE(a.INDEXNAME,'NONAME'||'_'||TRIM(a.INDEXNUMBER)) INDEXNAME,
CAST(TRIM(a.COLUMNNAME) AS VARCHAR(128)),
a.COLUMNPOSITION
FROM DBC.INDICES a
WHERE a.DATABASENAME = <DataBase> -- también se puede usar "LIKE"
AND TABLENAME = <Table>           -- también se puede usar "LIKE"
AND IndexType IN ( 'P', 'Q', 'S') --P (Nonpartitioned Primary), Q (Partitioned Primary), S (Secondary)
AND a.COLUMNPOSITION = 1
UNION ALL
SELECT a.DATABASENAME,
a.TABLENAME,
a.INDEXNUMBER,
COALESCE(a.INDEXNAME,'NONAME'||'_'||TRIM(a.INDEXNUMBER)) INDEXNAME,
b.COLUMNNAME || ',' || TRIM(a.COLUMNNAME) COLUMNNAME,
a.COLUMNPOSITION
FROM DBC.INDICES a,
JERARQUICA b
WHERE a.DATABASENAME   = b.DATABASENAME
AND a.TABLENAME      = b.TABLENAME
AND a.INDEXNUMBER    = b.INDEXNUMBER
AND a.COLUMNPOSITION = b.COLUMNPOSITION + 1
)
SELECT 'COLLECT STATISTICS ' ||
CASE WHEN INDEXNAME LIKE 'NONAME\_%' ESCAPE '\'
THEN 'COLUMN (' || TRIM(MAX(COLUMNNAME)) || ')'
ELSE 'INDEX ' || TRIM(IndexName)
END || ' ON ' ||
TRIM(DATABASENAME) ||
'.' || TRIM(TABLENAME) || ';' (TITLE '')
FROM JERARQUICA
GROUP BY DATABASENAME, TABLENAME, INDEXNAME
ORDER BY DATABASENAME, TABLENAME, 1
;

Saludos.

Carlos.

5 respuestas a GENERAR COLLECT STATISTICS para los INDICES PRIMARIOS, SECUNDARIOS y PRIMARIOS PARTICIONADOS

  1. sergio romero dice:

    Para usar esta query, sólo tengo que modificar y , por el nombre de mi base de datos y tabla.

    Es que estoy intentando usar tu query, muchas gracias por responder

  2. juan man dice:

    Hola. ¿Este es el tipo de query que necesito usar también para obtener estadísticas tales como el numero de conexiones de usuarios por dia, por hora o por mes?, o bien ¿Para obtener el uso de spool por día o por mes? Saludos.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: