¿Manejar tiempos de espera y bloqueos de bases de datos en programas Java?
Cada programa que utiliza una base de datos relacional puede encontrar un punto muerto o falta de disponibilidad de datos, y estas situaciones deben resolverse mediante la programación en el código. Este artículo presenta principalmente situaciones relacionadas con puntos muertos en las transacciones de la base de datos y otras situaciones. Además, la lógica de reintento también discutirá cómo evitar interbloqueos y otros problemas. El artículo utiliza DB2 (versión 9) y DB2 como ejemplo para explicar.
¿Qué son los bloqueos y puntos muertos de la base de datos?
El bloqueo ocurre cuando una transacción obtiene un "bloqueo" en un determinado recurso. En este momento, otras transacciones no pueden cambiarlo. este mecanismo existe para garantizar la coherencia de los datos; al diseñar un programa que interactúa con la base de datos, se deben abordar los bloqueos y la falta de disponibilidad de recursos. El bloqueo es un concepto relativamente complejo y puede llevar un artículo largo explicarlo en detalle, por lo que en este artículo el bloqueo solo se considera un evento temporal, lo que significa que si un recurso está bloqueado, siempre estará bloqueado en algún momento. tiempo en el futuro. El punto muerto ocurre cuando varios procesos acceden a la misma base de datos y los bloqueos que posee cada proceso son requeridos por otros procesos, lo que hace que cada proceso no pueda continuar.
Cómo evitar bloqueos
Podemos utilizar el mecanismo de nivel de aislamiento en bases de datos transaccionales para evitar la creación de bloqueos. El uso correcto de los niveles de aislamiento permite que el programa maneje más eventos concurrentes (como. como Permitir que varios usuarios accedan a los datos), y también previene problemas como modificaciones perdidas (LostUpdate), lectura de datos "sucios" (DirtyRead), lectura no repetible (NonrepeatableRead) y "fantasma" (Phantom).
Fenómeno del problema del nivel de aislamiento
Datos "sucios" de lectura modificados perdidos, lectura "virtual" no repetible
Lectura repetible NoNoNoNo
Estabilidad de lectura NoNoNoSí
Estabilidad del cursor NoNoSíSí
Lectura no confirmada NoSíSíSí
Tabla 1: Niveles de aislamiento de DB2 y sus síntomas de problema correspondientes
En lectura modo de solo lectura, puede evitar que se produzca el bloqueo sin utilizar declaraciones ambiguas que no confirmen el nivel de aislamiento de solo lectura. Shahe Computer Training descubrió que cuando se utiliza uno de los siguientes comandos en una declaración SQL, se debe considerar el modo de solo lectura