Визначте події зростання файлів


9

Я відкриваю в своєму портфоліо декілька БД, які були створені з налаштуваннями автоматичного зростання за замовчуванням (з кроком 1 Мб або 10%), що розширюються протягом тривалого періоду часу. Якщо я хотів отримати оцінку кількості зовнішньої фрагментації для кожного з файлів БД, чи можу я отримати з метаданих, скільки разів файл DB був змінений у розмірі (або авторозростанням, або вручну)? Для уточнення, чи можу я отримати з метаданих історію модифікацій файлів БД протягом життя БД, а не лише з моменту перезавантаження екземпляра?


1
Якщо вони також не були зменшені в якийсь момент, це повинен бути простим розрахунком від початкового розміру до поточного розміру на основі налаштування автоматичного зростання?
Мартін Сміт

Якби вона була змінена лише функцією autogrow, я погодився б, але я бачив зроблені вручну зміни, які можуть бути поза налаштуваннями автороставання.
MattyZDBA

Відповіді:


20

Ви можете отримати інформацію про події автоматичного зростання зі сліду за замовчуванням, якщо вона включена:

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

Звідси видно, що трасування за замовчуванням має фіксувати події автоматичного зростання файлів даних та журналу файлів журналу . Щоб побачити, чи увімкнено трасування за замовчуванням у цьому екземплярі, ви можете зробити наступне:

exec sp_configure 'default trace enabled';
go

Примітка. Це розширений варіант конфігурації, тому show advanced optionsдля перегляду цієї опції конфігурації доведеться встановити значення 1 sp_configure. Крім того, ці дві події не будуть спровоковані, якщо файл зростав вручну .

Ось короткий зразок запиту, щоб отримати ці події:

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;

І ви можете отримати <Trace Path>з системної функції sys.fn_trace_getinfo:

select *
from sys.fn_trace_getinfo(1);

Це гарна інформація, лише майте на увазі, що деякі з цих подій цілком могли закінчитися зі сліду за замовчуванням.
Нік

Абсолютно, але я вважаю, що це єдиний позачерговий моніторинг, який ОП отримає на цьому, фактично виконуючи належний аудит.
Томас Стрінгер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.