INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

46
1 INTERBLOQUEOS Y INTERBLOQUEOS Y NIVELES DE NIVELES DE AISLAMIENTO. AISLAMIENTO.

Transcript of INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

Page 1: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1

INTERBLOQUEOS Y INTERBLOQUEOS Y NIVELES DE NIVELES DE

AISLAMIENTO. AISLAMIENTO.

Page 2: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

22

SimultaneidadSimultaneidad

La simultaneidad en la capacidad de que La simultaneidad en la capacidad de que varios usuarios tengan acceso a los datos varios usuarios tengan acceso a los datos al mismo tiempo. Cuando el número de al mismo tiempo. Cuando el número de operaciones simultáneas que puede operaciones simultáneas que puede admitir la base de datos es grande, se admitir la base de datos es grande, se aumenta la simultaneidad de la base de aumenta la simultaneidad de la base de datos. datos.

Cuando se esta ejecutando Cuando se esta ejecutando simultáneamente mas de un proceso, a simultáneamente mas de un proceso, a veces sucede que los dos intentan veces sucede que los dos intentan modificar el mismo registro.modificar el mismo registro.

Page 3: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

33

¿Cómo se consigue el control ¿Cómo se consigue el control de simultaneidad?de simultaneidad?

Page 4: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

44

El control de simultaneidad se El control de simultaneidad se consigue utilizando bloqueos que consigue utilizando bloqueos que ayudan a proteger los datos. Los ayudan a proteger los datos. Los bloqueos controlan el modo en el que bloqueos controlan el modo en el que los distintos usuarios pueden tener los distintos usuarios pueden tener acceso y cambiar los datos acceso y cambiar los datos compartidos al mismo tiempo sin compartidos al mismo tiempo sin entrar en conflicto entre ellos. entrar en conflicto entre ellos.

Page 5: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

55

Si no se utiliza el bloqueo y varios Si no se utiliza el bloqueo y varios usuarios actualizan los mismos datos usuarios actualizan los mismos datos a la vez, es posible que la a la vez, es posible que la información de la base de datos deje información de la base de datos deje de ser correcta desde un punto de de ser correcta desde un punto de vista lógico. En este caso, puede que vista lógico. En este caso, puede que las consultas ejecutadas en esos las consultas ejecutadas en esos datos generen resultados datos generen resultados inesperados. inesperados.

Page 6: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

66

Problemas de simultaneidadProblemas de simultaneidadSi no se administra la modificación y lectura de datos por parte de varios usuarios, pueden producirse problemas de simultaneidad. Por ejemplo, si varios usuarios intentan tener acceso a una base de datos al mismo tiempo, sus transacciones podrían tratar de realizar operaciones sobre los mismos datos al mismo tiempo. Entre los problemas de simultaneidad que podrían producirse al usar SQL Server Compact Edition se encuentran los siguientes:

Page 7: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

77

Actualizaciones perdidas. Actualizaciones perdidas.

Las actualizaciones pueden perderse Las actualizaciones pueden perderse si dos o más transacciones si dos o más transacciones seleccionan la misma fila y, a seleccionan la misma fila y, a continuación, intentan actualizar esa continuación, intentan actualizar esa fila basándose en el valor fila basándose en el valor seleccionado originalmente. La seleccionado originalmente. La última actualización sobrescribe las última actualización sobrescribe las actualizaciones realizadas por las actualizaciones realizadas por las demás transacciones, lo que da lugar demás transacciones, lo que da lugar a una pérdida de datos.a una pérdida de datos.

Page 8: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

88

Análisis contradictorios (lecturas no Análisis contradictorios (lecturas no repetibles). repetibles).

Las lecturas no repetibles se Las lecturas no repetibles se producen cuando una segunda producen cuando una segunda transacción tiene acceso a la misma transacción tiene acceso a la misma fila varias veces y lee datos distintos fila varias veces y lee datos distintos en cada ocasión. Para ello son en cada ocasión. Para ello son necesarias varias lecturas de la necesarias varias lecturas de la misma fila. En cada ocasión, la misma fila. En cada ocasión, la información es modificada por otra información es modificada por otra transacción.transacción.

Page 9: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

99

Lecturas fantasma. Lecturas fantasma. Las lecturas ficticias se producen al realizarse Las lecturas ficticias se producen al realizarse

una acción de inserción o eliminación en una fila una acción de inserción o eliminación en una fila que pertenece a un intervalo de filas que está que pertenece a un intervalo de filas que está siendo leído por una transacción. La primera siendo leído por una transacción. La primera lectura del intervalo de filas por parte de la lectura del intervalo de filas por parte de la transacción muestra una fila que ha dejado de transacción muestra una fila que ha dejado de existir en las siguientes lecturas, ya que ha sido existir en las siguientes lecturas, ya que ha sido eliminada por otra transacción. Del mismo modo, eliminada por otra transacción. Del mismo modo, y debido a la inserción de una fila por parte de y debido a la inserción de una fila por parte de otra transacción, las siguientes lecturas de la otra transacción, las siguientes lecturas de la transacción mostrarán una fila que no existía en transacción mostrarán una fila que no existía en la primera lectura.la primera lectura.

