Срок хранения в SQL Server 2008 Отслеживание изменений - PullRequest
6 голосов
/ 05 июня 2010

Меня немного беспокоит период хранения по умолчанию в отслеживании изменений SQL Server 2008 (который составляет 2 дня).

Это хорошая идея, чтобы установить этот период, например. 100 лет и выключите автоматическую очистку, или это укусит меня в будущем из-за чрезмерного использования памяти и / или снижения производительности? У кого-нибудь есть опыт в этом вопросе?

1 Ответ

8 голосов
/ 29 сентября 2010

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

Вы не можете напрямую запрашивать базовые таблицы, но можете использовать их метаданные. Следующий запрос показывает относительное количество строк:

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 байт!

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