Sei sulla pagina 1di 12

1.

Introduccin

1.1 Introduccin a Transacciones y Bloqueos


Las transacciones aseguran que varias modificaciones a los datos se
procesan como una unidad; esto se conoce como atomicidad. Por ejemplo,
una transaccin bancaria podra abonar en una cuenta y cargar en otra. Los
dos pasos se deben completar al mismo tiempo. SQL Server acepta que el
proceso de transacciones administre varias transacciones.
Los bloqueos impiden los conflictos de actualizacin. Los usuarios no
pueden leer o modificar los datos que estn en proceso de modificacin por
parte de otros usuarios. Por ejemplo, si desea calcular una funcin de
agregado y asegurarse de que otra transaccin no modifique el conjunto de
datos que se utiliza para calcular la funcin de agregado, puede solicitar
que el sistema establezca bloqueos en los datos. Tenga en cuenta los
siguientes hechos acerca de los bloqueos:
Los bloqueos hacen posible la serializaran de transacciones de forma que
slo una persona a la vez pueda modificar un elemento de datos. Por
ejemplo, en un sistema de reservas de una lnea area los bloqueos
aseguran que slo se asigne un asiento concreto a una persona. SQL
Server establece y ajusta dinmicamente el nivel de bloqueo apropiado
durante una transaccin. Tambin se puede controlar manualmente cmo se
utilizan algunos de los bloqueos. Los bloqueos son necesarios para que las
transacciones simultneas permitan que los usuarios tengan acceso y
actualicen los datos al mismo tiempo. La alta simultaneidad significa que
hay varios usuarios que consiguen un buen tiempo de respuesta con pocos
conflictos. Desde la perspectiva del administrador del sistema, los
problemas principales son el nmero de usuarios, el nmero de
transacciones y el rendimiento. Desde la perspectiva del usuario, la
preocupacin principal es el tiempo de respuesta.

Transaccin

Una transaccin es una secuencia de operaciones realizadas como una sola


unidad lgica de trabajo. Una unidad lgica de trabajo debe exhibir cuatro
propiedades, conocidas como propiedades de atomicidad, coherencia,
aislamiento y durabilidad (ACID), para ser calificada como transaccin.
Atomicidad

Una transaccin debe ser una unidad atmica de trabajo, tanto si se


realizan todas sus modificaciones en los datos, como si no se realiza
ninguna de ellas.
Coherencia

Cuando finaliza, una transaccin debe dejar todos los datos en un


estado coherente. En una base de datos relacional, se deben aplicar
todas las reglas a las modificaciones de la transaccin para mantener
la integridad de todos los datos. Todas las estructuras internas de
datos, como ndices de rbol b o listas doblemente vinculadas, deben
estar correctas al final de la transaccin.
Aislamiento

Las modificaciones realizadas por transacciones simultneas se


deben aislar de las modificaciones llevadas a cabo por otras
transacciones simultneas. Una transaccin reconoce los datos en el
estado en que estaban antes de que otra transaccin simultnea los
modificara o despus de que la segunda transaccin haya concluido,
pero no reconoce un estado intermedio. Esto se conoce como
seriabilidad, ya que deriva en la capacidad de volver a cargar los
datos iniciales y reproducir una serie de transacciones para finalizar
con los datos en el mismo estado en que estaban despus de realizar
las transacciones originales.
Durabilidad

Una vez concluida una transaccin, sus efectos son permanentes en


el sistema. Las modificaciones persisten an en el caso de producirse
un error del sistema.
Especificar y exigir transacciones
Los programadores de SQL son los responsables de iniciar y finalizar las
transacciones en puntos que exijan la coherencia lgica de los datos. El
programador debe definir la secuencia de modificaciones de datos que los
dejan en un estado coherente en relacin con las reglas de negocios de la
organizacin. El programador incluye estas instrucciones de modificacin en
una sola transaccin de forma que SQL Server Database Engine (Motor de
base de datos de SQL Server) puede hacer cumplir la integridad fsica de la
misma.
Es responsabilidad de un sistema de base de datos corporativo, como una
instancia de Motor de base de datos, proporcionar los mecanismos que
aseguren la integridad fsica de cada transaccin. Motor de base de datos
proporciona:

