Saltar al contenido

¿Qué riesgos existen si habilitamos la instantánea de lectura confirmada en el servidor sql?

este problema se puede resolver de diferentes formas, pero en este caso te enseñamos la solución más completa en nuestra opinión.

Solución:

Resumen

  1. Si tiene problemas de bloqueo, entonces tiene un problema con su código: no es el motor de la base de datos
  2. No es una bala mágica
  3. Puedes agregar más problemas

Carga

También aumentará la carga en su tempdb y CPU. Ver también:

  • “Impacto en el rendimiento: el costo potencial de Read_Committed_Snapshot” (Linchi Shea)

La seguridad

Lo más importante, aislamientos instantáneos no son seguros en muchos casos por defecto. Lea “Aislamiento de instantáneas” (Wikipedia) para obtener más información sobre anomalías de sesgo de escritura. La siguiente sección es “Cómo hacer que el aislamiento de instantáneas sea serializable” para evitar esto.

En general, por lo tanto, el aislamiento de instantáneas pone parte del problema de mantener restricciones no triviales en el usuario, quien puede no apreciar ni las trampas potenciales ni las posibles soluciones. La ventaja de esta transferencia es un mejor rendimiento.

Ver también:

  • “Los peligros potenciales del nivel de aislamiento de instantáneas confirmadas de lectura” (JimMcLeod, cuestionado en comentarios de Alex Kuznetsov)
  • ¡En punto muerto!: Explicación de “leer instantánea confirmada” (Nick Berardi)
  • Serializable frente a nivel de aislamiento de instantáneas, el problema de la canica (Craig Freedman)
  • Las lecturas que involucran UDF bajo READ_COMMITTED_SNAPSHOT pueden parecer inconsistentes (Alex Kuznetsov)

Sé que este es un hilo antiguo, pero diría que en gran medida el aislamiento de instantáneas es una bala mágica. eliminará todos de su bloqueo entre lectores y escritores. Sin embargo, será no evitar que los escritores bloqueen a otros escritores. No hay manera de evitar eso.

En mi experiencia, la carga adicional en TEMPDB es insignificante y los beneficios del control de versiones de filas para reducir los lectores bloqueados son enormes.

Como referencia, el control de versiones de filas (aislamiento de instantáneas) es el método que Oracle ha utilizado durante décadas para lograr el aislamiento sin bloquear los lectores y las bases de datos de Oracle en las que he trabajado durante casi 20 años de experiencia. lejos menos problemas de bloqueo que SQL Server. Sin embargo, la mayoría de los desarrolladores de SQL dudan en usar el aislamiento de instantáneas porque solo han probado su código en bases de datos que usan la configuración predeterminada.

Un par de puntos adicionales para agregar a las otras respuestas:

SET ALLOW_SNAPSHOT_ISOLATION ON solo habilita el aislamiento de instantáneas en una base de datos. Para aprovecharlo tienes que recodificar y SET TRANSACTION ISOLATION LEVEL SNAPSHOT para las transacciones a las que desea que se aplique. Será necesario cambiar el código de llamada para manejar los errores de conflicto de actualización.

Después SET READ_COMMITTED_SNAPSHOT ON, las declaraciones en lectura confirmada usan el control de versiones de filas. Tenga en cuenta que esto es nivel de declaración versionado de filas para solo lee. Para las actualizaciones, se recupera la fila “real” y se aplican bloqueos de actualización. Consulte la sección Resumen de comportamiento en Comprensión de los niveles de aislamiento basados ​​en el control de versiones de filas.

Cualquiera de las rutas, sin pruebas exhaustivas, es probable que introduzca un conjunto completamente nuevo de problemas en el sistema.

Si te animas, eres capaz de dejar un tutorial acerca de qué te ha gustado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *