SQL Server 2008中的保留期更改跟踪

时间:2010-06-05 05:45:02

标签: sql-server change-tracking

我有点担心SQL Server 2008更改跟踪(2天)中的默认保留期。

将此期间设置为例如是一个好主意。 100年后关闭自动清理还是会因为过多的存储使用和/或性能下降而将我咬回来?任何人都有这方面的经验吗?

1 个答案:

答案 0 :(得分:8)

如果您将自动清除设置为关闭,则最好定期检查并自行删除更改跟踪信息,方法是禁用然后重新启用每个表的更改跟踪。否则,是的,跟踪数据将继续增长和增长。

您无法直接查询基础表,但可以查看其元数据。以下查询显示相对行计数:

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字节宽!