Сколько строк может содержать страницу данных в HEAP? - PullRequest
0 голосов
/ 16 апреля 2019

Как известно, страница всегда имеет размер 8 КБ (8192 байта) и содержит два основных раздела: заголовок и текст. Заголовок имеет фиксированный размер 96 байтов и имеет одинаковое содержимое и формат независимо от типа страницы.

У меня есть таблица с двумя столбцами типа данных int:

IF OBJECT_ID('t1', 'U') IS NOT NULL
DROP TABLE t1;

CREATE TABLE t1 ( C1 INT
                 ,C2 INT)

Вставьте 477 строк в t1:

;WITH cte AS
(
    SELECT 1 AS ValueFor_C1
          ,1 AS ValueFor_C2
    UNION ALL
    SELECT ValueFor_C1 + 1
          ,ValueFor_C2 + 1
    FROM  cte 
    WHERE ValueFor_C1 < 477
)
INSERT INTO t1
SELECT *
FROM cte
OPTION (MAXRECURSION 0)

4 байта + 4 байта = 8 байтов на один размер строки. (477 строк * 8 байт) + 92 байта = размер таблицы 3908 байт.

8192 байта - 3908 байтов = 4284 байта свободного места осталось.

Но page_count показывает, что данные занимают две страницы:

SELECT i.name,
       i.type_desc,
       s.page_count,
       s.record_count,
       s.index_level
FROM sys.indexes i
    JOIN sys.dm_db_index_physical_stats(DB_ID(N'AdventureWorks2012'),
                                        OBJECT_ID(N'dbo.t1'),
                                        NULL,
                                        NULL,
                                        'DETAILED') AS s
        ON i.index_id = s.index_id
WHERE i.object_id = OBJECT_ID(N'dbo.t1');

name    type_desc   page_count  record_count    index_level
NULL    HEAP            2           477         0

Почему создаются две страницы вместо одной страницы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...