Servicios de bloqueo que preservan el aislamiento de la transaccin.

Servicios de registro que aseguran la durabilidad de la transaccin.


Aunque se produzca un error en el hardware del servidor, el sistema
operativo o la instancia de Motor de base de datos, la instancia utiliza
registros de transacciones, al reiniciar, para revertir automticamente
las transacciones incompletas al punto en que se produjo el error del
sistema.

Caractersticas de administracin de transacciones que exigen la


atomicidad y coherencia de la transaccin. Una vez iniciada una
transaccin, debe concluirse correctamente; en caso contrario, la
instancia de Motor de base de datos deshar todas las modificaciones
de datos realizadas desde que se inici la transaccin.

1.1.1 Administracin transacciones


Una transaccin es un conjunto de operaciones Transact SQL que se
ejecutan como un nico bloque, es decir, si falla una operacin Transact
SQL fallan todas. Si una transaccin tiene xito, todas las modificaciones de
los datos realizadas durante la transaccin se confirman y se convierten en
una parte permanente de la base de datos. Si una transaccin encuentra
errores y debe cancelarse o revertirse, se borran todas las modificaciones
de los datos.

El ejemplo clsico de transaccin es una transferencia bancaria, en la que


quitamos saldo a una cuenta y lo aadimos en otra. Si no somo capaces de
abonar el dinero en la cuenta de destino, no debemos quitarlo de la cuenta
de origen.
SQL Server funciona por defecto con Transacciones de confirmacin
automtica, es decir, cada instruccin individual es una transaccin y se
confirma automticamente.
Sobre el ejemplo anterior de la transferencia bancaria, un script debera
realizar algo parecido a los siguiente:
DECLARE @importe DECIMAL(18,2),
@CuentaOrigen VARCHAR(12),
@CuentaDestino VARCHAR(12)
/* Asignamos el importe de la transferencia
* y las cuentas de origen y destino
*/
SET @importe = 50
SET @CuentaOrigen = '200700000001'
SET @CuentaDestino = '200700000002'
la clave es el BEGIN TRAN ... COMMIT o ROLLBACK END TRAN
/* Descontamos el importe de la cuenta origen */
UPDATE CUENTAS
SET SALDO = SALDO - @importe
WHERE NUMCUENTA = @CuentaOrigen
/* Registramos el movimiento */
INSERT INTO MOVIMIENTOS
(IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE,
FXMOVIMIENTO)
SELECT
IDCUENTA, SALDO + @importe, SALDO, @importe, getdate()
FROM CUENTAS
WHERE NUMCUENTA = @CuentaOrigen
/* Incrementamos el importe de la cuenta destino */
UPDATE CUENTAS
SET SALDO = SALDO + @importe
WHERE NUMCUENTA = @CuentaDestino
/* Registramos el movimiento */
INSERT INTO MOVIMIENTOS
(IDCUENTA, SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE,
FXMOVIMIENTO)
SELECT
IDCUENTA, SALDO - @importe, SALDO, @importe, getdate()
FROM CUENTAS
WHERE NUMCUENTA = @CuentaDestino..

1.1.2 bloqueos
En Microsoft SQL SERVER los bloqueos se realizan a nivel de pginas de 2K,
a diferencia de otros gestores de datos que lo realizan a nivel de registro.

Esta gestin de bloqueos por pginas es ms ptimo para consultas ya que


