Zidentyfikuj zdarzenia wzrostu pliku


9

W moim portfolio odkrywam wiele baz danych, które zostały utworzone przy użyciu domyślnych ustawień autogrow (przyrosty 1 MB lub 10%), które rozszerzyły się na dłuższy czas. Jeśli chciałbym uzyskać ocenę stopnia fragmentacji zewnętrznej dla każdego z plików DB, czy mogę uzyskać z metadanych, ile razy rozmiar pliku DB został zmodyfikowany (przez autogrow lub ręcznie)? Aby wyjaśnić, czy mogę uzyskać z metadanych historię modyfikacji plików DB na czas życia bazy danych, nie tylko od momentu ponownego uruchomienia instancji?


1
Jeśli nie zostaną one w pewnym momencie również zmniejszone, powinno to być proste obliczenie od początkowego rozmiaru do obecnego rozmiaru w oparciu o ustawienie automatycznego wzrostu?
Martin Smith

Jeśli byłby modyfikowany tylko przez autogrow, zgodziłbym się, ale widziałem ręczne modyfikacje, które mogą być poza ustawieniami autogrow.
MattyZDBA

Odpowiedzi:


20

Możesz uzyskać informacje o zdarzeniach autogrowth z domyślnego śledzenia, jeśli jest włączony:

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%';

Z tego wynika, że ​​śledzenie domyślne ma przechwytywanie zdarzeń automatycznego wzrostu pliku danych i automatycznego rejestrowania pliku dziennika . Aby sprawdzić, czy masz włączone śledzenie domyślne dla tego wystąpienia, możesz wykonać następujące czynności:

exec sp_configure 'default trace enabled';
go

Uwaga: jest to zaawansowana opcja konfiguracji, więc show advanced optionsmusiałoby zostać ustawione na 1, aby wyświetlić tę opcję konfiguracji sp_configure. Ponadto, te dwa wydarzenia nie zostanie uruchomiony, jeśli plik wzrosła ręcznie .

Oto szybkie przykładowe zapytanie, aby uzyskać te zdarzenia:

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;

I możesz uzyskać <Trace Path>z funkcji systemu sys.fn_trace_getinfo:

select *
from sys.fn_trace_getinfo(1);

To dobra informacja, pamiętaj jednak, że niektóre z tych zdarzeń mogły wygasnąć z domyślnego śledzenia.
Nic,

Oczywiście, ale uważam, że jest to jedyne gotowe narzędzie do monitorowania, w którym OP weźmie to pod uwagę, wykonując właściwie audyt.
Thomas Stringer,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.