En la versión 8 de DB2 UDB apareció una nueva característica, los bufferpools basados en bloques. Se supone que estos bufferpools reservan un espacio para que las lecturas asíncronas se hagan en bloque, según el parámetro BLOCKSIZE del bufferpool. Se tratarán de leer tantas páginas simultáneas como indique este valor. Al realizar una lectura asíncrona se leerá un extent del tablespace, y si este cabe en un bloque, lo guardará.
¿Y qué ventaja nos aporta esto? Pues realmente, la principal ventaja no es que se lea en bloque, porque eso ya lo hacen los bufferpools normales con Vectored IO, sino que se delimita un espacio en el bufferpool para lecturas asíncronas, de forma que no se van a desplazar páginas usadas frecuentemente cuando se haga una lectura muy grande. De esta forma no es necesario separar bufferpool para lectura síncrona y asíncrona, y si alguna tabla tiene accesos de ambos tipos, se tratarán ambos de forma independiente.
En resumen:
-No se desplazan páginas muy usadas del bufferpool
-No es necesario separar bufferpools para tablas de acceso síncrono y asíncrono
-Una tabla puede tener accesos síncronos y asíncronos sin ser perjudicada
Configuración de un block based bufferpool:
Al crear un bufferpool basado en bloques se definen dos parámetros, el BLOCKSIZE y el NUMBLOCKPAGES. El primero indica el número de página que contendrá cada bloque, y serán el número de páginas que se leerán simultáneamente. Es importante que este sea igual o mayor que el tamaño de extent de los tablespaces que usen este bufferpool, de lo contrario no se usará el área de bloques. El segundo es el número de páginas del área de bloques. Este debería ser un múltiplo del tamaño de bloque. Se recomienda que el tamaña del area sea entre un 2% y un 3% del tamaño total del bufferpool.
El comando para crear el bufferpool sería:
CREATE BUFFERPOOL <nombre_bp> SIZE <numpaginas> NUMBLOCKPAGES <paginas_area_bloques> BLOCKSIZE <tamaño_bloque> PAGESIZE <tamaño_pagina>
Si se quiere modificar uno ya existente:
ALTER BUFFERPOOL <nombre_bp> NUMBLOCKPAGES <paginas_area_bloques> BLOCKSIZE <tamaño_bloque>
Hay que tener en cuenta que los cambios en el área de bloques requieren reinicio de la base de datos (desactivarla y desconectar todos los usuarios).
Monitorización:
Para comprobar el uso que se está haciendo del área de bloques, se usa el snapshot de bufferpool:
get snapshot for bufferpools on <database>
Los valores importantes serán:
Asynchronous pool data page reads
Asynchronous pool index page reads
Asynchronous data read requests
Asynchronous index read requests
Block IOs
Pages from block IOs
A partir de estos valores podemos calcular las siguientes métricas:
Páginas leídas por bloque:
Pages from block IOs / Block IOs
Debe acercarse lo más posible al tamaño de bloque.
% de lecturas asíncronas leídas por bloques:
Block IOs / (Asynchronous data read requests + Asynchronous index read requests)
Debe tener un valor igual o muy cercano a 100. De lo contrario significaría que hay lecturas asíncronas que no se están resolviendo por bloques.
% de páginas asíncronas leídas por bloques:
Pages from block IOs / (Asynchronous pool data page reads + Asynchronous pool index page reads)
El igual que en la métrica anterior, el valor debe ser lo más cercano a 100 posible.
Por fin vuelvo a publicar algo después de tanto tiempo!!!!
ResponderSuprimirTengo un montón de cosas escritas, las iré sacando poco a poco...