Published on

August 10, 2012

Comprendiendo las páginas de datos de SQL Server

En SQL Server, los datos se almacenan en páginas de 8 KB, que sirven como la unidad básica de E/S para las operaciones de SQL Server. Hay diferentes tipos de páginas, como páginas de datos, páginas GAM (Global Allocation Map) y páginas SGAM (Shared Global Allocation Map). En esta publicación, nos centraremos en comprender la estructura de las páginas de datos.

Una página de datos se utiliza para almacenar registros de datos en SQL Server. Los registros de datos pueden ser filas en un montón (heap) o en el nivel de hoja de un índice agrupado. Una página de datos consta de tres secciones: el encabezado de la página, los datos reales y la matriz de desplazamiento de filas. Veamos más de cerca la estructura interna de una página de datos en SQL Server.

Para ilustrar esto, creemos una tabla e insertemos algunos registros en ella:

CREATE DATABASE MyDb
GO

USE MyDb
GO

CREATE TABLE Customer (
    FirstName CHAR(200),
    LastName CHAR(300),
    Email CHAR(200),
    DOB DATE
)
GO

INSERT INTO Customer VALUES ('William', 'James', 'William.J@yahoo.com', '1982-01-20')
INSERT INTO Customer VALUES ('Jade', 'Victor', 'Jade.V@yahoo.com', '1985-08-12')
INSERT INTO Customer VALUES ('Jonas', 'hector', 'Jonas.h@yahoo.com', '1980-10-02')
INSERT INTO Customer VALUES ('William1', 'James', 'William.J@yahoo.com', '1982-01-20')
INSERT INTO Customer VALUES ('Jade1', 'Victor', 'Jade.V@yahoo.com', '1985-08-12')
INSERT INTO Customer VALUES ('Jonas1', 'hector', 'Jonas.h@yahoo.com', '1980-10-02')
INSERT INTO Customer VALUES ('William2', 'James', 'William.J@yahoo.com', '1982-01-20')
INSERT INTO Customer VALUES ('Jade2', 'Victor', 'Jade.V@yahoo.com', '1985-08-12')
INSERT INTO Customer VALUES ('Jonas2', 'hector', 'Jonas.h@yahoo.com', '1980-10-02')
INSERT INTO Customer VALUES ('William3', 'James', 'William.J@yahoo.com', '1982-01-20')
GO

Ahora, descubramos las páginas asignadas a esta tabla utilizando el comando no documentado DBCC IND:

DBCC IND('MyDb', 'Customer', -1)

La salida mostrará los tipos de página asignados a la tabla. En este caso, podemos ver un tipo de página 10 (página IAM) y un tipo de página 1 (página de datos) con un ID de página de 114.

Para ver los datos de fila almacenados en la página de datos, podemos usar el comando DBCC PAGE:

DBCC TRACEON(3604)
GO

DBCC PAGE('MyDb', 1, 114, 3)

La salida tendrá cuatro secciones. La primera sección es la sección BUFFER, que no es relevante para nuestra discusión. La siguiente sección es el encabezado de la página, que tiene un tamaño fijo de 96 bytes. El encabezado de la página contiene información importante sobre la página.

La siguiente sección es la sección de ranuras, donde se almacenan los datos reales. Cada registro se almacena en una ranura, y las ranuras pueden no estar en el orden físico de los datos. El tamaño de cada registro se determina por las columnas en la tabla.

La última sección de una página de datos es la tabla de desplazamiento de filas, que se utiliza para administrar los registros en la página. Cada registro necesita 2 bytes de almacenamiento en la página para la matriz de desplazamiento. La tabla de desplazamiento de filas se puede leer de abajo hacia arriba.

Al comprender la estructura de una página de datos, podemos optimizar el diseño de nuestra base de datos y mejorar el rendimiento. Es importante tener en cuenta que una página de datos tiene un tamaño de 8 KB, con 96 bytes utilizados para el encabezado de la página. La longitud máxima de los registros de datos es de 8060 bytes, incluidos los 7 bytes de sobrecarga de fila. Esto significa que un registro puede tener un máximo de 8053 bytes.

También vale la pena mencionar que la matriz de ranuras puede crecer de abajo hacia arriba en función del tamaño de los registros. Si el tamaño de los registros es pequeño, se pueden acomodar más registros en una página y la tabla de desplazamiento ocupará más espacio de abajo hacia arriba.

Comprender la estructura de las páginas de datos en SQL Server es crucial para un diseño y optimización eficientes de la base de datos. Al conocer cómo se almacenan y organizan los datos, podemos tomar decisiones informadas para mejorar el rendimiento y administrar los datos de manera efectiva.

Referencia: He aprendido sobre la estructura de la página en la excelente publicación de Paul Randal sobre este tema.

Si encontraste útil esta publicación, por favor dale me gusta a mi página en Facebook: www.PracticalSqlDba.com

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.