Page 10: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1010

Niveles de aislamientoNiveles de aislamiento

El nivel de aislamiento de una transacción (transaction isolation level) define el grado en que se aísla una transacción de las modificaciones de recursos o datos realizadas por otras transacciones.

El nivel de aislamiento de una transacción es una característica de vital importancia en el desarrollo de aplicaciones de base de datos, ya que afecta a los tipos y duración de bloqueos que se producen en nuestra infraestructura de base de datos, lo cual, tiene efectos directos en el rendimiento y tiempo de respuesta de nuestras consultas y transacciones.

Evidentemente, la elección del modo de aislamiento es más importante cuanto mayor es la concurrencia de la base de datos

Page 11: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1111

Para empezar es importante Para empezar es importante entender perfectamente el entender perfectamente el comportamiento por defecto de comportamiento por defecto de SQL Server en las operaciones de SQL Server en las operaciones de lectura y de escrituralectura y de escritura::

Page 12: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1212

En operaciones de escrituraEn operaciones de escritura. Siempre se . Siempre se obtiene un obtiene un bloqueo exclusivobloqueo exclusivo que se mantiene que se mantiene hasta que se completa la transacción. hasta que se completa la transacción.

En operaciones de lecturaEn operaciones de lectura. El comportamiento . El comportamiento dependerá del nivel de aislamiento de la dependerá del nivel de aislamiento de la transacción. Por defecto, SQL Server utiliza el transacción. Por defecto, SQL Server utiliza el modo de aislamiento basado en bloqueos READ modo de aislamiento basado en bloqueos READ COMMITTED, que se explica un poco más COMMITTED, que se explica un poco más adelante. adelante.

Page 13: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1313

Tipos de niveles de aislamientoTipos de niveles de aislamiento Niveles de Aislamiento basados en Niveles de Aislamiento basados en

bloqueosbloqueos. Se trata del comportamiento . Se trata del comportamiento tradicional de SQL Server (existente desde tradicional de SQL Server (existente desde versiones anteriores de SQL Server), como versiones anteriores de SQL Server), como se ha descrito en el párrafo anterior. El se ha descrito en el párrafo anterior. El funcionamiento de SQL Server se basa en funcionamiento de SQL Server se basa en el establecimiento y gestión de los el establecimiento y gestión de los bloqueos. Existen cuatro modos de bloqueos. Existen cuatro modos de aislamiento diferentes basados en aislamiento diferentes basados en bloqueos cubiertos en la norma SQL-99 : bloqueos cubiertos en la norma SQL-99 : READ UNCOMMITTED, READ READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ y COMMITTED, REPEATABLE READ y SERIALIZABLESERIALIZABLE

Page 14: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1414

Niveles de Aislamiento basados en Niveles de Aislamiento basados en versionado de filas (row versioning - similar versionado de filas (row versioning - similar a ORACLE)a ORACLE)..

se basan en el versionado de filas (row versioning). Una de se basan en el versionado de filas (row versioning). Una de las principales razones de utilizar el versionado de filas (row las principales razones de utilizar el versionado de filas (row versioning) es versioning) es minimizar los bloqueosminimizar los bloqueos ocurridos en la ocurridos en la base de datos, con el fin de obtener un mejor rendimiento base de datos, con el fin de obtener un mejor rendimiento (las operaciones de lecturas, sólo establecerán bloqueos (las operaciones de lecturas, sólo establecerán bloqueos compartidos de esquema a nivel de tabla, y NO bloquearán compartidos de esquema a nivel de tabla, y NO bloquearán filas ni páginas de datos). filas ni páginas de datos). Siempre que una transacción Siempre que una transacción modifica un fila en uno de los modos de aislamiento modifica un fila en uno de los modos de aislamiento de versionado de filas, SQL Server 2005 utiliza de versionado de filas, SQL Server 2005 utiliza TEMPDB para almacenar una copia de la fila con el TEMPDB para almacenar una copia de la fila con el valor original y el número de secuencia de la valor original y el número de secuencia de la transaccióntransacción. En caso de que múltiples transacciones . En caso de que múltiples transacciones modifiquen la misma fila, se almacena en TEMPDB una modifiquen la misma fila, se almacena en TEMPDB una cadena de valores de la fila. cadena de valores de la fila.

Page 15: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1515

A continuación se describen los A continuación se describen los cuatro posibles niveles de cuatro posibles niveles de

aislamiento basados en bloqueos.aislamiento basados en bloqueos.

Page 16: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1616

