Administrar las asignaciones de extensiones y el espacio disponible

Las estructuras de datos de SQL Server que administran asignaciones de extensiones y realizan un seguimiento del espacio disponible tienen una estructura relativamente sencilla. Esto tiene las siguientes ventajas:

  • La información del espacio libre está densamente empaquetada, de modo que esta información está contenida en relativamente pocas páginas.

    Esto aumenta la velocidad al reducir la cantidad de lecturas del disco necesarias para recuperar la información de asignación. También incrementa la posibilidad de que las páginas de asignación permanezcan en la memoria, lo que elimina aún más lecturas.

  • La mayor parte de la información de asignación no está encadenada. Esto simplifica el mantenimiento de la información de asignación.

    La asignación o cancelación de asignación de las páginas se puede hacer con más rapidez. Esto reduce el conflicto entre las tareas simultáneas que necesiten asignar o cancelar la asignación de páginas.

Administrar las asignaciones de extensiones

SQL Server utiliza dos tipos de mapas de asignación para registrar la asignación de las extensiones:

  • Mapa de asignación global (GAM, Global Allocation Map)

    Las páginas GAM registran las extensiones que han sido asignadas. Cada GAM cubre 64.000 extensiones o casi 4 GB de datos. La página GAM tiene un bit por cada extensión del intervalo que cubre. Si el bit es 1, la extensión está disponible; si el bit es 0, la extensión está asignada.

  • Mapa de asignación global compartido (SGAM, Shared Global Allocation Map)

    Las páginas SGAM registran las extensiones que actualmente se están utilizando como extensiones mixtas y además tienen al menos una página sin utilizar. Cada SGAM cubre 64.000 extensiones o casi 4 GB de datos. La página SGAM tiene un bit por cada extensión del intervalo que cubre. Si el bit es 1, la extensión se está utilizando como extensión mixta y tiene una página disponible. Si el bit es 0, la extensión no se utiliza como extensión mixta o se trata de una extensión mixta cuyas páginas están todas en uso.

Todas las extensiones tienen establecidos los siguientes patrones de bits en las página GAM y SGAM, basados en su uso actual.

Uso actual de la extensión

Bit en GAM

Bit en SGAM

Disponible, no se utiliza

1

0

Extensión uniforme o extensión mixta completa

0

0

Extensión mixta con páginas disponibles

0

1

Esto hace que los algoritmos de administración de las extensiones sean sencillos. Para asignar una extensión uniforme, el Database Engine (Motor de base de datos) busca un bit 1 en la página GAM y lo establece en 0. Para buscar una extensión mixta con páginas disponibles, el Database Engine (Motor de base de datos) busca un bit 1 en la página SGAM. Para asignar una extensión mixta, el Database Engine (Motor de base de datos) busca 1 bit en la página GAM, lo establece en 0 y, a continuación, establece también en 1 el bit correspondiente de la página SGAM. Para cancelar la asignación de una extensión, el Database Engine (Motor de base de datos) se asegura de que el bit de la página GAM esté establecido en 1 y el bit de la página SGAM en 0. Los algoritmos internos utilizados realmente por el Database Engine (Motor de base de datos) son más sofisticados que los mencionados aquí, porque el Database Engine (Motor de base de datos) distribuye los datos por la base de datos de manera uniforme. Sin embargo, incluso los algoritmos reales quedan simplificados al no tener que administrar cadenas de información de asignación de extensiones.

Realizar un seguimiento del espacio libre

Las páginas Espacio disponible en páginas (PFS, Page Free Space) registran el estado de asignación de cada página, si una página concreta está asignada y la cantidad de espacio libre en cada página. La PFS tiene un byte por página, que registra si la página está asignada y, en tal caso, si está vacía, llena entre el 1 y el 50%, entre el 51 y el 80%, entre el 81 y el 95% o entre el 96 y el 100%.

Una vez que se ha asignado una extensión a un objeto, el Database Engine (Motor de base de datos) utiliza las páginas PFS para registrar las páginas de la extensión que están asignadas o libres. Esta información se utiliza cuando el Database Engine (Motor de base de datos) tiene que asignar una nueva página. La cantidad de espacio libre de una página sólo se mantiene en páginas de texto e imagen y de montón. Se utiliza cuando el Database Engine (Motor de base de datos) tiene que buscar una página con espacio libre disponible para almacenar una fila recién insertada. Los índices no necesitan que se haga un seguimiento del espacio libre en páginas, porque el punto en el que se inserta una nueva fila se establece mediante los valores de clave del índice.

La página PFS es la primera página que sigue a la página de encabezado de archivo en un archivo de datos (con el número de página 1). A continuación aparece una página GAM (con el número de página 2), seguida de una página SGAM (página 3). Hay una página PFS de aproximadamente 8.000 páginas de tamaño después de la primera página PFS. Hay otras 64.000 extensiones de la página GAM después de la primera página GAM en la página 2, y otras 64.000 extensiones de la página SGAM después de la primera página SGAM en la página 3. En la siguiente ilustración se muestra la secuencia de páginas que utiliza Database Engine (Motor de base de datos) para asignar y administrar extensiones.

Páginas usadas para asignar y administrar extensiones