6

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

将此期间设置为例如是一个好主意吗?100 年并关闭自动清理功能,或者它会在未来因过多的存储使用和/或性能下降而咬我?有人有这方面的经验吗?

4

1 回答 1

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

于 2010-09-29T05:00:47.740 回答