READ UNCOMMITTEDREAD UNCOMMITTED puede recuperar datos modificados puede recuperar datos modificados pero no confirmados por otras transacciones (pero no confirmados por otras transacciones (lecturas lecturas sucias - dirty readssucias - dirty reads). En este nivel se pueden producir ). En este nivel se pueden producir todos los efectos secundarios de simultaneidad (lecturas todos los efectos secundarios de simultaneidad (lecturas sucias, lecturas no repetibles y lecturas fantasma - ej: entre sucias, lecturas no repetibles y lecturas fantasma - ej: entre dos lecturas de un mismo registro en una transacción A, dos lecturas de un mismo registro en una transacción A, otra transacción B puede modificar dicho registro), pero no otra transacción B puede modificar dicho registro), pero no hay bloqueos ni versiones de lectura, por lo que se hay bloqueos ni versiones de lectura, por lo que se minimiza la sobrecarga. minimiza la sobrecarga. Una operación de lectura Una operación de lectura (SELECT) no establecerá bloqueos compartidos (SELECT) no establecerá bloqueos compartidos (shared locks)(shared locks) sobre los datos que está leyendo, por lo sobre los datos que está leyendo, por lo que no será bloqueada por otra transacción que tenga que no será bloqueada por otra transacción que tenga establecido un bloqueo exclusivo por motivo de una establecido un bloqueo exclusivo por motivo de una operación de escritura. Este nivel de aislamiento ofrece operación de escritura. Este nivel de aislamiento ofrece grandes beneficios de rendimiento, pero sólo deberemos grandes beneficios de rendimiento, pero sólo deberemos utilizarlo en aquellos casos en que la ocurrencia de lecturas utilizarlo en aquellos casos en que la ocurrencia de lecturas sucias (dirty reads) no sea un problema. sucias (dirty reads) no sea un problema.

Page 17: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1717

READ COMMITTEDREAD COMMITTED permite que entre dos permite que entre dos lecturas de un mismo registro en una transacción lecturas de un mismo registro en una transacción A, otra transacción B pueda modificar dicho A, otra transacción B pueda modificar dicho registro, obteniendose diferentes resultados de la registro, obteniendose diferentes resultados de la misma lectura. Evita las lecturas sucias (dirty misma lectura. Evita las lecturas sucias (dirty reads), pero por el contrario, permite lecturas no reads), pero por el contrario, permite lecturas no repetibles. Es la repetibles. Es la opción por defecto en SQL opción por defecto en SQL Server 2000 y SQL Server 2005Server 2000 y SQL Server 2005. Con este . Con este nivel de aislamiento, nivel de aislamiento, una operación de lectura una operación de lectura (SELECT) establecerá bloqueos compartidos (SELECT) establecerá bloqueos compartidos (shared locks) sobre los datos que está (shared locks) sobre los datos que está leyendoleyendo. Sin embargo, dichos bloqueos . Sin embargo, dichos bloqueos compartidos finalizarán junto con la propia compartidos finalizarán junto con la propia operación de lectura, de tal modo que entre dos operación de lectura, de tal modo que entre dos lecturas cabe la posibilidad de que otra lecturas cabe la posibilidad de que otra transacción realice una operación de escritura (ej: transacción realice una operación de escritura (ej: UPDATE), en cuyo caso, la segunda lectura UPDATE), en cuyo caso, la segunda lectura obtendrá datos distintos a la primera lectura obtendrá datos distintos a la primera lectura (lecturas no repetibles). (lecturas no repetibles).

Page 18: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1818

REPEATABLE READREPEATABLE READ evita que entre dos lecturas de un evita que entre dos lecturas de un mismo registro en una transacción A, otra transacción B mismo registro en una transacción A, otra transacción B pueda modificar dicho registro, con el efecto de que en la pueda modificar dicho registro, con el efecto de que en la segunda lectura de la transacción A se obtuviera un dato segunda lectura de la transacción A se obtuviera un dato diferente. diferente.

De este modo, ambas lecturas serían iguales (lecturas De este modo, ambas lecturas serían iguales (lecturas repetidas). Para ello, repetidas). Para ello, una operación de lectura (SELECT) una operación de lectura (SELECT) establecerá bloqueos compartidos (shared locks) establecerá bloqueos compartidos (shared locks) sobre los datos que está leyendo, y los mantendrá sobre los datos que está leyendo, y los mantendrá hasta el final de la transacciónhasta el final de la transacción, garantizando así que no , garantizando así que no se produce se produce lecturas no repetibles (non repeatable lecturas no repetibles (non repeatable reads)reads). Mayor consistencia en la transacción, mediante . Mayor consistencia en la transacción, mediante mayores recursos y bloqueos (mayores recursos y bloqueos (se evitan los problemas se evitan los problemas de las lecturas sucias y de las lecturas no repetiblesde las lecturas sucias y de las lecturas no repetibles, , pagando el precio de necesidad de mayores recursos). pagando el precio de necesidad de mayores recursos).

Sin embargo, este modo de aislamiento Sin embargo, este modo de aislamiento no evita las no evita las lecturas fantasmalecturas fantasma, es decir, una transacción podría , es decir, una transacción podría ejecutar una consulta sobre un rango de filas (ej: 100 filas) ejecutar una consulta sobre un rango de filas (ej: 100 filas) y de forma simultánea otra transacción podría realizar un y de forma simultánea otra transacción podría realizar un inserción de una o varias filas sobre el mismo rango. inserción de una o varias filas sobre el mismo rango.

Page 19: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

1919

