Obtener el tamaño de un registro en SQL Server
Recientemente me han preguntado sobre como obtener el tamaño de un registro en una base de datos, aunque no es exacto podemos determinar el valor aproximado de la siguiente manera.
Esto se puede lograr utilizando las vistas del sistema y algunas funciones para calcular el tamaño de los diferentes componentes de una fila, como las columnas de datos fijos, las columnas de datos variables y los gastos generales de la fila.
Aquí tienes un script que te permitirá calcular el tamaño de una fila de una tabla específica:
— Reemplaza ‘tu_esquema’ y ‘tu_tabla’ con el nombre de tu esquema y tabla
DECLARE @Esquema NVARCHAR(128) = ‘tu_esquema’;
DECLARE @Tabla NVARCHAR(128) = ‘tu_tabla’;
— Obtener el ID del objeto de la tabla
DECLARE @ObjectID INT = OBJECT_ID(@Esquema + ‘.’ + @Tabla);
— Calcular el tamaño promedio de una fila
WITH TableInfo AS (
SELECT
t.name AS TableName,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.used_pages) * 8) / NULLIF(SUM(p.rows), 0) AS AverageRowSizeKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.object_id = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.object_id = @ObjectID
GROUP BY
t.name
)
SELECT
TableName,
TotalSpaceKB,
UsedSpaceKB,
AverageRowSizeKB
FROM
TableInfo;
Explicación del Script
- Declaración de Variables:
@Esquema
: Esquema de la tabla.@Tabla
: Nombre de la tabla.@ObjectID
: ID del objeto de la tabla.
- Consulta Principal:
- La consulta principal usa CTE (
TableInfo
) para calcular el tamaño total del espacio, el espacio usado y el tamaño promedio de una fila en kilobytes (KB).
- La consulta principal usa CTE (
- Uniones y Cálculos:
sys.tables
,sys.indexes
,sys.partitions
, ysys.allocation_units
son vistas del sistema que contienen información sobre la estructura y el almacenamiento de las tablas en SQL Server.- La consulta realiza uniones entre estas vistas para obtener el total de páginas asignadas y usadas, y el número de filas en la tabla.
- El tamaño promedio de una fila se calcula dividiendo el espacio usado por el número de filas.
Notas Importantes
- Tamaño Promedio: El script calcula el tamaño promedio de una fila en la tabla. Esto es útil para obtener una estimación general.
- Variabilidad: El tamaño de las filas puede variar si la tabla contiene columnas de longitud variable como
VARCHAR
,NVARCHAR
,VARBINARY
, etc. - Espacio en Páginas: El tamaño se mide en páginas de 8 KB, que es el tamaño de página estándar en SQL Server.
Este script te proporcionará una buena estimación del tamaño de una fila en una tabla específica. Si necesitas un análisis más detallado, podrías considerar examinar las estructuras de datos a nivel de página y fila en SQL Server.