lleva menos sobrecarga de punteros que si lo hiciramos por registro, pero
puede llegar a ser menos ptimo en inserciones masivas de registros en una
tabla ( factor que la nueva versin de Microsoft SQL SERVER 6.5 con la
nueva caracterstica de Insert Row-Level Locking -inserciones con bloqueos
a nivel de registro- ha sido optimizado).
En general los bloqueos son gestionados por Microsoft SQL SERVER de
forma automatizada sin necesidad de gestin manual, pero existen dos
factores los cuales necesitan una intervencin manual, estos son en
trminos informticos: BLOCKING y DEADLOCKS.
1.

BLOCKING.- Con este trmino se conoce la accin de espera de un


proceso o varios por culpa de un bloqueo existente por otro proceso sobre
los mismos datos. La solucin para evitar mnimamente este tipo de
bloqueo es optimizar el diseo de las tablas, los ndices utilizados, la
implementacin de la sentencia sql y de la configuracin hardware.

2.

DEADLOCK.- Con este trmino se conoce a el suceso de que dos


procesos estn cada uno bloqueando un objeto y a la vez ambos necesitan
tambin acceder a el objeto bloqueado por el otro. Esto crea un nudo, para
lo que Microsoft SQL SERVER dependiendo del tiempo de espera en el
procesador de los procesos, realiza un roll back y lanza el mensaje de error
1205 en uno de los procesos, permitiendo al otro continuar.

1.2 Conceptos sobre la concurrencia


El control de transacciones concurrentes en una base de datos brinda un
eficiente desempeo del Sistema de Base de Datos, puesto que permite
controlar la ejecucin de transacciones que operan en paralelo, accesando a
informacin compartida y, por lo tanto, interfiriendo potencialmente unas
con otras.
El hecho de reservar un asiento en una avin mediante un sistema basado
en aplicaciones web, cuando decenas de personas en el mundo pueden
reservarlo tambin, nos da una idea de lo importante y crucial que es el
control de concurrencia en un sistema de base de datos a mediana o gran
escala.
Otro ejemplo en el que podemos observar la incidencia del control de
concurrencia en el siguiente: en una Base de Datos bancaria podra ocurrir
que se paguen dos cheques en forma simultnea sobre una cuenta que no
tiene saldo suficiente para cubrirlos en su totalidad, esto es posible evitarlo
si se tiene un control de concurrencia.
1.3 Control de concurrencia con metodos de bloqueos
El termino concurrencia se refiere al hecho de que los DBMS (SISTEMAS DE
ADMINISTRACION DEBD) permiten que muchas transacciones puedan
accesar a unamisma base de datos a la vez.En un sistema de estos se
necesitan algn tipo de mecanismos de control de concurrencia para
asegurar que las transacciones concurrentes no interfieran entre si.En
sistemas multiusuario, es necesario un mecanismo para controlar la
concurrencia. Se pueden producir inconsistencias importantes derivadas del
accesoconcurrente, como por ejemplo, el problema de la operacin perdida.

Mtodos de control de concurrencia Protocolos basados en