SERIALIZABLESERIALIZABLE garantiza que una transacción recuperará garantiza que una transacción recuperará exactamente los mismos datos cada vez que repita una exactamente los mismos datos cada vez que repita una operación de lectura (es decir, la misma sentencia SELECT operación de lectura (es decir, la misma sentencia SELECT con la misma cláusula WHERE devolverá el mismo número con la misma cláusula WHERE devolverá el mismo número de filas, luego no se podrán insertar filas nuevas en el de filas, luego no se podrán insertar filas nuevas en el rango cubierto por la WHERE, etc. - se evitarán las rango cubierto por la WHERE, etc. - se evitarán las lecturas lecturas fantasmafantasma), aunque para ello aplicará un nivel de bloqueo ), aunque para ello aplicará un nivel de bloqueo que puede afectar a los demás usuarios en los sistemas que puede afectar a los demás usuarios en los sistemas multiusuario (realizará un bloqueo de un rango de índice - multiusuario (realizará un bloqueo de un rango de índice - conforme a la cláusula WHERE - y si no es posible conforme a la cláusula WHERE - y si no es posible bloqueará toda la tabla). Evita los problemas de las lecturas bloqueará toda la tabla). Evita los problemas de las lecturas sucias (dirty reads), de las lecturas no repetibles (non sucias (dirty reads), de las lecturas no repetibles (non repeatable reads), y de las lecturas fantasma (phantom repeatable reads), y de las lecturas fantasma (phantom reads). reads).

Page 20: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2020

En caso de trabajar con modos de aislamiento basados en En caso de trabajar con modos de aislamiento basados en bloqueo, es muy importante recordar que bloqueo, es muy importante recordar que el tiempo de el tiempo de espera por un bloqueo por defecto en SQL Server es espera por un bloqueo por defecto en SQL Server es infinitoinfinito. Es decir, si tenemos una transacción que está . Es decir, si tenemos una transacción que está manteniendo un bloqueo sobre un recurso (ej: una fila manteniendo un bloqueo sobre un recurso (ej: una fila particular de una tabla), y mientras una transacción B particular de una tabla), y mientras una transacción B intenta acceder a dicho recurso (ej: a la misma fila), la intenta acceder a dicho recurso (ej: a la misma fila), la transacción B se quedará en espera por un tiempo transacción B se quedará en espera por un tiempo indefinido (o hasta que la transacción A libere dicho indefinido (o hasta que la transacción A libere dicho recurso). ¿A que ahora entendemos mejor porqué es modo recurso). ¿A que ahora entendemos mejor porqué es modo de aislamiento READ UNCOMMITTED resulta tan atractivo, de aislamiento READ UNCOMMITTED resulta tan atractivo, eh? Es posible establecer un tiempo de espera de bloqueo eh? Es posible establecer un tiempo de espera de bloqueo máximo, con el fin de evitar esperas largas en las máximo, con el fin de evitar esperas largas en las transacciones. Para ello, es posible utilizar la sentencia transacciones. Para ello, es posible utilizar la sentencia SET SET LOCK_TIMEOUTLOCK_TIMEOUT para especificar el tiempo máximo de para especificar el tiempo máximo de espera por bloqueo (en milisegundos). espera por bloqueo (en milisegundos).

Page 21: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2121

En caso se que una transacción En caso se que una transacción alcance el tiempo máximo de espera alcance el tiempo máximo de espera por bloqueo, se producirá un por bloqueo, se producirá un mensaje de error 1222 (Msg 1222, mensaje de error 1222 (Msg 1222, Level 16, State 51, Line 1. Lock Level 16, State 51, Line 1. Lock request time out period exceeded.). request time out period exceeded.). También es posible conocer el actual También es posible conocer el actual tiempo de espera por bloqueo, tiempo de espera por bloqueo, consultando el valor de la función del consultando el valor de la función del sistema sistema @@LOCK_TIMEOUT@@LOCK_TIMEOUT. .

Page 22: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2222

Ahora que ya conocemos qué son Ahora que ya conocemos qué son los niveles de aislamientolos niveles de aislamiento

¿cómo se puede establecer el ¿cómo se puede establecer el nivel de aislamiento en una nivel de aislamiento en una

transacción?transacción?

Page 23: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2323

En SQL Server 2000, y para los cuatro En SQL Server 2000, y para los cuatro modos de aislamiento basados en bloqueo modos de aislamiento basados en bloqueo (Read Uncommitted, Read Committed, (Read Uncommitted, Read Committed, Repeateable Read, Serializable), es Repeateable Read, Serializable), es suficiente con utilizar la sentencia: suficiente con utilizar la sentencia:

SET TRANSACTION ISOLATION LEVEL SET TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ {READ UNCOMMITTED | READ COMMITTED | REPEATEABLE READ | COMMITTED | REPEATEABLE READ | SERIALIZABLE}SERIALIZABLE}..

Page 24: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2424

En la mayoría de los casos, será En la mayoría de los casos, será preferible utilizar el modo de preferible utilizar el modo de aislamiento de lecturas confirmadas aislamiento de lecturas confirmadas (READ COMMITED) junto con la (READ COMMITED) junto con la opción de base de datos opción de base de datos READ_COMMITTED_SNAPSHOT, READ_COMMITTED_SNAPSHOT,

