Histogramas en la gestión de carga de trabajo

Un histograma es una colección de intervalos, que son contenedores para recopilar rangos de datos discretos. Los histogramas son útiles para gran diversidad de tareas de análisis de la carga de trabajo y de ajuste del rendimiento. Por ejemplo, puede utilizarlos para ver la distribución de valores, para identificar valores periféricos o para calcular promedios y desviaciones estándar.

Los histogramas de gestión de la carga de trabajo Db2® tienen un número fijo de 41 bins. El cuadragésimo intervalo contiene el valor definido más alto para el histograma, y el cuadragésimo primer intervalo se destina a los valores que superan el valor definido más alto. Cada intervalo representa un rango de valores específico, y los rangos de intervalos siguen una escala logarítmica donde cada intervalo representa un rango progresivamente mayor a medida que se va progresando desde el primero hasta el cuadragésimo intervalo. En la siguiente figura se muestra un histograma de vida útil de actividades expresado mediante un diagrama de barras.
Figura 1. Histograma de vida útil de actividades expresado mediante un diagrama de barras
Histograma de vida útil de actividades expresado mediante un diagrama de barras
El histograma de vida útil de actividad corresponde a los datos siguientes. Cada recuento representa el número de actividades cuya vida útil (en milisegundos) se encuentra dentro del rango que comprende desde el valor de intervalo bajo hasta el valor de intervalo alto. Por ejemplo, 156 actividades tenían una vida útil comprendida dentro del rango de 68 milisegundos a 103 milisegundos.
 Low Bin  High Bin Count
       0         1     0
       1         2     0
       2         3     0
       3         5     0
       5         8     0
       8        12     0
      12        19     0
      19        29    10
      29        44    15
      44        68    45
      68       103   156
     103       158    65
     158       241    23
     241       369     0
     369       562     0
     562       858     0
     858      1309     0
    1309      1997     0
    1997      3046     0
    3046      4647     0
    4647      7089     0
    7089     10813     0
   10813     16493     0
   16493     25157     0
   25157     38373     0
   38373     58532     0
   58532     89280     0
   89280    136181     0
  136181    207720     0
  207720    316840     0
  316840    483283     3
  483283    737162     0
  737162   1124409     0
 1124409   1715085     0
 1715085   2616055     0
 2616055   3990325     0
 3990325   6086529     0
 6086529   9283913     0
 9283913  14160950     0
14160950  21600000     0
21600000  Infinity     0

Para ver ejemplos de cómo utilizar histogramas para comprender y caracterizar mejor la carga de trabajo, consulte Ejemplo: Ajuste de una configuración de gestión de la carga de trabajo de Db2 cuando no se dispone de información de planificación de la capacidad y Ejemplo: Cálculo de medias y una desviación estándar a partir de histogramas en una configuración de gestión de cargas de trabajo de Db2.

En un entorno de base de datos de varios miembros, los histogramas se recopilan en cada miembro de base de datos. Los intervalos de histograma tiene el mismo rango de valores en todos los miembros de base de datos, con recuentos específicos por intervalo y por miembro. Puede utilizar los intervalos para analizar información relacionada con cada miembro individual. También puede combinar los histogramas de todos los miembros de base de datos sumando los recuentos de los intervalos correspondientes y utilizar este único histograma para obtener una vista global de los datos, que posteriormente podrá utilizar para tareas tales como el cálculo del promedio global y el desvío estándar.

Los histogramas están disponibles para clases de servicio, cargas de trabajo y clases de trabajo, a través de acciones de trabajo. Los histogramas se recopilan para estos objetos cuando especifica una de las cláusulas COLLECT AGGREGATE ACTIVITY DATA, COLLECT AGGREGATE REQUEST DATA o COLLECT AGGREGATE UNIT OF WORK DATA al crear o alterar los objetos. Para las clases de trabajo, también se recopilan histogramas si aplica una acción de trabajo COLLECT AGGREGATE ACTIVITY DATA a la clase de trabajo. Los histogramas disponibles son los siguientes:
  • Vida útil de actividad de coordinador no anidada, cuando especifica AGGREGATE ACTIVITY DATA BASE o AGGREGATE ACTIVITY DATA EXTENDED para una clase de servicio, para una carga de trabajo o para una acción de trabajo aplicada a una clase de trabajo.
  • Tiempo de ejecución de actividad de coordinador no anidada, cuando especifica AGGREGATE ACTIVITY DATA BASE o AGGREGATE ACTIVITY DATA EXTENDED para una clase de servicio, para una carga de trabajo o para una acción de trabajo aplicada a una clase de trabajo.
  • Tiempo en cola de actividad de coordinador no anidada, cuando especifica AGGREGATE ACTIVITY DATA BASE o AGGREGATE ACTIVITY DATA EXTENDED para una clase de servicio, para una carga de trabajo o para una acción de trabajo aplicada a una clase de trabajo.
  • Tiempo de ejecución de petición, cuando especifica AGGREGATE REQUEST DATA BASE para una subclase de servicio; este histograma no se aplica a las cargas de trabajo o las clases de trabajo.
  • Histograma de tiempo entre llegadas de actividades no anidadas, cuando especifica AGGREGATE ACTIVITY DATA EXTENDED para una clase de servicio, para una carga de trabajo o para una acción de trabajo aplicada a una clase de trabajo.
  • Coste estimado de actividad de DML no anidada, cuando especifica AGGREGATE ACTIVITY DATA EXTENDED para una clase de servicio, para una carga de trabajo o para una acción de trabajo aplicada a una clase de trabajo.
  • Vida útil de unidad de trabajo, cuando especifica AGGREGATE UNIT OF WORK DATA BASE para una clase de servicio