tcnicas de bloqueo
Cabe destacar antes de comenzar el estudio de los protocolos basados en
bloqueos que son los ms utilizados por los SGBD comerciales. Los dems
tienen unalcance ms terico que prctico.Un bloqueo es una variable
asociada a un elemento de datos de la base de datos, usada para restringir
las operaciones que se pueden aplicar sobre l.Existen varios tipos de
bloqueo: binarios (de propiedades limitadas), compartidos, exclusivos
(usados en la prctica), y bloqueos de certificacin.Las operaciones sobre
bloqueos se deben implementar como secciones crticas, es decir, de forma
indivisible; el SGBD no deber alternar sus instrucciones conotras.
Bloqueos binarios
Se caracterizan por tener dos valores posibles, bloqueados y
desbloqueados. Cada elemento de la base de datos tiene un bloqueo
distinto. El bloqueo seala si unatransaccin est operando sobre el
elemento o est libre para que se pueda operar con l. De esta manera se
impide que dos o ms transacciones estn operandosobre un mismo
elemento al mismo tiempo.La implementacin de un bloqueo binario es
simple; basta con un vector de la siguiente forma: donde el booleano es en
s el indicador del bloqueo.
Bloqueos de lectura y escritura
Son una ampliacin de los bloqueos binarios. Tenemos que el bloqueo puede
tener tres posibles posiciones: libre, bloqueado para lectura, y bloqueado
paraescritura. De esta forma, ms de una transaccin puede tener un
mismo elemento de datos bloqueado para lectura, pero slo una para
escritura. Si una transaccinquiere escribir en ese elemento, habr de
esperar a que el bloqueo quede libre (cualquiera que sea el tipo de
bloqueo), y a continuacin, bloquearlo para escritura. Siquiere leer, slo
tendr que esperar si el elemento est bloqueado para escritura. Se dice
por tanto, que el bloqueo de lectura es compartido y el de
escrituraexclusivo. Tendremos por tanto tres operaciones;
bloquear_escritura(X), bloquear_lectura(X) y desbloquear(X).
Problemas del bloqueo en dos faces
interbloqueo y espera indefinidaEl interbloqueo se produce cuando cada
transaccin T en un conjunto de dos o ms transacciones est esperando a
algn elemento que est bloqueado por algunaotra transaccin T' de dicho
conjunto. En este estado, cada transaccin est parada en espera a que otra
transaccin libere el recurso. Las condiciones para que seproduzca en
interbloqueo son las siguientes:1.
Exclucion mutua.
Cada elemento est bloqueado por una transaccin, o est libre.2.
Retencion y esperar:
Una transaccin que ya tiene elementos bloqueados puede solicitar un
elemento adicional, y esperar que se le asigne, sin devolver previamente
ninguno de los anteriores.3.
No a propiacion
Slo puede liberar un elemento la transaccin que lo tiene asignado; no se
lo puede quitar otra transaccin que tenga mayor prioridad, ni elSGBD.4.
Espera circular:
una cadena circular, compuesta por dos transacciones o ms, y otros tantos
elementos intercalados, de manera que cada proceso estesperando que se

le asigne un elemento, el cual, a su vez, est asignado al siguiente proceso


de la cadena.5.
bloqueo mutuo o de adlock:
Un proceso se encuentra en estado de deadlock si esta esperando por un
suceso que no ocurrir nunca. Se puede producir en la comunicacin de
procesos y mas frecuentemente en la gestin de recursos.
1.3.1 Granularidad y jerarquas de bloqueo
El Microsoft SQL Server Data base Engine (Motor de base de datos de SQL
Server) admite bloqueo multigranular. Esta funcin permite que una
transaccin bloquee diferentes tipos de recursos. Para minimizar el costo del
bloqueo, Motor de base de datos bloquea automticamente los recursos en
el nivel apropiado para la tarea. Los bloqueos de menor granularidad, como
es el caso de las filas, aumentan la simultaneidad. Sin embargo, se produce
una sobrecarga mayor porque cuantas ms filas se bloquean, ms bloqueos
se deben mantener. Los bloqueos realizados en una granularidad alta, por
ejemplo en tablas, reducen la simultaneidad porque el bloqueo de toda una
tabla restringe el acceso de otras transacciones a cualquier parte de la
tabla. Sin embargo, produce una sobrecarga menor debido a que se
mantienen menos bloqueos.
El Motor de base de datos a menudo se ve en la obligacin de adquirir
bloqueos en distintos niveles de granularidad para brindar una proteccin
completa a un recurso. Este grupo de bloqueos en distintos niveles de
granularidad se denomina jerarqua de bloqueos. Por ejemplo, para brindar
proteccin completa a la lectura de un ndice, probablemente sea necesario
que una instancia del Motor de base de datos adquiera bloqueos
compartidos en filas y bloqueos con intencin compartida en las pginas y
la tabla.
En la siguiente tabla se muestran los recursos que el Motor de base de
datos puede bloquear.
Recurso
Descripcin
Identificador de fila que se utiliza para bloquear una sola fila
RID
de un montn.
Bloqueo de fila dentro de un ndice que se utiliza para
KEY
proteger intervalos de claves en transacciones serializables.
Pgina de 8 kilobytes (KB) de una base de datos, como
PAGE
pginas de datos o de ndices.
Grupo contiguo de ocho pginas, como pginas de datos o
EXTENT
de ndices.
Montn o rbol b. Bloqueo que protege un rbol B (ndice) o
HoBT
las pginas de datos del montn en una tabla que no posee
un ndice agrupado.
TABLE
Tabla completa, con todos los datos e ndices.
FILE
Archivos de la base de datos.
APPLICATION
Recurso especificado por la aplicacin.
METADATA
Bloqueos de metadatos.
ALLOCATION_U
Unidad de asignacin.
NIT
Base de datos completa.
DATABASE
1.3.2 TIPOS DE BLOQUEOS EN MICROSOFT SQL SERVER

