Parece que estoy obteniendo muchos puntos muertos cuando hago select count (*) en una tabla en particular. Ya he cambiado todos los parámetros requeridos y los he bloqueado solo en la fila.
También he cambiado la base de datos para usar el aislamiento READ_COMMITTED_SNAPSHOT,
sin embargo, parece que usando un recuento selectivo (*) donde column =? en la mesa desencadena puntos muertos o bloqueos en la mesa ..
¿Estoy en lo cierto al decir que el recuento selectivo (*) solo debería estar accediendo a filas intermedias ?, sin embargo, no parece ser así y todavía me encuentro con puntos muertos. La indexación adecuada probablemente ayudaría,
La pregunta es: ¿SQL Server 2008 R2 coloca el bloqueo compartido en la tabla durante el recuento de selección (*) incluso cuando read_committed_snapshot está activado?
Gracias
fuente
WHERE
cláusula, el método en el que estoy pensando no funcionará de todos modos.Respuestas:
Tenga cuidado con READ_COMMITTED_SNAPSHOT: si lo configura, puede causar muchos errores sutiles.
También READ_COMMITTED_SNAPSHOT es el nivel de aislamiento predeterminado, que puede ser anulado por algo. Ejecute DBCC USEROPTIONS para determinar el nivel de aislamiento real con el que se ejecuta su selección.
Establecería explícitamente el NIVEL DE AISLAMIENTO DE TRANSACCIÓN INSTANTÁNEO justo antes de su selección. De esa manera, se asegurará de que su selección nunca se incluya en puntos muertos, y no rompa ningún otro código, como READ_COMMITTED_SNAPSHOT.
fuente
El bloqueo con Snapshot Isolation no cambia. Lo que cambia es que cuando las páginas se cambian debajo de usted, esas páginas se copian en la base de datos tempdb para que pueda leerlas desde la base de datos tempdb en lugar de desde la base de datos normal. (Sí, esta es una versión simplificada de lo que está sucediendo).
Mencionó que no tiene una indexación adecuada, por lo que está haciendo un escaneo de índice agrupado (o un escaneo de tabla si es un montón). Esa es potencialmente una gran cantidad de datos que se moverán a la base de datos tempdb. Si esta consulta es algo que se ejecutará más de una vez, sugeriría agregar el índice a la tabla.
¿Qué nivel de aislamiento está usando su consulta?
fuente