2010-06-05 33 views
6

Tôi hơi lo lắng về khoảng thời gian lưu giữ mặc định trong Theo dõi thay đổi SQL Server 2008 (là 2 ngày).Thời gian lưu giữ trong SQL Server 2008 Thay đổi theo dõi

Bạn nên đặt khoảng thời gian này thành ví dụ. 100 năm và tắt tự động dọn dẹp hoặc nó sẽ cắn tôi trở lại trong tương lai với việc sử dụng dung lượng quá mức và/hoặc suy giảm hiệu suất? Bất cứ ai cũng có kinh nghiệm trong vấn đề đó?

Trả lời

8

Nếu bạn đặt tự động dọn dẹp, tốt nhất là bạn nên tự định kỳ và tự mình xóa thông tin theo dõi thay đổi, bằng cách tắt và sau đó bật lại theo dõi thay đổi cho mỗi bảng. Nếu không, có, dữ liệu theo dõi sẽ tiếp tục tăng và phát triển.

Bạn không thể truy vấn trực tiếp các bảng bên dưới, nhưng bạn có thể ping vào siêu dữ liệu của chúng. Truy vấn sau đây cho thấy số lượng hàng tương đối:

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 

Chạy trong cơ sở dữ liệu của bạn và bạn sẽ có cảm giác thô lỗ về chi phí hiện tại.

Bảng theo dõi thay đổi đều tuân theo lược đồ chuẩn. Ví dụ:

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') 
) 

Cột k_% khác nhau theo bảng và tương ứng với các khóa chính của bảng được theo dõi. Bạn đang xem xét mức phí tối thiểu cơ bản là 18 byte + (chiều dài khóa chính) cho mỗi hàng. Điều đó thêm lên!

Ví dụ: tôi đang theo dõi một số bảng cơ sở gầy chỉ rộng 15 byte, với khóa tổng hợp 7 byte. Điều đó làm cho các bảng theo dõi 18 + 7 = rộng 25 byte!

+0

+1 cho truy vấn ... đã lưu cho tôi một số công việc. Cảm ơn – RThomas

+0

thậm chí một hàng 100 byte sẽ chỉ nhận được bạn 100MB sau hàng triệu hàng, vì vậy tôi không thấy ví dụ của bạn là _too_ quan trọng, mặc dù tôi đoán rằng có thể rất nhiều nếu nó được cho mỗi bảng được theo dõi. Nêu tôi sai vui long chân chỉnh tôi. –

+0

@Sahuagin: trong trường hợp của tôi, giả sử tối đa 10% bảng được cập nhật trong cửa sổ hai ngày, tôi phải chịu phí lưu trữ 0.1 * (25/15) = 16.7% cho theo dõi thay đổi. Không, nó không phải là khủng khiếp - bằng cách so sánh, bất kỳ chỉ số sẽ có ít nhất (7/15) = 46,7%. Tuy nhiên, giữ chân không giới hạn - có thể tốn 166%. Ngoài ra, tôi không biết trên đầu của tôi nếu thay đổi bảng sử dụng nén dữ liệu, nhưng nếu họ không, và nếu bảng của tôi * là * nén, sau đó tỷ lệ phần trăm nhận được lớn hơn nhiều. –

Các vấn đề liên quan