Compartir a través de


Datos de desbordamiento de fila superiores a 8 KB

Una tabla puede contener como máximo 8.060 bytes por fila. En SQL Server 2008, esta restricción es menos estricta para las tablas que contienen columnas varchar, nvarchar, varbinary, sql_variant o de tipo definido por el usuario CRL. La longitud de cada una de estas columnas debe respetar el límite de 8.000 bytes, aunque la combinación de sus anchos puede ser superior al límite de 8.060 bytes. Esto se aplica a las columnas varchar, nvarchar, varbinary, sql_variant o de tipo definido por el usuario CLR cuando se crean o modifican, así como cuando se actualizan o insertan datos.

[!NOTA]

Esta restricción no se aplica a las columnas varchar(max), nvarchar(max), varbinary(max), ntext, text, image o xml. Para obtener más información acerca del almacenamiento de estas columnas, vea Usar tipos de datos de valores grandes, Usar datos text e image y Usar datos XML.

Consideraciones acerca del desbordamiento de fila

Cuando se combinan columnas varchar, nvarchar, varbinary, sql_variant o de tipo definido por el usuario CLR que superan los 8.060 bytes por fila, tenga en cuenta lo siguiente:

  • Si se supera el límite de tamaño de fila establecido en 8.060 bytes, el rendimiento puede verse afectado porque el SQL Server todavía mantiene el límite de 8 KB por página. Cuando una combinación de columnas varchar, nvarchar, varbinary, sql_variant o de tipo definido por el usuario CLR supera este límite, el SQL Server Database Engine (Motor de base de datos de SQL Server) mueve la columna del registro de ancho superior a otra página de la unidad de asignación ROW_OVERFLOW_DATA mientras mantiene un puntero de 24 bytes en la página original. El movimiento de registros grandes a otra página tiene lugar de forma dinámica a medida que la longitud de los registros aumenta en función de las operaciones de actualización. Las operaciones de actualización que reducen la longitud de los registros pueden hacer que los registros se vuelvan a colocar en la página original de la unidad de asignación IN_ROW_DATA. Además, consultar y realizar otras operaciones de selección, como puedan ser ordenaciones o combinaciones en registros grandes que contienen datos de desbordamiento de fila, ralentiza el tiempo de procesamiento, ya que estos registros se procesan sincrónicamente en lugar de asincrónicamente.

    Por lo tanto, al diseñar una tabla con varias columnas varchar, nvarchar, varbinary, sql_variant o de tipo definido por el usuario CLR, tengan en cuenta el porcentaje de filas que tienen posibilidades de desbordarse y la frecuencia con la que se consultarán estos datos de desbordamiento. Si es muy probable que se realicen consultas con frecuencia en muchas filas de los datos de desbordamiento de fila, considere la posibilidad de normalizar la tabla para que algunas columnas se muevan a otra tabla. Más adelante, puede realizar la consulta en una operación JOIN asincrónica.

  • La longitud de las columnas individuales debe estar comprendida en el límite de 8.000 bytes para las columnas varchar, nvarchar, varbinary, sql_variant y de tipo definido por el usuario CLR. Sólo la combinación de sus longitudes puede superar el límite de fila de 8.060 bytes de una tabla.

  • La suma de otras columnas de tipos de datos, incluidos los datos char y nchar, debe estar comprendida en el límite de fila de 8.060 bytes. Los datos de objeto grande no están sometidos al límite de fila de 8.060 bytes.

  • La clave de índice de un índice clúster no puede contener columnas varchar que tengan datos existentes en la unidad de asignación ROW_OVERFLOW_DATA. Si un índice clúster se crea en una columna varchar y los datos existentes se encuentran en la unidad de asignación IN_ROW_DATA, las acciones de inserción o actualización siguientes en la columna que provocarán el desbordamiento de los datos de la fila no serán correctas. Para obtener más información acerca de las unidades de asignación, vea Organización de tablas e índices.

  • Puede incluir columnas que contengan datos de desbordamiento de fila como columnas de clave o sin clave de un índice no clúster.

  • El tamaño máximo del registro para las tablas que usan columnas dispersas es de 8.018 bytes. Cuando los datos convertidos más los datos de registro existentes superan los 8.018 bytes, se devuelve el error MSSQLSERVER ERROR 576. Cuando las columnas pasan de dispersas a no dispersas y viceversa, Database Engine (Motor de base de datos) mantiene una copia de los datos del registro actuales. Esto duplica temporalmente el almacenamiento necesario para el registro.

  • Para obtener información acerca de las tablas o los índices que pueden contener datos de desbordamiento de fila, use la función de administración dinámica sys.dm_db_index_physical_stats.