Todos los histogramas relacionados con actividades contienen información acerca de las actividades que se han completado, cancelado o rechazado.

Plantillas de histograma

Opcionalmente, puede especificar una plantilla de histograma que se utilice para determinar qué aspecto ha de tener un histograma en particular, incluido el valor de intervalo alto. Una plantilla de histograma es un objeto sin unidad, es decir, que no tiene asignada ninguna unidad de medición predefinida. Una unidad de medición, que depende del contexto en el que se utiliza la plantilla de histograma, se asigna al histograma cuando se crea o altera una clase de servicio, una carga de trabajo o una acción de trabajo. Los histogramas basados en el tiempo, como los que se especifican como ejemplo con la cláusula ACTIVITY LIFETIME HISTOGRAM, utilizan unidades de milisegundo, mientras que los histogramas basados en el coste, como los especificados como ejemplo con la cláusula ACTIVITY ESTIMATED COST HISTOGRAM, utilizan unidades de timeron.

Puede crear una plantilla de histograma mediante la sentencia CREATE HISTOGRAM TEMPLATE, especificando el valor de intervalo alto máximo. Todos los demás valores de intervalo se definirán automáticamente como valores que incrementarán potencialmente a medida que se aproximen al valor de intervalo alto. Por ejemplo, para crear un histograma con el valor de intervalo alto 3.000.000, emita una sentencia como la que se indica a continuación:
CREATE HISTOGRAM TEMPLATE TEMPLATE1 HIGH BIN VALUE 3000000
Esta sentencia crea una plantilla de histograma con los siguientes valores de intervalo:
Low Bin	High Bin
      0        1
      1        2
      2        3
      3        4
      4        6
      6        9
      9       13
     13       19
     19       28
     28       41
     41       60
     60       87
     87      127
    127      184
    184      268
    268      389
    389      565
    565      821
    821     1192
   1192     1732
   1732     2514
   2514     3651
   3651     5300
   5300     7696
   7696    11173
  11173    16222
  16222    23553
  23553    34196
  34196    49649
  49649    72084
  72084   104657
 104657   151948
 151948   220609
 220609   320297
 320297   465030
 465030   675163
 675163   980250
 980250  1423197
1423197  2066299
2066299  3000000
3000000 Infinity

Puede aplicar una plantilla utilizando la palabra clave HISTOGRAM TEMPLATE adecuada al crear o alterar subclases de servicio, cargas de trabajo o acciones de trabajo. Si no especifica una plantilla de histograma, se utilizará la plantilla por omisión, SYSDEFAULTHISTOGRAM. Si no habilita la recopilación AGGREGATE ACTIVITY DATA para un objeto, la plantilla de histograma se pasará por alto.

Por ejemplo, para utilizar la plantilla de histograma TEMPLATE1 para el histograma de vida útil de actividad existente de la subclase de servicio MYSUBCLASS de la superclase de servicio MYSUPERCLASS, emita la sentencia siguiente:
ALTER SERVICE CLASS MYSUBCLASS UNDER MYSUPERCLASS
ACTIVITY LIFETIME HISTOGRAM TEMPLATE TEMPLATE1

Después de haber confirmado la sentencia ALTER SERVICE CLASS, el histograma de vida útil de actividad que se ha recopilado para la subclase de servicio MYSUBCLASS tiene valores de intervalo alto que se han determinado mediante la plantilla de histograma TEMPLATE1 en lugar de mediante la plantilla de histograma SYSDEFAULTHISTOGRAM.

Si cambia una clase de servicio o una carga de trabajo para utilizar una plantilla de histograma distinta o cambia una plantilla de histograma, el cambio no entrará en vigor hasta que se produzca un restablecimiento de estadísticas.

Puede descartar una plantilla de histograma mediante la utilización de la sentencia DROP HISTOGRAM TEMPLATE.

Puede ver las plantillas de histograma consultando la vista SYSCAT.HISTOGRAMTEMPLATES y ver los valores de intervalo alto de la plantilla de histograma correspondiente consultando la vista SYSCAT.HISTOGRAMTEMPLATEBINS. El valor de intervalo bajo siempre es 0 para el primer intervalo; para los demás intervalos, el valor de intervalo bajo es el valor de intervalo alto del intervalo anterior.

ejemplos