Cualquier transaccin SQL que lea o modifique datos (SELECT, UPDATE,


DELETE, INSERT, CREATE INDEX, etc.) generar algn tipo de bloqueo. Estos
tipos pueden ser:
1.

BLOQUEOS DE PAGINAS (2k).

Siempre Microsoft SQL Server intentar realizar un bloqueo a nivel de


pgina (2k) que un bloqueo a nivel de tabla, ya que esto generar un menor
nmero de procesos en espera. Hay 3 tipos de bloqueos de pgina:
1.
Compartido.- Este bloqueo se da cuando realizamos una sentencia
SELECT sobre una tabla y solo permite ejecutar otros SELECT sobre la
misma pgina bloqueada; por lo que no podrs ejecutar una sentencia
modificadora de datos como el INSERT. Este tipo de bloqueos es liberado en
el momento que la sentencia es ejecutada.
2.
Exclusivo.- Este bloqueo se produce al intentar realizar una
modificacin de datos, no permitiendo ejecutar cualquier otra sentencia
sobre esta pgina hasta que la sentencia se haya ejecutado.
3.
Actualizacin.- Este bloqueo se produce cuando ejecutas una
sentencia UPDATE o DELETE sobre una tabla, transformndose en un
bloqueo exclusivo de pgina en el momento que modifica los datos.
2.

BLOQUEOS A NIVEL DE TABLA.

Un bloqueo a nivel de tabla bloquea la tabla y los ndices. Microsoft SQL


SERVER siempre intenta en primer momento realizar bloqueos a nivel de
pgina pero llega un momento que la gestin no es optima a este nivel,
cuando se llega a ms de 200 bloqueos de pginas (por defecto), y se
escala el bloqueo a nivel de tabla automticamente. Claro est que con este
tipo de bloqueo no se podr ejecutar ningn tipo de sentencia sobre la tabla
hasta que no sea liberada. Hay dos tipos:
1. Compartido: Lo mismo que a nivel de pgina, solo que con la tabla entera
bloqueada.
2. Exclusivo: Lo mismo que a nivel de pgina, solo que con la tabla entera
bloqueada.
3. De Intencin.- Un bloqueo de tipo intencionado ocurre cuando SQL tiene
la intencin de adquirir un bloqueo exclusivo o compartido de una tabla. De
esta manera SQL Server se guarda de que no se pueda realizar sobre esta
tabla otro bloqueo por otro proceso.

1.3.4 interbloqueos
Un interbloqueo se produce cuando dos o ms tareas se bloquean entre s
permanentemente teniendo cada tarea un bloqueo en un recurso que las
otras tareas intentan bloquear. En el siguiente grfico se presenta una vista
de alto nivel de un estado de interbloqueo donde:

La tarea T1 tiene un bloqueo en el recurso R1 (indicado por la flecha


de R1 a T1) y ha solicitado un bloqueo en el recurso R2 (indicado por
la flecha de T1 a R2).

