Varias preguntas sobre SGAM & GAM & IAM & PFS en SQL Server

8

Tiene varias preguntas sobre la estructura interna de SQL Server.

Supongamos que tenemos una tabla en una base de datos.

  1. Las páginas SGAM y GAM realizan un seguimiento de las extensiones compartidas y uniformes dentro de un solo intervalo GAM (~ 4 GB), y nos ayudan a encontrar el tipo de extensión apropiado al asignar páginas / extensiones (inicialmente, las primeras 8 páginas se asignan a partir de extensiones y posiciones mixtas de esas páginas). grabadora a páginas IAM, y después de eso extensiones de GAM (extensiones uniformes) y esta información se almacena en la siguiente página encadenada de IAM).

    Digamos que se asignaron páginas para la tabla, y el tamaño de la tabla es más de 8 páginas, y en algún momento posterior, se eliminaron las filas, dejando un espacio reutilizable. ¿Cómo sabe SQL Server que las extensiones tienen espacio libre?

    Las páginas tienen información sobre el tamaño del espacio libre, pero lleva demasiado tiempo comprobar cada página. Los bits en las páginas SGAM y GAM no nos dicen nada aparte de que la extensión está asignada o tiene algunas páginas libres (toda la página es gratuita, no parcialmente).

  2. Las páginas de encabezado de archivo y SGAM y GAM e IAM se encuentran entre las primeras páginas dentro de un archivo. ¿Qué estructura de datos realmente apunta a ellos?

nueva impresión
fuente

Respuestas:

11

¿Cómo sabe SQL Server que las extensiones tienen espacio libre?

SQL Server rastrea el espacio libre en la página, en las tablas de almacenamiento dinámico, así como en las páginas LOB utilizando la página PSF internamente.

Además, puede usar el sys.dm_db_file_space_usageDMV para averiguarlo total_page_count, allocated_extent_page_countasí como unallocated_extent_page_countdentro de una base de datos.

Las páginas de espacio libre de página (PFS) registran el estado de asignación de cada página, si se ha asignado una página individual y la cantidad de espacio libre en cada página. El PFS tiene un byte para cada página, registrando si la página está asignada y, de ser así, si está vacía, del 1 al 50 por ciento llena, del 51 al 80 por ciento llena, del 81 al 95 por ciento llena o del 96 al 100 por ciento llena.

Una página PFS es la primera página después de la página de encabezado del archivo en un archivo de datos (página número 1). Esto es seguido por una página GAM (página número 2), y luego una página SGAM (página 3). Hay una página PFS de aproximadamente 8,000 páginas después de la primera página PFS. Hay otra página de GAM de 64,000 extensiones después de la primera página de GAM en la página 2, y otra página de SGAM de 64,000 extensiones después de la primera página de SGAM en la página 3. La siguiente ilustración muestra la secuencia de páginas utilizadas por el Motor de base de datos para asignar y administrar extensiones.

Haga clic aquí para ampliar - salida usando DBCC PAGE

ingrese la descripción de la imagen aquí

Consulte: Dentro del motor de almacenamiento: GAM, SGAM, PFS y otros mapas de asignación

Las páginas de encabezado de archivo y SGAM y GAM e IAM se encuentran entre las primeras páginas dentro de un archivo. ¿Qué estructura de datos realmente apunta a ellos?

No entiendo esta pregunta. La unidad de almacenamiento más pequeña es una página. Ocho páginas de 8K forman una extensión. A continuación se muestra lo que se compone de una página de datos :

ingrese la descripción de la imagen aquí

Recomiendo leer el blog SQLSkills.com en el que Paul y su equipo bloguean mucho sobre los componentes internos de SQL Server .

Kin Shah
fuente