Deadlocks en el adaptador de SQL
Información básica que tiene que saber del adaptador la pueden encontrar aquí. Sin embargo un problema que pueden llegar a tener por el proceso concurrente al acceder a la BD son los deadlocks. Depende mucho de como donde lo esten empleando (orquestación, puerto, etc.) y que proceso esta realizando.
Una manera para rastrear los deadlocks y poder ver que esta sucediendo es activar la bandera 1204 en sql y ver el detalle en el trace. Para activar la bandera se necesita correr el siguiente comando en el Query Analyzer:
DBCC TRACEON/TRACEOFF 1204
Lamentablemente este comando lo tiene que estar ejecutando cada vez que reinician la instancia de SQL (servicio MSSQL). Si deseas evitar correr el comando porque estas haciendo pruebas puedes hacer lo siguiente:
- Detener el servicio de MSSQL
- Agregue T1204 a los parámetros de inicio
- Clic botón derecho en el nombre de servidor y a continuación, clic en Propiedades
- En el cuadro de diálogo Propiedades, haga clic en la ficha General y después, haga clic en Parámetros de inicio
- Agregue la bandera
- Inicar el servicio.
Aqui puedes encontrar una lista completa de banderas, aunque no se asegura el comportamiento entre distintas versiones.
Y bueno, con esto puedes empezar a monitorear donde estan sucediendo los deadlocks. Ahora lo mas importante es saber como evitarlos y la manera de hacerlo es asegurarse de que el nivel de aislamiento (ya que hay que incluir transaccionalidad cuando actualizamos "n" registros es importante) esta en el máximo nivel (ademas de requerir que tu BD este bien diseñada). Si se esta empleando un SP que es lo mas seguro, hay que emplear el comando SET TRANSACTION ISOLATION LEVEL READ COMMITTED. Si deseas tener un mayor detalle, puedes consultar este post.
Puede parece un poco complejo, pero parece que en SQL 2005 tiene un mecanismo que ayuda en los escenarios donde existen locks en los registros pero permiten hacer lecturas sin generar los deadlock. Espero poder probar este feature pronto.