La tarea T2 tiene un bloqueo en el recurso R2 (indicado por la flecha


de R2 a T2) y ha solicitado un bloqueo en el recurso R1 (indicado por
la flecha de T2 a R1).

Dado que ninguna tarea puede continuar hasta que un recurso est
disponible y ningn recurso puede liberarse hasta que contine una
tarea, existe un estado de interbloqueo.

El SQL Server Database Engine (Motor de base de datos de SQL Server)


detecta automticamente los ciclos de interbloqueo en SQL Server. El Motor
de base de datos elige una de las sesiones como sujeto del interbloqueo y la
transaccin actual finaliza con un error para romper el interbloqueo.
Recursos que pueden causar interbloqueos
Cada sesin de usuario puede tener una o ms tareas en ejecucin y cada
tarea puede adquirir o esperar para adquirir una serie de recursos. Los
siguientes tipos de recursos pueden causar bloqueos que podran dar como
resultado un interbloqueo.

Bloqueos. Esperar para adquirir bloqueos en recursos, como objetos,


pginas, filas, metadatos y aplicaciones, puede causar un
interbloqueo. Por ejemplo, la transaccin T1 tiene un bloqueo
compartido (S) en la fila f1 y est esperando para obtener un bloqueo
exclusivo (X) en f2. La transaccin T2 tiene un bloqueo compartido (S)
en f2 y est esperando para obtener un bloqueo exclusivo (X) en la
fila f1. Esta situacin tiene como resultado un ciclo de bloqueo en el
que T1 y T2 esperan que la otra transaccin libere los recursos
bloqueados.

Subprocesos de trabajo. Una tarea en cola que espera un subproceso


de trabajo disponible puede causar un interbloqueo. Si la tarea en
cola es propietaria de recursos que estn bloqueando todos los
subprocesos de trabajo, se generar un interbloqueo. Por ejemplo, la
sesin S1 inicia una transaccin y adquiere un bloqueo compartido (S)
en la fila f1 y, a continuacin, se suspende. Las sesiones activas que
se ejecutan en todos los subprocesos de trabajo disponibles intentan
adquirir bloqueos exclusivos (X) en la fila f1. Dado que la sesin S1 no
puede adquirir un subproceso de trabajo, no puede confirmar la
transaccin y liberar el bloqueo de la fila f1. Esta situacin tiene como
resultado un interbloqueo.

Memoria. Cuando hay solicitudes simultneas esperando concesiones


de memoria que no se pueden satisfacer con la memoria disponible,
puede producirse un interbloqueo. Por ejemplo, dos consultas
simultneas, C1 y C2, se ejecutan como funciones definidas por el
usuario que adquieren 10 MB y 20 MB de memoria respectivamente.
Si cada consulta necesita 30 MB y el total de memoria disponible es
20 MB, C1 y C2 tienen que esperar a que la otra consulta libere
memoria, y esta situacin tiene como resultado un interbloqueo.

Recursos relacionados con la ejecucin de consultas en paralelo. Los


subprocesos de coordinador, productor o consumidor asociados a un
puerto de intercambio pueden bloquearse entre s y provocar un
interbloqueo si incluyen al menos otro proceso que no forma parte de
la consulta en paralelo. Adems, cuando se inicia la ejecucin de una
consulta en paralelo, SQL Server determina el grado de paralelismo, o
el nmero de subprocesos de trabajo, en funcin de la carga de
trabajo actual. Si la carga de trabajo del sistema cambia de forma
inesperada, por ejemplo, si se empiezan a ejecutar nuevas consultas
en el servidor o el sistema se queda sin subprocesos de trabajo, se
puede producir un interbloqueo.

Conjuntos de resultados activos mltiples (MARS). Estos recursos se


utilizan para controlar la intercalacin de varias solicitudes activas en
MARS (vea Entorno de ejecucin de lotes y MARS).
o

Recurso de usuario. Cuando un subproceso espera un recurso


que potencialmente est controlado por una aplicacin de
usuario, se considera que el recurso es externo o de usuario y
se trata como un bloqueo.

