Dosya Büyüme Olaylarını Belirleme


9

Portföyümde, uzun bir süre boyunca genişletilmiş varsayılan otomatik büyüme ayarlarıyla (1 MB veya% 10 artışlarla) oluşturulmuş bir dizi DB keşfediyorum. DB dosyalarının her biri için dış parçalanma miktarının bir ölçüsünü almak istersem, meta verilerden kaç kez bir DB dosyasının boyutunda (otomatik büyüme veya manuel olarak) değiştirildiğini alabilir miyim? Açıklığa kavuşturmak için, meta verilerden yalnızca örnek yeniden başlatıldığından beri değil, DB'nin ömrü için DB dosya değişikliklerinin geçmişini alabilir miyim?


1
Bir noktada daraltılmadıkları sürece, bu otomatik büyüme ayarına göre başlangıç ​​boyutundan mevcut boyuta basit bir hesaplama olmalıdır?
Martin Smith

Yalnızca otomatik büyüme ile değiştirildiyse, kabul ediyorum, ancak otomatik büyüme ayarlarının dışında olabilecek manuel değişiklikler gördüm.
MattyZDBA

Yanıtlar:


20

Etkinleştirilmişse, otomatik büyütme olayları bilgilerini varsayılan izlemeden alabilirsiniz:

select distinct
    ei.eventid,
    e.name
from sys.fn_trace_geteventinfo(1) ei
inner join sys.trace_events e
on e.trace_event_id = ei.eventid
where name like '%grow%';

Buradan, varsayılan izlemenin Veri Dosyası Otomatik Büyümesi ve Günlük Dosyası Otomatik Büyümesi olaylarının yakalandığını görebilirsiniz. Bu örnekte varsayılan izlemeyi etkinleştirip etkinleştirmediğinizi görmek için aşağıdakileri yapabilirsiniz:

exec sp_configure 'default trace enabled';
go

Not: Bu gelişmiş bir yapılandırma seçeneğidir, bu nedenle show advanced optionsbu yapılandırma seçeneğini görüntülemek için 1'e ayarlamanız gerekir sp_configure. Ayrıca, dosya manuel olarak büyürse bu iki olay tetiklenmez .

İşte bu olayları almak için hızlı bir örnek sorgu:

select
    te.name as event_name,
    tr.DatabaseName,
    tr.FileName,
    tr.StartTime,
    tr.EndTime
from sys.fn_trace_gettable('<Trace Path>', 0) tr
inner join sys.trace_events te
on tr.EventClass = te.trace_event_id
where tr.EventClass in (92, 93)
order by EndTime;

Ve <Trace Path>sistem fonksiyonundan alabilirsiniz sys.fn_trace_getinfo:

select *
from sys.fn_trace_getinfo(1);

Bu iyi bir bilgi, sadece bu olayların bazılarının varsayılan izlemeden sona erebileceğini unutmayın.
Nic

Kesinlikle, ama OP'nin aslında uygun denetimi yaparak bu konuda alacağı tek izleme olduğuna inanıyorum.
Thomas Stringer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.