Debido a que:Debido a que:

Page 25: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2525

Utiliza menos espacio en TEMPDBUtiliza menos espacio en TEMPDB, que , que la utilización explícita del nivel de la utilización explícita del nivel de aislamiento SNAPSHOT (SET TRANSACTION aislamiento SNAPSHOT (SET TRANSACTION ISOLATION LEVEL SNAPSHOT). ISOLATION LEVEL SNAPSHOT).

Soporta el funcionamiento de Soporta el funcionamiento de transacciones distribuidastransacciones distribuidas, que no es , que no es soportado con la utilización explícita del soportado con la utilización explícita del nivel de aislamiento SNAPSHOT (SET nivel de aislamiento SNAPSHOT (SET TRANSACTION ISOLATION LEVEL TRANSACTION ISOLATION LEVEL SNAPSHOT). SNAPSHOT).

Page 26: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2626

Es fácil de implantarEs fácil de implantar, ya que al , ya que al activar la opción de base de datos activar la opción de base de datos READ_COMMITTED_SNAPSHOT, todas READ_COMMITTED_SNAPSHOT, todas las transacciones que utilicen el nivel las transacciones que utilicen el nivel de aislamiento de lecturas de aislamiento de lecturas confirmadas (READ COMMITTED - el confirmadas (READ COMMITTED - el nivel de aislamiento por defecto en nivel de aislamiento por defecto en SQL Server) se beneficiarán del SQL Server) se beneficiarán del aislamiento por versionado de filas aislamiento por versionado de filas (row versioning). (row versioning).

Page 27: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2727

No es vulnerable ante conflictos de No es vulnerable ante conflictos de actualizacionesactualizaciones, mientras que por el contrario, , mientras que por el contrario, con la utilización explícita del nivel de aislamiento con la utilización explícita del nivel de aislamiento SNAPSHOT (SET TRANSACTION ISOLATION LEVEL SNAPSHOT (SET TRANSACTION ISOLATION LEVEL SNAPSHOT) si es posible que ocurran conflictos SNAPSHOT) si es posible que ocurran conflictos de actualizaciones. Es decir, si una transacción A de actualizaciones. Es decir, si una transacción A lee una fila, seguidamente una transacción B lee una fila, seguidamente una transacción B actualiza dicha fila, y a continuación la actualiza dicha fila, y a continuación la transacción A actualiza la misma fila, la diferencia transacción A actualiza la misma fila, la diferencia entre el aislamiento entre el aislamiento READ_COMMITTED_SNAPSHOT y el SNAPSHOT, READ_COMMITTED_SNAPSHOT y el SNAPSHOT, está en si se produce un conflicto de está en si se produce un conflicto de actualización en la transacción A (finalizándose la actualización en la transacción A (finalizándose la transacción y realizándose ROLLBACK) o si ambas transacción y realizándose ROLLBACK) o si ambas actualizaciones (de la transacción A y de la actualizaciones (de la transacción A y de la transacción B) se completan y confirman transacción B) se completan y confirman correctamente. correctamente.

Page 28: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2828

LOS NIVELES DE AISLAMIENTO LOS NIVELES DE AISLAMIENTO DE TRANSACCIONES DE TRANSACCIONES

CONTROLAN LOS SIGUIENTES CONTROLAN LOS SIGUIENTES ASPECTOS:ASPECTOS:

Page 29: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

2929

Si se realizan bloqueos cuando Si se realizan bloqueos cuando se leen los datos y que tipos de se leen los datos y que tipos de bloqueos se solicitanbloqueos se solicitan..

La duración de los bloqueos de lectura.La duración de los bloqueos de lectura. Si una operación de lectura que hace Si una operación de lectura que hace

referencia a filas modificadas por otra referencia a filas modificadas por otra transacción:transacción:

>>Se bloquea hasta que se libera el bloque exclusivo de la fila que Se bloquea hasta que se libera el bloque exclusivo de la fila que existía en el momento en el que empezó la instrucción.existía en el momento en el que empezó la instrucción.

>>Lee la modificación de los datos no confirmados.Lee la modificación de los datos no confirmados.

Page 30: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3030

NIVEL DE AISLAMIENTO MENORNIVEL DE AISLAMIENTO MENOR Significa que muchos usuarios Significa que muchos usuarios

pueden tener acceso a los datos pueden tener acceso a los datos simultáneamente, pero también simultáneamente, pero también aumentan los efectos de aumentan los efectos de simultaneidad que pueden simultaneidad que pueden experimentar, como lecturas no experimentar, como lecturas no confirmadas o perdida de confirmadas o perdida de actualizaciones.actualizaciones.

Page 31: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3131

NIVEL DE AISLAMIENTO MAYORNIVEL DE AISLAMIENTO MAYOR El nivel de aislamiento mayor reduce los El nivel de aislamiento mayor reduce los

