Foro de Cobol
Registrate en el Foro de Cobol y Aporta tus experiencias y conocimientos sobre este lenguaje de programacion, con tu ayuda el foro crecera y todos nos podremos beneficiar de los conocimientos de los demas.

Gracias por entrar a COBOLEROS.ES
Síguenos en Twitter

Estrategia de bloqueo DB2

Ver el tema anterior Ver el tema siguiente Ir abajo

Estrategia de bloqueo DB2

Mensaje por Coboler@ el Jue Feb 24, 2011 10:38 pm

GENERALIDADES.
DB2 permite que varios procesos de aplicación accedan a los mismos datos a la vez. Es decir, permite concurrencia, pero no gratis, al facilitar concurrencia hay que pagar el precio de posibles contenciones indeseadas, timeout, etc. A la larga es menos costoso que la concurrencia la gestione el DB2 que la gestionen los propios programas.
Como beneficio tenemos:
 No existen pérdidas de actualizaciones
 No existe la posibilidad de acceso a datos inconsistentes
 Los programas no necesitan controlarlo
Para realizar todo esto el DB2 bloquea el recurso en un momento dado y para un programa dado, de tal forma que si otro programa quiere acceder a ese recurso y, por incompatibilidad de operaciones con el que lo tiene, el DB2 hace que espere durante un tiempo, si al cabo de ese tiempo se libera el recurso, continúa la ejecución del segundo programa, en caso contrario le devuelve el control diciéndole que no ha podido realizar su petición. Pero en ningún caso se producen los efectos negativos de dos procesos accediendo a los mismos datos.
La forma de bloquear un recurso puede ser:
 Implícita del DB2, con los parámetros de creación de los recursos y unas normas de acceso, él decide en cada momento qué debe hacer.
 Explícita, el proceso de aplicación envía una petición de bloqueo, (en ésta instalación no se recomienda esta forma de bloqueo).
La estrategia básica de bloqueo DB2 son:
 Bloqueo de Espacio para Tablas con bloqueo de páginas
 Bloqueo de Espacio para Tablas sin bloqueo de páginas
 Bloqueo de Tablas con bloqueo de páginas
 Bloqueo de Tablas sin bloqueo de páginas
La estrategia a seguir depende de las necesidades de performance, frente a las necesidades de concurrencia.
Cuando se utiliza bloqueo de páginas:
 Mejora concurrencia, lo que significa, buenos tiempos de respuesta
 Aumenta el consumo de CPU y memoria. Esto es muy importante en datos que sólo se procesan batch y que requieren actualizaciones de muchas páginas.

Cuando no se utiliza bloqueo de páginas:
 Disminuye el consumo de CPU y de memoria
 Se reduce la concurrencia, lo que significa mayor tiempo de respuesta

ATRIBUTOS DEL BLOQUEO DB2.

Objeto del Bloqueo
El objeto de un lock es el recurso que va a ser bloqueado.
El DB2 puede bloquear los siguientes recursos:
 Espacios para Tablas
 Tablas
 Páginas
El DB2 bloquea además otros recursos pero sólo en el ámbito de proceso interno, y, en cualquier caso, son objetos propios del DB2, y no de usuario.

El tamaño de un Bloqueo
Dice el tamaño del recurso que bloquea.
Para Espacios para tablas segmentados, un lock puede afectar a:
 Al espacio para tabla entero, lo que significa, que cualquier tabla contenida en él queda bloqueada.
 Una tabla dentro del espacio para tablas.
 Una página de una tabla.
Para Espacios para tablas NO segmentados, un lock puede afectar a:
 El espacio para tablas completo
 Una página dentro del espacio para tablas

Existen dos típicos casos de necesidades de concurrencia:
 Muchos usuarios, sólo lectura
 Un usuario cada vez con posibilidad de lectura y/o escritura
