Tengo muchos puntos muertos en mi sistema.
Me gustaría usar Snapshot Isolation para solucionarlos, pero mi DBA tiene reservas al respecto.
Una de sus preocupaciones es que el aislamiento de instantáneas ralentiza las escrituras. Esto se debe a que tiene que escribir en la memoria caché y luego en TempDb (versión de fila) y luego puede volver a la persona que llama.
Una escritura "normal" puede simplemente escribir en el caché y luego hacerse.
¿Es así como funciona el control de versiones de fila? ¿O es más complejo que eso? ¿De alguna manera hace esto en paralelo?
¿O las escrituras son más lentas con el aislamiento de instantáneas?
Respuestas:
No, esto es incorrecto. Implica de alguna manera que las escrituras en presencia de versiones tienen una latencia más alta ya que cada escritura tiene que tocar el disco (para tempdb), lo cual no es cierto. La escritura en tempdb también es una escritura en 'caché'. La única 'espera' ocurre en el momento de COMPROMISO cuando el registro debe ser reforzado. Es cierto que con el control de versiones, tanto el registro de la base de datos como el registro de tempdb deben ser reforzados, pero esto no implica necesariamente una latencia más alta (el IO debe ser paralelo en diferentes rutas de almacenamiento, el tempdb se almacena en una unidad separada de su LDF muy usado, ¿Correcto?). Para obtener una explicación completa, lea Cómo funciona: Presentación de E / S de SQL Server de Bob Dorr . Realmente espero que su DBA entienda esto mejor de lo que lo está transmitiendo aquí.
Como mencioné en su otra publicación: la instantánea no tiene costo para INSERTOS y el costo de actualizaciones y eliminaciones se puede mitigar fácilmente. El uso de recursos de versiones de fila explica las compensaciones. En este momento, probablemente debería estar probando con una carga de trabajo realista, que es la única forma de evaluar adecuadamente el impacto que experimentaría.
fuente
sys.dm_db_file_space_usage
en su servidor de producción? Siversion_store_reserved_page_count
no es cero , ya está utilizando el almacén de versiones .Creo que hay otros problemas en la aplicación si tienes puntos muertos. El aislamiento de instantáneas generalmente ayuda a reducir los bloqueos de espera, pero la raíz de los puntos muertos suele ser diferentes métodos de acceso en la aplicación que deben evitarse al adherirse a un patrón consistente. Las discusiones sobre puntos muertos son complicadas y hay muchos recursos dedicados a ellas.
Su DBA tiene razón al preocuparse por cambiar el nivel de aislamiento a la instantánea, ya que aumenta la carga en el tempDB. Recomiendo ir al aislamiento de instantáneas en general, pero creo que eso es solo una parte de abordar sus puntos muertos. Puede terminar con escrituras sucias, donde una transacción actualiza la fila A y luego B, y otra transacción actualiza la fila B y luego A.
fuente