Simultaneidad y bloqueos
Simultaneidad es la capacidad que tienen más de un proceso de aplicaciones para acceder a los mismos datos esencialmente al mismo tiempo.
Muchas transacciones utilizan simultáneamente una aplicación de entrada de pedidos. Cada transacción realiza inserciones en tablas de facturas y elementos de factura, lecturas de una tabla de datos sobre clientes y lecturas y actualizaciones de datos sobre elementos a mano. Con microsegundos de diferencia pueden prepararse dos operaciones sobre los mismos datos, realizadas por dos transacciones simultáneas. Para los usuarios, las operaciones parecen simultáneas.
Por qué Db2 controla la simultaneidad
- Pérdida de actualizaciones
- Sin control de simultaneidad, dos procesos, A y B, pueden leer la misma fila de la base de datos y calcular nuevos valores para una de sus columnas en función de lo que leen. Si A actualiza la fila con su nuevo valor y luego B actualiza la misma fila, la actualización de A se pierde.
- Acceso a datos no confirmados
- Sin control de simultaneidad, el proceso A puede actualizar un valor de la base de datos y el proceso B puede leer dicho valor antes de que se confirme. Luego, si el valor de A no se confirma posteriormente, sino que se retrotrae, los cálculos de B se basan en datos no conformados (y probablemente incorrectos).
- Lecturas no repetibles
- Algunos procesos necesitan la siguiente secuencia de sucesos: A lee una fila de la base de datos y continúa procesando otras solicitudes de SQL. Luego, A vuelve a leer la primera fila y debe encontrar los mismos valores que ha leído la primera vez. Sin control, el proceso B podría haber modificado la fila entre las dos operaciones de lectura.
Para evitar que se produzcan estas situaciones a menos que se permitan de forma específica, Db2 puede utilizar bloqueos para controlar la simultaneidad.
Cómo utiliza Db2 los bloqueos
Un bloqueo asocia un recurso de Db2 a un proceso de aplicación de una forma que afecta a cómo otros procesos pueden acceder al mismo recurso. Se dice que el proceso asociado al recurso retiene
o posee
el bloqueo. Db2 utiliza bloqueos para garantizar que ningún proceso acceda a datos que hayan sido modificados, pero aún no confirmados, por otro proceso. Para los bloqueos XML y LOB, Db2 también utiliza bloqueos para garantizar que una aplicación no pueda acceder a datos parciales o incompletos
Los bloqueos pueden causar contienda, que degrada el rendimiento, lo que incluye situaciones como suspensiones, tiempos de espera excedidos y puntos muertos. La comprensión de los tamaños, las duraciones, las modalidades y los objetos de los bloqueos de transacciones puede ayudarle a comprender por qué los procesos encuentran suspensiones o puntos muertos o exceden tiempos de espera y cómo se podría evitar esa contienda.