tipos de efectos de simultaneidad, pero tipos de efectos de simultaneidad, pero requiere más recursos del sistema y requiere más recursos del sistema y aumenta las posibilidades de que una aumenta las posibilidades de que una transacción bloquee a otra. EL nivel de transacción bloquee a otra. EL nivel de aislamiento apropiado depende del aislamiento apropiado depende del equilibrio entre los requisitos de integridad equilibrio entre los requisitos de integridad de los datos de la aplicación y la de los datos de la aplicación y la sobrecarga de cada nivel de aislamiento. sobrecarga de cada nivel de aislamiento.

Page 32: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3232

NIVEL DE AISLAMIENTO SUPERIORNIVEL DE AISLAMIENTO SUPERIOR El nivel de aislamiento superior, que es El nivel de aislamiento superior, que es

serializable garantiza que una transacción serializable garantiza que una transacción recupera exactamente los mismos datos recupera exactamente los mismos datos cada vez que repita una operación de cada vez que repita una operación de lectura, aunque para ello aplicara un nivel lectura, aunque para ello aplicara un nivel de bloqueo que puede afectar a los demás de bloqueo que puede afectar a los demás usuarios en los sistemas multiusuario.usuarios en los sistemas multiusuario.

Page 33: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3333

NIVEL DE AISLAMIENTO INFERIORNIVEL DE AISLAMIENTO INFERIOR El nivel de aislamiento inferior, de lectura El nivel de aislamiento inferior, de lectura

sin confirmar, puede recuperar datos sin confirmar, puede recuperar datos modificados pero no confirmados por otras modificados pero no confirmados por otras transacciones. En este nivel se pueden transacciones. En este nivel se pueden producir todos los efectos secundarios de producir todos los efectos secundarios de simultaneidad, pero no hay bloqueos, ni simultaneidad, pero no hay bloqueos, ni versiones de lectura, por lo que minimiza versiones de lectura, por lo que minimiza la sobrecarga.la sobrecarga.

Page 34: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3434

BLOQUEOSBLOQUEOS

En general los bloqueos son En general los bloqueos son gestionados por Microsoft SQL gestionados por Microsoft SQL SERVER de forma automatizada sin SERVER de forma automatizada sin necesidad de gestión manual, pero necesidad de gestión manual, pero existen dos factores los cuales existen dos factores los cuales necesitan una intervención manual, necesitan una intervención manual, estos son en términos informáticos: estos son en términos informáticos:

BLOCKING y DEADLOCKS.BLOCKING y DEADLOCKS.

Page 35: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3535

BLOCKING.-BLOCKING.- Con este término se conoce la acción de Con este término se conoce la acción de espera de un proceso o varios por culpa de un bloqueo espera de un proceso o varios por culpa de un bloqueo existente por otro proceso sobre los mismos datos. La existente por otro proceso sobre los mismos datos. La solución para evitar mínimamente este tipo de bloqueo solución para evitar mínimamente este tipo de bloqueo es optimizar el diseño de las tablas, los índices utilizados, es optimizar el diseño de las tablas, los índices utilizados, la implementación de la sentencia sql y de la la implementación de la sentencia sql y de la configuración hardware. configuración hardware.

DEADLOCK.-DEADLOCK.- Con este término se conoce a el suceso de Con este término se conoce a el suceso de que dos procesos estén cada uno bloqueando un objeto y que dos procesos estén cada uno bloqueando un objeto y a la vez ambos necesitan también acceder a el objeto a la vez ambos necesitan también acceder a el objeto bloqueado por el otro. Esto crea un nudo, para lo que bloqueado por el otro. Esto crea un nudo, para lo que Microsoft SQL SERVER dependiendo del tiempo de espera Microsoft SQL SERVER dependiendo del tiempo de espera en el procesador de los procesos, realiza un roll back y en el procesador de los procesos, realiza un roll back y lanza el mensaje de error 1205 en uno de los procesos, lanza el mensaje de error 1205 en uno de los procesos, permitiendo al otro continuar.permitiendo al otro continuar.

Page 36: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3636

INTERBLOQUEOSINTERBLOQUEOS

Un interbloqueo se produce cuando hay una dependencia Un interbloqueo se produce cuando hay una dependencia cíclica entre dos o más subprocesos para algún conjunto de cíclica entre dos o más subprocesos para algún conjunto de resultados. Un interbloqueo es una circunstancia que se resultados. Un interbloqueo es una circunstancia que se puede dar en cualquier sistema con varios subprocesos, no puede dar en cualquier sistema con varios subprocesos, no sólo en un sistema de administración de bases de datos sólo en un sistema de administración de bases de datos relacionales. Un subproceso de un sistema que contiene relacionales. Un subproceso de un sistema que contiene varios subprocesos puede adquirir uno o más recursos, por varios subprocesos puede adquirir uno o más recursos, por ejemplo, bloqueos. ejemplo, bloqueos.

Si el recurso que se desea adquirir pertenece actualmente Si el recurso que se desea adquirir pertenece actualmente a otro subproceso, puede que el primer subproceso deba a otro subproceso, puede que el primer subproceso deba esperar a que el otro libere el recurso de destino. En esperar a que el otro libere el recurso de destino. En consecuencia, se dice que el subproceso que está en consecuencia, se dice que el subproceso que está en espera depende del subproceso que posee ese recurso espera depende del subproceso que posee ese recurso concreto.concreto.

