InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
SQL Server 2008
LinQ To SQL - Un ejemplo sencillo
Formatear números en SQL Server
Leer un campo XML de SQL Server 2005 con C#
SQL dinámico en Transact SQL
Cursores en Transact SQL
Triggers en Transact SQL
Replicación con SQL Server y SQL Server Mobile
Funciones en Transact SQL
Procedimientos almacenados en Transact SQL

Afiliados
La Web del programador
MundoProgramacion


 

Bloqueos y nivel de aislamiento en SQL Server 2005.

    Bajo mi punto de vista el punto debil de SQL Server siempre fueron los bloqueos. Conscientes de este problema, Microsoft se ha puesto manos a la obra y parece que en SQL Server 2005 han solucionado el problema.

    Para aquellos que no tengan ni idea de que es un bloqueo diremos que un bloqueo se produce cuando un usuario modifica o lee datos en una transacción.

    Por ejemplo, imaginemos que estamos actualizando una "factura" de estado "pendiente" a estado "pagado", durante el tiempo que dura la transacción (antes de hacer COMMIT o ROLLBACK), si otro usuario quiere ver el estado de la "factura" ... ¿que estado mostramos? ¡los datos están cambiando!. Si devolvemos "pendiente" no sería correcto, ya que el estado ha cambiado a "pagado", pero si devolvemos "pagado" tampoco es correcto, ya que la transacción podría hacer ROLLBACK y abriamos efectuado una lectura fantasma. SQL Server bloquea la fila (en el mejor de los casos) e impide el acceso a los datos afectados por la transacción, como consecuentcia el resto de usuarios concurrentes se quedan "bloqueados", sin posibilidad siquiera de leer los datos. Este es solo uno de los escenarios en los que el "bloqueo" hace acto de presencia, pero hay más. 


[Ampliar Imagen]

 
    Para controlar como afectan los bloqueos a las trasnsacciones, podemos modificar el nivel de aislamiento de las transacciones a través de la instrucción SET TRANSACTION ISOLATION LEVEL. Con esta instrucción controlamos como interpreta la transacción los bloqueos existentes y como genera nuevos bloqueos con sus operaciones de lectura/escritura.

    Su sintaxis general es la siguiente:


SET TRANSACTION ISOLATION LEVEL <opcion>

    Donde <opcion> puede tomar estos valores:

  • READ COMMITTED - La transacción no puede leer datos modificados por otras transacciones. Permite a otras transacciones pueden modificar los datos que se han leido. Esta opción es la predeterminada para SQL Server (incluido 2005).
  • READ UNCOMMITTED - La transacción es capaz de leer los datos modificados por otras transacciones pero que aún no han sido confirmadas (pendientes de COMMIT).
  • REPEATABLE READ - La transacción no puede leer datos modificados por otras transacciones y otras transacciones no pueden modificar los datos que se han leido.
  • SERIALIZABLE - Las instrucciones no pueden leer datos que hayan sido modificados, pero aún no confirmados, por otras transacciones y ninguna otra transacción puede modificar los datos leídos por la transacción actual ni insertar filas nuevas con valores de clave que pudieran estar incluidos en el intervalo de claves hasta que la transacción actual finalice.

    En este escenario, cualquiera de las opciones posibles tiene sus inconvenientes, por lo que la gestión de los bloqueos siempre ha sido un tema dificil de solventar en versiones anteriores de SQL Server. En SQL Server 2005 se ha incluido un nuevo nivel de aislamiento, el nivel SNAPSHOT que asegura la coherencia de los datos para toda la transacción:

  • SNAPSHOT - Activa el versionado de fila. Las instrucciones que se ejecuten en la transacción no verán las modificaciones de datos efectuadas por otras transacciones, en su lugar reciben una "copia coherente" de como estaban los datos al comienzo de la transacción. De este modo actuan otros gestores de bases de datos muy populares, como por ejemplo, ORACLE.

    El nivel de aislamiento SNAPSHOT no está disponible de forma predeterminada. Una base de datos con el nivel de aislamiento SNAPSHOT activado requiere de un mayor espacio de almacenamiento.

    Para activar la opción ALLOW_SNAPSHOT_ISOLATION con la siguiente instrucción:


 ALTER DATABASE MyDatabase
 SET ALLOW_SNAPSHOT_ISOLATION ON

    Con esta operación hemos activado el versionado de filas, pero como dijimos antes, por defecto las transacciones funcionan con el nivel de aislamiento READ COMMITTED, lo que obliga a las conexiones a especificar el nivel de aislamiento explicitamente a través de la sentencia SET TRANSACTION ISOLATION LEVEL SNAPSHOT si quieren acceder al versionado de filas. Para solucionar este problema, podemos cambiar el comportamiento de READ COMMITTED, para que se comporte como SNAPSHOT del siguiente modo:



 ALTER DATABASE MyDatabase
 SET READ_COMMITTED_SNAPSHOT ON

    Al establecer la opción READ_COMMITTED_SNAPSHOT, sólo se permite en la base de datos la conexión que ejecuta el comando ALTER DATABASE. No debe haber ninguna otra conexión abierta en la base de datos hasta que ALTER DATABASE haya finalizado. No es necesario que la base de datos esté en modo de usuario único. 
 

 


 Versión para imprimir  Foros de consulta


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Bloqueos y nivel de aislamiento en SQL Server 2005
Autor: Pedro Herrarte Sánchez
Visitas: 5400 Fecha de publicación: 17/04/2007
Pedro Herrarte, es consultor independiente, ofreciendo sercivios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 602 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/2008
DIOS TE BENDIGA por El You ... [WIN 98/NT/2000/XP] 1 16/08/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
22/10/2005 El lenguaje SQL    forma parte de...Tutorial SQL
16/10/2006 Delegados y eventos    forma parte de...Tutorial C#
22/10/2005 Introducción SQL    forma parte de...Tutorial SQL
19/10/2005 Configurar el IIS para ejecutar aplicaciones ASP.net
27/10/2006 Eventos    forma parte de...Tutorial C#
31/03/2006 Tipos de datos en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL
22/10/2005 Componentes del lenguaje SQL    forma parte de...Tutorial SQL
28/06/2006 Triggers en PL/SQL    forma parte de...Tutorial PL/SQL
07/11/2006 Enumeraciones    forma parte de...Tutorial C#

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]