Estadísticas de Sistema
La captura de las estadísticas de sistema consiste en que Oracle toma los tiempos de hacer lecturas de 1 bloque, lecturas multibloque y velocidad de CPU.
Con esto el optimizador genera planes considerando el uso de CPU y diferenciado lecturas random, que son de 1 bloque, de lecturas secuenciales, que son de un número mayor de bloques controlado por el parámetro multiblock_read_count.
Si uno no ha corrido las estadísticas de sistema, el CBO funciona igual que en Oracle8i, es decir no concidera costo de CPU y considera igual el costo de lectura random de 1 bloque que la lectura secuencial multibloque. Uno de los efectos negativos del no contar con estadísticas de sistema es que el optimizador considera el mismo costo una operación single block que una multiblock y con ello parace que los planes "TABLE FULL SCAN" parecen mas baratos. La realidad podría ser que una operación single block demore 5ms y una multiblock de 16 bloques demore 17ms. El optimizador, con estadísticas de sistema logra mejores planes que sin ellas.
La captura de estadísticas de sistema se hace con:
Luego se debe esperar un tiempo representativo y donde se hagan lecturas secuenciales multibloque tanto como lecturas random de 1 bloque.
Todas las queries parseadas de ahí en adelante considerarán en sus planes las estadísticas de sistema.
Si se cambia el valor del parámetro multiblock_read_count debe obtenerse nuevas estadísticas de sistema con éste parámetro cambiado. También pueden respaldarse y recuperar estadísticas que reflejen distintas situaciones.
La obtención de estadísticas de sistema no reviste un gran overhead para la máquina y perfectamente podría hacerse todos los días a una cierta hora estando la instancia en pleno servicio.
Los valores capturados de estadísticas de sistema se pueden obtener consultando la tabla <code>sys.aux_stats$</code>.
Con esto el optimizador genera planes considerando el uso de CPU y diferenciado lecturas random, que son de 1 bloque, de lecturas secuenciales, que son de un número mayor de bloques controlado por el parámetro multiblock_read_count.
Si uno no ha corrido las estadísticas de sistema, el CBO funciona igual que en Oracle8i, es decir no concidera costo de CPU y considera igual el costo de lectura random de 1 bloque que la lectura secuencial multibloque. Uno de los efectos negativos del no contar con estadísticas de sistema es que el optimizador considera el mismo costo una operación single block que una multiblock y con ello parace que los planes "TABLE FULL SCAN" parecen mas baratos. La realidad podría ser que una operación single block demore 5ms y una multiblock de 16 bloques demore 17ms. El optimizador, con estadísticas de sistema logra mejores planes que sin ellas.
La captura de estadísticas de sistema se hace con:
BEGIN DBMS_STATS.GATHER_SYSTEM_STATS('START'); END;
Luego se debe esperar un tiempo representativo y donde se hagan lecturas secuenciales multibloque tanto como lecturas random de 1 bloque.
BEGIN DBMS_STATS.GATHER_SYSTEM_STATS('STOP'); END;
Todas las queries parseadas de ahí en adelante considerarán en sus planes las estadísticas de sistema.
Si se cambia el valor del parámetro multiblock_read_count debe obtenerse nuevas estadísticas de sistema con éste parámetro cambiado. También pueden respaldarse y recuperar estadísticas que reflejen distintas situaciones.
La obtención de estadísticas de sistema no reviste un gran overhead para la máquina y perfectamente podría hacerse todos los días a una cierta hora estando la instancia en pleno servicio.
Los valores capturados de estadísticas de sistema se pueden obtener consultando la tabla <code>sys.aux_stats$</code>.
Es importante validar que las estadísticas de sistema capturadas reflejen valores razonables y que no sean producto de una situación muy particular ocurrida en un momento de excepción de mucha o poca carga.
Comentarios
Publicar un comentario