Dependiendo de los datos, unos necesitarán una concurrencia y otros otra. La necesidad de concurrencia depende también del tipo de proceso.
De las necesidades mencionadas anteriormente, se puede decidir sí la estrategia de bloqueo es sólo en el ámbito de espacio para tabla, ó, en el ámbito de páginas dentro de un espacio para tabla.
Para el caso ‘1’, es mejor bloquear a nivel de espacio para tabla.
Para el caso ‘2’, es mejor pensar en el bloqueo de páginas dentro de un espacio para tablas.
El tamaño del bloqueo se decide cuando se define el Espacio para tablas, normalmente en esta instalación se opta por decir que puede ser cualquiera, de manera que el DB2, dependiendo del proceso, decide cual es el más óptimo.

Duración del Bloqueo
Es el espacio de tiempo que el DB2 mantiene un bloqueo sobre un recurso.
El espacio puede variar dependiendo de en qué momento se adquiere y en qué momento se libera.
¿Cómo se adquieren y liberan los recursos?
En tiempo de BIND se define cuando se quiere que se adquieran y liberen los recursos.
Los parámetros son:
 ADQUIRE: Cuando se adquieren los bloqueos sobre los recursos
 RELEASE: Cuando se liberan los bloqueos sobre los recursos
 ISOLATION LEVEL: Duración del bloqueo sobre páginas.

Las posibilidades para adquirir un lock son:
 En tiempo de carga del plan (ALLOCATE): Antes de ejecutar ninguna sentencia del plan se asegura que tiene disponibles todos los recursos que va a necesitar, si alguno estuviese bloqueado por otro proceso, éste esperaría a que lo liberasen.

 En el momento que se usa (USE): Comienza a ejecutar el plan, cuando va a utilizar un recurso adquiere el lock necesario para esa sentencia, sí otro proceso tuviese bloqueado el recurso, éste plan esperaría.

Las posibilidades para liberar un lock son:
 En tiempo de descarga del plan (DEALLOCATE): No libera ningún recurso hasta que el plan finalice, existan o no sentencias COMMIT.
 En tiempo de COMMIT, libera los recursos adquiridos hasta ese momento cuando se ejecuta un COMMIT, bien implícito, bien explícito.

Con estos parámetros se pueden realizar cuatro combinaciones posibles, sólo son válidas las siguientes:
 Adquiere ALLOCATE libera DEALLOCATE.
 Adquiere USE libera DEALLOCATE.
 Adquiere USE libera COMMIT.

El uso de Adquiere ALLOCATE:
 Disminuye posibilidades de DEADLOCK.
 Reduce posibilidad de Concurrencia.

Por el contrario, el uso de Adquiere USE:
 Aumenta la posibilidad de DEADLOCK.
 Aumenta la posibilidad de Concurrencia.

DEADLOCK: Un deadlock se produce cuando el proceso A tiene adquirido el recurso R1 y necesita el recurso R2, pero a su vez el proceso B tiene el recurso R2 y está esperando por el recurso R1.
El Deadlock debe evitarse, pero no es desastroso que se produzca ya que el DB2 lo detecta y decide que un proceso termine, con lo que libera el recurso que espera el otro, y el otro acabe normalmente puesto que puede adquirir el recurso que necesita.
En esta instalación se ha definido que los recursos se adquieran en el momento que se utilicen y se liberen en tiempo de COMMIT, puesto que se hace mucho hincapié en la máxima concurrencia, asumiendo y controlando la posibilidad de Deadlock que, como se ha explicado en capítulos anteriores, existen técnicas de diseño que pueden reducirlos.
Duración de un lock sobre un Espacio para Tablas: Queda determinado por los parámetros ADQUIRE y RELEASE.
Duración de un lock sobre una Página: Una Página se bloquea cuando se accede a ella por primera vez.
Una página se libera dependiendo de: el valor del parámetro ISOLATION LEVEL y del tratamiento realizado.
El parámetro ISOLATION puede tomar los siguientes valores:
 CURSOR STABILITY (CS): Significa que:
o En procesos sólo de lectura, el bloqueo sobre la página se mantiene sólo mientras el cursor está posicionado en ella, cuando el cursor accede a otra página , el bloqueo sobre la anterior se libera.
o En procesos de actualización, el bloqueo sobre la página de datos se mantiene hasta el siguiente punto de commit (ó hasta la liberación del plan), ó rollback. Y, sí no se ha modificado campos del índice, la página de direcciones del índice se libera cuando se cierre el cursor.
 REPEATABLE READ: Significa que los bloqueos se mantienen hasta el siguiente punto de commit. De esta manera, si un mismo proceso accede en dos momentos diferentes a los mismos datos, éstos no pueden haber cambiado.
Es preferible la opción CS, puesto que permite mayor concurrencia.

Modo de un Bloqueo

Se denomina modo de un bloqueo a los diferentes tipos de acceso permitidos por procesos de aplicación concurrentes.

Bloqueos sobre Páginas
Cuando una página se bloquea con un determinado tipo de bloqueo, el espacio para tablas al que pertenece se bloquea con un tipo de bloqueo que se denomina ‘Intento de’.
Los tipos de bloqueos sobre página son:
 S (SHARE): El propietario del lock y cualquier otro proceso concurrente pueden leer los datos pero no pueden cambiarlos. Otro proceso de aplicación puede adquirir un S-lock o un U-lock sobre esa página. El espacio para tabla al que pertenece la página tendrá un IS-lock o IX-lock.
 U (UPDATE): El propietario del lock puede leer los datos e intentar cambiarlos, ningún otro proceso de aplicación puede adquirir sobre esa página un S-lock pero no un U-lock. Operaciones de Update y Delete mediante cursor requieren un U-lock en lectura; cuando se realiza la operación de actualización el U-lock se promociona a X-lock sí ningún otro proceso tiene adquirido un S-lock en caso contrario el proceso tiene que esperar. El espacio para tabla adquiere un IX-lock.
 X (EXCLUSIVE): El propietario puede leer datos o cambiar los datos, ningún otro proceso puede acceder a leer ni a modificar datos de esa misma página. El espacio para tabla adquiere un IX-lock o un SIX-lock.
Los tipos de bloqueos sobre espacios para tablas son:
IS (INTENT SHARE): El propietario puede leer datos del espacio para tabla pero no puede cambiarlos. Cualquier otro proceso puede leer o cambiar datos.
S (SHARE): El propietario y cualquier otro proceso puede leer los datos del espacio bloqueado pero no pueden cambiarlos.
IX (INTENT EXCLUSIVE): El propietario del lock y cualquier otro proceso concurrente pueden leer y modificar los datos. Para modificar los datos es necesario adquirir sobre la página en cuestión el lock necesario siguiendo las reglas de bloqueo sobre páginas.
SIX (SHARE con INTENT EXCLUSIVE): El propietario del lock puede leer y cambiar los datos. Cualquier otro proceso concurrente puede leer datos en el espacio bloqueado pero no puede cambiarlos.
U (UPDATE): El propietario puede leer e intentar cambiar los datos del espacio bloqueado. Cualquier otro proceso puede adquirir S-lock sobre el espacio para tabla pero no pueden adquirir U-lock.
X (EXCLUSIVE): El propietario del lock puede leer y cambiar los datos, ningún otro proceso puede leer ni cambiar.

Compatibilidad de tipos de bloqueo
Se dice que dos tipos de bloqueo son compatibles cuando un proceso A tiene un recurso de un determinado tipo adquirido y un proceso B quiere adquirir ese recurso y puede hacerlo.
avatar
Coboler@
Admin

Mensajes : 215
Reputación : 19
Fecha de inscripción : 02/02/2011
Edad : 37
Localización : Madrid

Ver perfil de usuario http://www.coboleros.es

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.