Exclusin mutua de sesin. Las tareas que se ejecutan en una


sesin se intercalan, lo que significa que slo puede ejecutarse
una tarea en la sesin en un momento dado. Antes de que se
pueda ejecutar la tarea, debe tener acceso exclusivo a la
exclusin mutua de sesin.

Exclusin mutua de transaccin. Todas las tareas que se


ejecutan en una transaccin se intercalan, lo que significa que
slo puede ejecutarse una tarea en la transaccin en un
momento dado. Antes de que se pueda ejecutar la tarea, debe
tener acceso exclusivo a la exclusin mutua de transaccin.

Para que una tarea se ejecute en MARS, debe adquirir la exclusin


mutua de sesin. Si la tarea se ejecuta en una transaccin, debe
adquirir la exclusin mutua de transaccin. Esto garantiza que slo
una tarea est activa en un momento dado en una sesin
determinada y en una transaccin concreta. Una vez adquiridas las
exclusiones mutuas necesarias, se puede ejecutar la tarea. Cuando
finaliza la tarea, o se produce en medio de la solicitud, primero
liberar la exclusin mutua de transaccin seguida de la exclusin
mutua de sesin en el orden inverso a la adquisicin. Sin embargo,
pueden producirse interbloqueos con estos recursos. En el ejemplo de

cdigo siguiente hay dos tareas, la solicitud de usuario U1 y la


