Это не упоминается в документации, но есть отчеты людей, интересующихся, почему sys.allocation_units
возвращает данные для таблиц, когда выполняется огромное удаление / усечение, означающее, что системное представление возвращает ghost records
а также.
В любом случае, я не верю, что вам следует сильно волноваться за записи о призраках, если включена очистка от призраков (она включена по умолчанию). Также не рекомендуется отключать it:
Отключение процесса очистки призрака обычно не рекомендуется.
Это должно быть тщательно проверено в контролируемой среде
до постоянной реализации в производственной среде.
Вы можете проверить количество записей о привидениях для конкретной таблицы, используя следующий запрос:
SELECT [ghost_record_count]
,[version_ghost_record_count]
FROM [sys].[dm_db_index_physical_stats] (DB_ID(N'dabase_name'), OBJECT_ID(N'schema_name.table_name'), NULL, NULL , 'DETAILED');
GO
Итак, имея вышеупомянутый запрос, мы можем попытаться проверить, возвращает ли ваш запрос также и записи о привидениях.
CREATE TABLE [dbo].[StackOverflow]
(
[ID] BIGINT IDENTITY(100000, 1) PRIMARY KEY
,[text] NVARCHAR(MAX)
,[date] DATETIME2 CONSTRAINT DF_StackOverflow_date DEFAULT (SYSDATETIME())
);
INSERT INTO [dbo].[StackOverflow] ([text])
SELECT TOP 100000
REPLICATE(CAST(NEWID() AS NVARCHAR(MAX)), 255)
FROM master..spt_values t1
CROSS JOIN master..spt_values t2;
EXEC sp_spaceused '[dbo].[StackOverflow]';
-- your script for detecting size
GO
DBCC TRACEOFF(661); -- disable ghost cleaner; DO NOT RUN ON PRODUCTION DATABASE
DELETE FROM [dbo].[StackOverflow];
SELECT [ghost_record_count]
,[version_ghost_record_count]
FROM [sys].[dm_db_index_physical_stats] (DB_ID(N'StackOverflow'), OBJECT_ID(N'dbo.StackOverflow'), NULL, NULL , 'DETAILED');
EXEC sp_spaceused '[dbo].[StackOverflow]'
-- your script for detecting size
-- DROP TABLE IF EXISTS [dbo].[StackOverflow];
-- GO
Итак, после отключения программы очистки призраков, мы можем видеть, что в таблицах нет строк, но есть данные / строки-призраки:

При включении флага убираются показания-призраки:
DBCC TRACEON(661);
SELECT [ghost_record_count]
,[version_ghost_record_count]
FROM [sys].[dm_db_index_physical_stats] (DB_ID(N'smModel_20180828_gk7'), OBJECT_ID(N'dbo.StackOverflow'), NULL, NULL , 'DETAILED');
EXEC sp_spaceused '[dbo].[StackOverflow]';

Если вы хотите выполнить тестирование, не отключайте флаг в производственной базе данных, и вам может потребоваться увеличить количество вставленных строк.