El ejemplo siguiente crea una función de tabla para calcular el histograma CoordActLifetime, CoordActExecTime, CoordActQueueTime o CoordActEstCost para una superclase de servicio de forma conjunta sumando las subclases. La suma de subclases es útil cuando las actividades vuelven a correlacionarse con subclases de servicio distintas bajo la misma superclase de servicio durante la ejecución, y puede producirse en un escenario de disminución de la prioridad en el que se utilizan niveles de clase de servicio y umbrales especializados para controlar dinámicamente los recursos para las actividades. Este ejemplo no se aplica al histograma CoordActInterArrivalTime porque los promedios ponderados calculados no contabilizan por el hecho de que el histograma CoordActInterArrivalTime de una subclase mide el tiempo transcurrido entre la llegada de una consulta en esa subclase y la siguiente consulta, pero el histograma CoordActInterArrivalTime de una superclase mide el tiempo transcurrido entre la llegada de una consulta en cualquiera de sus subclases y la siguiente consulta.

CONNECT TO SAMPLE

DROP FUNCTION histsuper

CREATE FUNCTION histsuper(superclass varchar(128),
                          histogram_type varchar(24))
RETURNS TABLE (statistics_timestamp timestamp,
               bin_top integer,
               number_in_bin integer,
               graph varchar(60))
LANGUAGE SQL
READS SQL DATA
NO EXTERNAL ACTION
DETERMINISTIC
RETURN WITH HISTOGRAMS AS
       (SELECT HISTOGRAM_TYPE,
              substr(PARENTSERVICECLASSNAME,1,26) as SUPERCLASS,
              STATISTICS_TIMESTAMP,
              TOP as BIN_TOP,
              sum(NUMBER_IN_BIN) as NUMBER_IN_BIN
       FROM HISTOGRAMBIN_DB2STATISTICS H,
            SYSCAT.SERVICECLASSES S
       WHERE H.SERVICE_CLASS_ID = S.SERVICECLASSID
         AND PARENTSERVICECLASSNAME = histsuper.superclass
         AND HISTOGRAM_TYPE = histsuper.histogram_type
         AND HISTOGRAM_TYPE IN ('CoordActLifetime', 'CoordActExecTime',
	    'CoordActQueueTime', 'CoordActEstCost')
       GROUP BY HISTOGRAM_TYPE, PARENTSERVICECLASSNAME, STATISTICS_TIMESTAMP, TOP)
       SELECT STATISTICS_TIMESTAMP,
              BIN_TOP,
              NUMBER_IN_BIN,
              substr(repeat('#', cast(NUMBER_IN_BIN * 60 /
                (SELECT CASE WHEN MAX(NUMBER_IN_BIN) = 0 THEN 1
		   ELSE MAX(NUMBER_IN_BIN) END FROM HISTOGRAMS) AS INTEGER)),1,60)
		   AS GRAPH FROM HISTOGRAMS

CONNECT RESET

La salida tiene el aspecto siguiente:

STATISTICS_TIMESTAMP       BIN_TOP     NUMBER_IN_BIN GRAPH
-------------------------- ----------- ------------- ------------------------------------------------------------
2008-11-06-14.47.08.833188 -1          0
2008-11-06-14.47.08.833188 1           1
2008-11-06-14.47.08.833188 2           1
2008-11-06-14.47.08.833188 3           2
2008-11-06-14.47.08.833188 5           4
2008-11-06-14.47.08.833188 8           7
2008-11-06-14.47.08.833188 12          15
2008-11-06-14.47.08.833188 19          29            #
2008-11-06-14.47.08.833188 29          41            #
2008-11-06-14.47.08.833188 44          67            ##
2008-11-06-14.47.08.833188 68          112           ###
2008-11-06-14.47.08.833188 103         228           #####
2008-11-06-14.47.08.833188 158         335           ########
2008-11-06-14.47.08.833188 241         723           #################
2008-11-06-14.47.08.833188 369         1289          ###############################
2008-11-06-14.47.08.833188 562         1890          #############################################
2008-11-06-14.47.08.833188 858         2484          ############################################################
2008-11-06-14.47.08.833188 1309        1943          ###############################################
2008-11-06-14.47.08.833188 1997        478           ###########
2008-11-06-14.47.08.833188 3046        221           #####
2008-11-06-14.47.08.833188 4647        29            #
2008-11-06-14.47.08.833188 7089        7
2008-11-06-14.47.08.833188 10813       0
2008-11-06-14.47.08.833188 16493       2
2008-11-06-14.47.08.833188 25157       0
2008-11-06-14.47.08.833188 38373       1
2008-11-06-14.47.08.833188 58532       0
2008-11-06-14.47.08.833188 89280       0
2008-11-06-14.47.08.833188 136181      0
2008-11-06-14.47.08.833188 207720      0
2008-11-06-14.47.08.833188 316840      0
2008-11-06-14.47.08.833188 483283      0
2008-11-06-14.47.08.833188 737162      0
2008-11-06-14.47.08.833188 1124409     0
2008-11-06-14.47.08.833188 1715085     0
2008-11-06-14.47.08.833188 2616055     0
2008-11-06-14.47.08.833188 3990325     0
2008-11-06-14.47.08.833188 6086529     0
2008-11-06-14.47.08.833188 9283913     0
2008-11-06-14.47.08.833188 14160950    0
2008-11-06-14.47.08.833188 21600000    0

41 record(s) selected.