analyze compute statitics

bmgdba
11 de Agosto del 2005
hola a todos, me gustaria que alguien me explicara para que sirve el analyze de una tabla y lo del compute statistics


gracias

Jorge-DBA
11 de Agosto del 2005
Que tal bmgdba:

Esto interviene directamente con el Optimizador de Oracle si esta configurado como "CHOOSE", o bien la sesion.

Los Histogramas es información que se almacena en el diccionario de Datos de Oracle, y debe estar lo mas actualizado posible, dependiendo de los histogramas es como el optimizador puede tomar decisiones de "coste", es decir que tan costoso es entregar los datos al usuario, de lo contrario tomará por defecto la configuración como "RULE" Regla, que es una serie de pasos que sigue Oracle para la entrega de datos.
Si una tabla se altera recopilando las estadísticas, lo que hace Oracle es recopilar toda esta información y sabrá (Por ponerte algunos ejemplos)

Cuantos datos existen en la tabla,
Cuantos de esos datos son distintos,
Cuando fué la ultima vez que se analizó
Registros encadenados
Etc.

Imagina una tabla no agrupada donde tiene un par de campos, con tipos de datos varchar2(100), esta tabla a su vez tiene almacenados 200 registros.
Si realizas un Analyze, Tendrá la información necesaria (Histogramas) para determinar la tendencia de los datos y su alamcenaje, entre ellos la longitud media de todos los registros, si el limite para la tabla ejemplo son 100 posiciones por el Varchar2(100), ese será su límite, pero no quiere decir que simpre se almacenarán 100 posiciones en ambos campos, tal vez el promedio solo sean el 50% es decir 100 datos promedios solo alojan la mitad de la ambas columnas, esto a su vez Oracle lo sabe sin tener que ir a consultar la tabla directamente, sino el análsis.

Esto depende considerablemente de como es la arquitectura de tu aplicación, asi es que esto tiene que ver significativamente con le performance de la base de datos.
Si Analizas una tabla no agrupada y la tabla tambien tiene índices, puedes ejecutar una sentencia para cada índice.
Actualmente generar las estadísiticas es mucho mas facil que antes, ahora existen DBMS's de Oracle que hacen este trabajo.

Puedes Exportar (Con la utilería Export) los histogramas de una base de datos o un esquema e importarlo en otra base de datos.
Las formas como puedes analizar una tabla es Compute y Estimate.
la diferencia es muy simple,
Compute, generará todos los detalles de los registros, analizando completamente la tabla, pero ahora imagina que tienes una tabla con grandes volúmenes de registros,, para este caso si se analiza la tabla con compute Oracle mantendrá los histogramas lo mayor preciso posible esto tiene una consecuencia con el performance ya que tal vez no sea necesario tener toda la recopilación completa, ya que tiene que ver el anílsis recuelto por el Analyze, en cambio ocupas:
Estimate, que solo mantendrá una muestra del universo de los datos.
Estas son las vistas que te entregan la información para saber si una tabla tiene histogramas.

DBA_HISTOGRAMS
DBA_PART_HISTOGRAMS
DBA_SUBPART_HISTOGRAMS
DBA_TAB_HISTOGRAMS

Puedes hacer una prueba:

Si tienes una tabla en una base de datos donde no afectes una aplicacion "CON REGISTROS" realiza lo siguiente:

SQL> create table tab_histogram (uno varchar2(3))
Tabla creada.
SQL> insert into tab_histogram values ('z');
1 fila creada.

SQL> insert into tab_histogram values ('za');
1 fila creada.
SQL> insert into tab_histogram values ('zzz');
1 fila creada.
SQL> commit;
Validación terminada.
SQL> select *
2 from DBA_HISTOGRAMS
3 where table_name = 'TAB_HISTOGRAM';
ninguna fila seleccionada
SQL> analyze table tab_histogram compute statistics;
Tabla analizada.
SQL> select *
2 from DBA_HISTOGRAMS
3 where table_name = 'TAB_HISTOGRAM';
OWNER TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
ENDPOINT_NUMBER ENDPOINT_VALUE
--------------- --------------
ENDPOINT_ACTUAL_VALUE
--------------------------------------------------------------------------------
TEST TAB_HISTOGRAM
UNO
0 6,3346E+35

OWNER TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
ENDPOINT_NUMBER ENDPOINT_VALUE
--------------- --------------
ENDPOINT_ACTUAL_VALUE
--------------------------------------------------------------------------------
TEST TAB_HISTOGRAM
UNO
1 6,3594E+35

SQL>

Si deseas que analizar tablas e indices en una misma setencia puedes ocupar esta sentencia:

analyze table student_ada compute statistics for table for all indexes;

Esta, Valida la estructura del índice:

analyze index id_inx_prod validate structure
/

En realidad es un poco grande el tema, pero esto es algo de lo mas importante.


Saludos camarada.

Jorge - DBA

bmgdba
11 de Agosto del 2005
Gracias por tu ayuda

yo
11 de Agosto del 2005
¿ solo gracias ?
Despues de toda esa parrafada que ha puesto, como minimo se la deberías mamár. O mandarle una foto de tu madre con las piernas abiertas y la chirla depilada.

DIGO YO ........ ¡ ¡ ¡ ¡ ¡ ¡