Published on

March 10, 2019

Comprendiendo la versionización de filas en SQL Server

Recientemente, recibí una pregunta de un usuario sobre la diferencia en el tamaño de las “filas de datos” entre SQL Server 2012 y SQL Server 2016 y versiones posteriores. El usuario proporcionó un script que creaba e insertaba filas en una tabla de muestra, y luego utilizaba varios comandos DBCC para examinar la página. Al analizar la información proporcionada, pude determinar la causa de la diferencia en el tamaño de las filas.

El primer paso que tomé fue restar el tamaño de la fila más pequeña del tamaño de la fila más grande, lo que resultó en una diferencia de 14 bytes. Esto me llevó inmediatamente a sospechar que la versionización de filas en SQL Server era la razón detrás de esta discrepancia.

La versionización de filas en SQL Server es una característica que permite el bloqueo “optimista”, lo que puede reducir el bloqueo. Sin embargo, hay compensaciones a considerar. Cuando se habilita la versionización de filas, se agrega una sobrecarga de 14 bytes a las filas afectadas. Esta sobrecarga es necesaria para que el proceso de versionización de filas funcione de manera efectiva.

Existen varias razones por las cuales la versionización de filas puede estar habilitada en instancias de SQL Server 2016 y versiones posteriores:

  • Se permite el aislamiento de instantáneas en la base de datos
  • Se habilita el aislamiento de instantáneas de lectura comprometida en la base de datos
  • La base de datos tiene una secundaria legible en un grupo de disponibilidad

Las secundarias legibles en SQL Server se utilizan para descargar cargas de trabajo de lectura y minimizar el bloqueo. Para garantizar la consistencia y evitar el bloqueo, las consultas ejecutadas en las secundarias legibles se escalan automáticamente al aislamiento de instantáneas. Esto requiere la versionización de filas y los 14 bytes adicionales de espacio.

Pero es posible que te preguntes, ¿cómo puede una secundaria legible escribir esos 14 bytes si es de solo lectura? La respuesta es complicada. Según la documentación de Microsoft sobre la planificación de capacidad, cuando configuras el acceso de lectura para réplicas secundarias, las bases de datos primarias agregan una sobrecarga de 14 bytes en filas de datos modificadas, eliminadas o insertadas para almacenar punteros a versiones de filas en las bases de datos secundarias. Esta sobrecarga se traslada a las bases de datos secundarias y, como resultado, pueden ocurrir divisiones de página.

Es importante tener en cuenta que la versionización de filas aumenta el almacenamiento de datos tanto en las bases de datos primarias como en las secundarias. Por lo tanto, es crucial considerar el impacto de habilitar secundarias legibles y versionización de filas en los requisitos generales de almacenamiento de su base de datos.

Si estás interesado en profundizar en los detalles de la versionización de filas y sus implicaciones, te recomiendo consultar la documentación proporcionada por Microsoft sobre la planificación de capacidad para secundarias legibles en un grupo de disponibilidad Always On.

Comprender los conceptos y compensaciones de la versionización de filas en SQL Server puede ayudarte a tomar decisiones informadas cuando se trata de optimizar el rendimiento de tu base de datos y minimizar el bloqueo. Al considerar el impacto de habilitar la versionización de filas y las secundarias legibles, puedes garantizar una experiencia más eficiente y consistente para tus usuarios.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.