Page 37: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3737

Si el subproceso "propietario" desea adquirir otro Si el subproceso "propietario" desea adquirir otro recurso que actualmente tiene ocupado el recurso que actualmente tiene ocupado el subproceso en espera, la situación que se genera subproceso en espera, la situación que se genera es un interbloqueo: ninguno de los subprocesos es un interbloqueo: ninguno de los subprocesos puede liberar el recurso que tiene ocupado hasta puede liberar el recurso que tiene ocupado hasta que sus transacciones se confirmen o se anulen, que sus transacciones se confirmen o se anulen, y éstas no pueden confirmarse ni anularse porque y éstas no pueden confirmarse ni anularse porque están a la espera de recursos que el otro están a la espera de recursos que el otro subproceso tiene ocupados. subproceso tiene ocupados.

Por ejemplo:Por ejemplo:

Page 38: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3838

El subproceso T1 que ejecuta la transacción 1 tiene un El subproceso T1 que ejecuta la transacción 1 tiene un bloqueo exclusivo en la tabla Supplier. El subproceso T2 bloqueo exclusivo en la tabla Supplier. El subproceso T2 que ejecuta la transacción 2 obtiene un bloqueo exclusivo que ejecuta la transacción 2 obtiene un bloqueo exclusivo en la tabla Part y, a continuación, desea un bloqueo en la en la tabla Part y, a continuación, desea un bloqueo en la tabla Supplier. La transacción 2 no puede obtener el tabla Supplier. La transacción 2 no puede obtener el bloqueo debido a que lo tiene la transacción 1. La bloqueo debido a que lo tiene la transacción 1. La transacción 2 está bloqueada, esperando a la transacción 1. transacción 2 está bloqueada, esperando a la transacción 1.

La transacción 1, a continuación, desea un bloqueo en la La transacción 1, a continuación, desea un bloqueo en la tabla Part, pero no puede obtenerlo debido a que la tabla Part, pero no puede obtenerlo debido a que la transacción 2 la tiene bloqueada. Las transacciones no transacción 2 la tiene bloqueada. Las transacciones no pueden liberar los bloqueos que mantienen hasta que se pueden liberar los bloqueos que mantienen hasta que se confirmen o se anulen. Las transacciones no se pueden confirmen o se anulen. Las transacciones no se pueden confirmar ni cancelar porque para continuar necesitan un confirmar ni cancelar porque para continuar necesitan un

bloqueo que tiene la otra transacción.bloqueo que tiene la otra transacción.

Page 39: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

3939

En la figura 1, el subproceso T1 tiene una En la figura 1, el subproceso T1 tiene una dependencia del subproceso T2 para el recurso dependencia del subproceso T2 para el recurso de bloque de tabla Part. Paralelamente, el de bloque de tabla Part. Paralelamente, el subproceso T2 tiene una dependencia del subproceso T2 tiene una dependencia del subproceso T1 para el recurso de bloque de tabla subproceso T1 para el recurso de bloque de tabla Supplier. Puesto que estas dependencias forman Supplier. Puesto que estas dependencias forman un ciclo, hay un interbloqueo entre los un ciclo, hay un interbloqueo entre los subprocesos T1 y T2.subprocesos T1 y T2.

Page 40: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

4040

Detectar y finalizar los Detectar y finalizar los interbloqueos.interbloqueos.

En SQL Server 2000, los En SQL Server 2000, los interbloqueos se detectan mediante interbloqueos se detectan mediante un subproceso distinto denominado un subproceso distinto denominado subproceso de supervisión de subproceso de supervisión de bloqueos, este inicia una búsqueda bloqueos, este inicia una búsqueda de interbloqueos para un subproceso de interbloqueos para un subproceso determinado en una de las determinado en una de las circunstancias siguientes:circunstancias siguientes:

Page 41: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

4141

El subproceso ha estado esperando un recurso durante un El subproceso ha estado esperando un recurso durante un período de tiempo concreto. De forma periódica, el período de tiempo concreto. De forma periódica, el subproceso de supervisión de bloqueos se activa e subproceso de supervisión de bloqueos se activa e identifica todos los subprocesos que están a la espera de identifica todos los subprocesos que están a la espera de algún recurso. Si estos subprocesos siguen esperando el algún recurso. Si estos subprocesos siguen esperando el mismo recurso la próxima vez que el monitor de bloqueos mismo recurso la próxima vez que el monitor de bloqueos se activa, éste inicia una búsqueda de interbloqueos para el se activa, éste inicia una búsqueda de interbloqueos para el subproceso que se mantiene a la esperasubproceso que se mantiene a la espera

Cuando el monitor de bloqueos inicia una búsqueda de Cuando el monitor de bloqueos inicia una búsqueda de interbloqueos para un subproceso determinado, identifica interbloqueos para un subproceso determinado, identifica el recurso por el que está esperando. Después, el monitor el recurso por el que está esperando. Después, el monitor de bloqueos encuentra al propietario o a los propietarios de de bloqueos encuentra al propietario o a los propietarios de ese recurso y continúa recursivamente la búsqueda de ese recurso y continúa recursivamente la búsqueda de interbloqueos para esos subprocesos hasta que encuentra interbloqueos para esos subprocesos hasta que encuentra un ciclo. Un ciclo que se identifica de esta manera forma un un ciclo. Un ciclo que se identifica de esta manera forma un interbloqueo.interbloqueo.

Page 42: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

4242

Identificar interbloqueos.Identificar interbloqueos. Después de identificar un interbloqueo, SQL Después de identificar un interbloqueo, SQL

Server elige un subproceso determinado como Server elige un subproceso determinado como víctima y devuelve un mensaje de error con una víctima y devuelve un mensaje de error con una lista que incluye todos los recursos que participan lista que incluye todos los recursos que participan en el interbloqueo. El mensaje que informa del en el interbloqueo. El mensaje que informa del interbloqueo tiene esta presentación: interbloqueo tiene esta presentación:

Your transaction (process ID #52) was deadlocked on Your transaction (process ID #52) was deadlocked on {lock | communication buffer | thread} resources with {lock | communication buffer | thread} resources with another process and has been chosen as the deadlock another process and has been chosen as the deadlock victim. victim. Rerun your transaction.Rerun your transaction.

Page 43: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

4343

Controlar los interbloqueos.Controlar los interbloqueos.

Cuando se elige una transacción enviada por una aplicación Cuando se elige una transacción enviada por una aplicación como víctima del interbloqueo, la transacción finaliza como víctima del interbloqueo, la transacción finaliza automáticamente, se deshace y se devuelve el mensaje de automáticamente, se deshace y se devuelve el mensaje de error 1205 a la aplicación. Debido a que se puede elegir error 1205 a la aplicación. Debido a que se puede elegir cualquier aplicación que envíe consultas de SQL como cualquier aplicación que envíe consultas de SQL como víctima del interbloqueo, las aplicaciones deben contener víctima del interbloqueo, las aplicaciones deben contener un controlador de errores que pueda interceptar el mensaje un controlador de errores que pueda interceptar el mensaje de error 1205. Si una aplicación no intercepta el error, de error 1205. Si una aplicación no intercepta el error, puede continuar sin ser consciente de que se ha deshecho puede continuar sin ser consciente de que se ha deshecho la transacción y se puede producir un error. La la transacción y se puede producir un error. La implementación de un controlador de error que intercepte implementación de un controlador de error que intercepte el mensaje 1205 permite a una aplicación controlar la el mensaje 1205 permite a una aplicación controlar la situación de interbloqueo y realizar una acción apropiada, situación de interbloqueo y realizar una acción apropiada, por ejemplo, volver a enviar automáticamente la consulta por ejemplo, volver a enviar automáticamente la consulta implicada en el interbloqueo.implicada en el interbloqueo.

Page 44: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

4444

Un interbloqueo no siempre cancela el Un interbloqueo no siempre cancela el proceso por lotes en que se devolvió el proceso por lotes en que se devolvió el error. Es importante que el programa error. Es importante que el programa cliente compruebe la existencia de cliente compruebe la existencia de errores, ya que un interbloqueo no errores, ya que un interbloqueo no siempre devuelve un código de devolución siempre devuelve un código de devolución de error. Si no es así, SQL Server puede de error. Si no es así, SQL Server puede tener todavía resultados pendientes en la tener todavía resultados pendientes en la conexión que espera que el cliente conexión que espera que el cliente procese. Si no se procesan los resultados procese. Si no se procesan los resultados pendientes, se producirá un error cuando pendientes, se producirá un error cuando la aplicación intente, a continuación, la aplicación intente, a continuación, enviar un comando a SQL Server. enviar un comando a SQL Server.

Page 45: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

4545

Minimizar los interbloqueos.

Aunque los interbloqueos no se pueden evitar por completo, sí se puede reducir su número. La minimización de los interbloqueos puede aumentar el rendimiento de las transacciones y reducir la sobrecarga del sistema, debido a que: •Se deshacen menos transacciones, al deshacer todo el trabajo que realiza la transacción. •Las aplicaciones vuelven a enviar menos transacciones debido a que se deshicieron cuando se produjo el interbloqueo

Page 46: INTERBLOQUEOS Y NIVELES DE AISLAMIENTO

4646

Para ayudar a minimizar los Para ayudar a minimizar los interbloqueos: interbloqueos:

Obtenga acceso a los objetos en el mismo Obtenga acceso a los objetos en el mismo orden. orden.

Evite la interacción con los usuarios en las Evite la interacción con los usuarios en las transacciones. transacciones.

Mantenga transacciones cortas y en un Mantenga transacciones cortas y en un proceso por lotes. proceso por lotes.

Utilice un nivel bajo de aislamiento. Utilice un nivel bajo de aislamiento. Utilice conexiones enlazadas.Utilice conexiones enlazadas.