solicitud de usuario U2, que se ejecutan en la misma sesin.
U1: Rs1=Command1.Execute("insert sometable EXEC
usp_someproc");U2: Rs2=Command2.Execute("select colA from
sometable");
El procedimiento almacenado que se ejecuta a partir de la solicitud
de usuario U1 ha adquirido la exclusin mutua de sesin. Si el
procedimiento almacenado tarda mucho tiempo en ejecutarse, el
Motor de base de datos considerar que el procedimiento
almacenado est esperando la intervencin del usuario. La solicitud
de usuario U2 est esperando la exclusin mutua de sesin mientras
que el usuario est esperando el conjunto de resultados de U2, y U1
est esperando un recurso de usuario. ste es un estado de
interbloqueo que se ilustra de forma lgica como:
Deteccin de interbloqueos
Todos los recursos enumerados en la seccin anterior participan en el
esquema de deteccin de interbloqueos del Motor de base de datos. La
deteccin de interbloqueos la realiza un subproceso de supervisin de
bloqueos que peridicamente inicia una bsqueda por todas las tareas de
una instancia del Motor de base de datos. En los siguientes puntos se
describe el proceso de bsqueda:

El intervalo predeterminado es de 5 segundos.

Si el subproceso de supervisin de bloqueos encuentra interbloqueos,


el intervalo de deteccin de interbloqueos pasar de 5 segundos a
hasta slo 100 milisegundos, en funcin de la frecuencia de los
interbloqueos.

Si el subproceso de supervisin de bloqueos deja de encontrar


interbloqueos, el Motor de base de datos aumentar los intervalos
entre las bsquedas a 5 segundos.

Si se acaba de detectar un interbloqueo, se considera que los


siguientes subprocesos que deben esperar un bloqueo entran en el
ciclo de interbloqueo. La primera pareja de esperas de bloqueo
despus de que se haya detectado un interbloqueo desencadenar
inmediatamente una bsqueda de interbloqueos, en vez de esperar al
siguiente intervalo de deteccin de interbloqueos. Por ejemplo, si el
intervalo actual es de 5 segundos y se acaba de detectar un
interbloqueo, la siguiente espera de bloqueo activar
inmediatamente el detector de interbloqueos. Si esta espera de
bloqueo forma parte de un interbloqueo, se detectar en seguida en
lugar de durante la siguiente bsqueda de interbloqueos.

El Motor de base de datos slo suele realizar detecciones de interbloqueos


peridicas. Dado que el nmero de interbloqueos que se encuentran en el

sistema suele ser pequeo, si se detectan peridicamente, el sistema no se


ve sobrecargado por este tipo de detecciones.
Cuando el monitor de bloqueos inicia una bsqueda de interbloqueos para
un subproceso determinado, identifica el recurso que est esperando.
Despus, el monitor de bloqueos encuentra al propietario o a los
propietarios de ese recurso y contina recursivamente la bsqueda de
interbloqueos para esos subprocesos hasta que encuentra un ciclo. Un ciclo
que se identifica de esta manera forma un interbloqueo.
Una vez detectado un interbloqueo, el Motor de base de datos finaliza un
interbloqueo eligiendo uno de los subprocesos como sujeto del interbloqueo.
El Motor de base de datos finaliza el lote actual que se est ejecutando para
el subproceso, revierte la transaccin del sujeto del interbloqueo y devuelve
un error 1205 a la aplicacin. Revertir la transaccin para el sujeto del
interbloqueo libera todos los bloqueos que tiene la transaccin. Esto permite
que las transacciones de otros subprocesos se desbloqueen y continen. El
error 1205 del sujeto del interbloqueo registra informacin sobre los
subprocesos y recursos implicados en un interbloqueo en el registro de
errores.
De forma predeterminada, el Motor de base de datos elige como sujeto del
interbloqueo la sesin que ejecuta la transaccin cuya reversin resulta
menos costosa. Como alternativa, un usuario puede especificar la prioridad
de las sesiones en una situacin de interbloqueo mediante la instruccin
SET DEADLOCK_PRIORITY. DEADLOCK_PRIORITY puede establecerse como
LOW, NORMAL o HIGH; tambin puede establecerse como un valor entero
en el intervalo de -10 a 10. El valor predeterminado de la prioridad de
interbloqueo es NORMAL. Si dos sesiones tienen distintas prioridades de
interbloqueo, la sesin con la prioridad menor se elige como el sujeto del
interbloqueo. Si ambas sesiones tienen la misma prioridad de interbloqueo,
se elige la sesin con la transaccin cuya reversin resulta menos costosa.
Si las sesiones implicadas en el ciclo de interbloqueo tienen la misma
prioridad de interbloqueo y el mismo costo, se elige un sujeto de forma
aleatoria.
Cuando se trabaja con CLR, el monitor de interbloqueos detecta
automticamente el interbloqueo de los recursos de sincronizacin
(monitores, bloqueo de lectura y escritura, y combinacin de subprocesos) a
los que se ha tenido acceso dentro de los procedimientos administrados. Si
embargo, el interbloqueo se resuelve iniciando una excepcin en el
procedimiento que se seleccion como sujeto del interbloqueo. Es
importante comprender que la excepcin no libera automticamente los
recursos que posee actualmente el sujeto; los recursos se tienen que liberar
de forma explcita. De forma coherente con el comportamiento de la
excepcin, la excepcin utilizada para identificar un sujeto del interbloqueo
se puede interceptar y descartar.
Herramientas de informacin de interbloqueos
Para ver la informacin de interbloqueos, Motor de base de datos
proporciona herramientas de supervisin en la forma de dos marcas de
traza, y el evento deadlock graph del SQL Server Profiler.
Marcas de traza 1204 y 1222
Cuando se produce el interbloqueo, las marcas de traza 1204 y 1222
devuelven la informacin que se ha capturado en el registro de errores de
SQL Server 2005. La marca de traza 1204 informa sobre el interbloqueo con
un formato que especifica cada nodo implicado en el mismo. La marca de

traza 1222 aplica formato a la informacin de interbloqueo, primero por


procesos y luego por recursos. Es posible habilitar ambas marcas de traza
para obtener dos representaciones del mismo evento de interbloqueo.
Adems de definir las propiedades de las marcas de traza 1204 y 1222, en
la siguiente tabla se muestran las similitudes y las diferencias.

Potrebbero piacerti anche