2010-06-05 69 views
6

我有點擔心SQL Server 2008更改跟蹤(這是2天)中的默認保留期。SQL Server 2008中的保留期更改跟蹤

將這段時間設置爲eg是個好主意。 100年,並關閉自動清理,或在未來存儲使用和/或性能下降將咬我回來?任何人都有這方面的經驗?

回答

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字節寬!

+0

查詢+1 ...爲我節省了一些工作。感謝 – RThomas 2011-07-15 23:07:02

+0

即使是100字節的行在100萬行之後也只能達到100MB,所以我沒有看到你的例子是嚴重的,儘管如果每個表被跟蹤的話我想這可能會很多。如果我錯了,請糾正我。 – 2011-07-30 20:05:52

+0

@Sahuagin:在我的情況下,假設表中至多有10%在兩天的時間內更新,我爲變更跟蹤產生了0.1 *(25/15)= 16.7%的存儲開銷。不,這並不可怕 - 相比之下,任何指數至少(7/15)= 46.7%。無限期保留,但是 - 這將花費166%。另外,如果變更表使用數據壓縮,我不知道如何處理,但如果它們不是,並且我的表* *是壓縮的,則百分比會變得更大。 – 2011-07-31 04:50:25

相關問題