Если вы отключили автоматическую очистку, лучше периодически просматривать и удалять информацию отслеживания изменений, отключив, а затем снова включив отслеживание изменений для каждой таблицы. В противном случае, да, данные отслеживания будут продолжать расти и расти.
Вы не можете напрямую запрашивать базовые таблицы, но можете использовать их метаданные. Следующий запрос показывает относительное количество строк:
select
s.name as schema_name
, t.name as table_name
, (select sum(rows) from sys.partitions x where o.parent_object_id = x.object_id) as rows_in_base_table
, o.name as tracking_table
, p.rows as rows_in_tracking_table
from sys.objects o
join sys.tables t on o.parent_object_id = t.object_id
join sys.schemas s on t.schema_id = s.schema_id
join sys.partitions p on o.object_id = p.object_id
where o.name like 'change[_]tracking%'
and o.schema_id = schema_id('sys')
order by schema_name, table_name
Запустите это в своей базе данных, и вы получите приблизительное представление о текущих издержках.
Все таблицы отслеживания изменений следуют стандартной схеме. Например:
select
c.name, c.column_id
, type_name(user_type_id) as type_name
, c.max_length, c.precision, c.scale
, c.is_nullable, c.is_identity
from sys.columns c
where object_id = (
select top 1 object_id from sys.objects o
where o.name like 'change[_]tracking%'
and o.schema_id = schema_id('sys')
)
Столбцы k_% варьируются в зависимости от таблицы и соответствуют первичным ключам отслеживаемой таблицы. Вы смотрите на базовые минимальные издержки 18 байтов + (длина первичного ключа) на строку. Это добавляет!
Например, я отслеживаю некоторые тощие базовые таблицы шириной всего 15 байт с помощью 7-байтового составного ключа. Это делает таблицы отслеживания 18 + 7 = 25 байт!