sql >> Base de Datos >  >> RDS >> Sqlserver

Diagnóstico de interbloqueos en SQL Server 2005

Según MSDN:

http://msdn.microsoft.com/en-us/library/ms191242.aspx

Cuando las opciones de base de datos LEER INSTANTÁNEA COMPROMETIDA o PERMITIR AISLAMIENTO DE INSTANTÁNEA están activadas, se mantienen copias lógicas (versiones) para todas las modificaciones de datos realizadas en la base de datos. Cada vez que una transacción específica modifica una fila, la instancia del motor de base de datos almacena una versión de la imagen de la fila confirmada anteriormente en tempdb. Cada versión está marcada con el número de secuencia de transacción de la transacción que realizó el cambio. Las versiones de las filas modificadas se encadenan mediante una lista de enlaces. El valor de fila más reciente siempre se almacena en la base de datos actual y se encadena a las filas versionadas almacenadas en tempdb.

Para transacciones de ejecución corta, una versión de una fila modificada puede almacenarse en caché en el grupo de búfer sin escribirse en los archivos de disco de la base de datos tempdb. Si la necesidad de la fila versionada es de corta duración, simplemente se eliminará del grupo de búfer y es posible que no genere necesariamente una sobrecarga de E/S.

Parece haber una pequeña penalización en el rendimiento por la sobrecarga adicional, pero puede ser insignificante. Deberíamos probar para asegurarnos.

Intente configurar esta opción y ELIMINAR todos los NOLOCK de las consultas de código a menos que sea realmente necesario. Los NOLOCK o el uso de métodos globales en el controlador de contexto de la base de datos para combatir los niveles de aislamiento de transacciones de la base de datos son curitas para el problema. NOLOCKS enmascarará problemas fundamentales con nuestra capa de datos y posiblemente conducirá a la selección de datos no confiables, donde la selección automática/actualización de versiones de filas parece ser la solución.

ALTER Database [StackOverflow.Beta] SET READ_COMMITTED_SNAPSHOT ON