Identifikasi Acara Pertumbuhan File

9

Saya menemukan sejumlah DB dalam portofolio saya yang telah dibuat dengan pengaturan autogrow default (kenaikan 1 MB atau 10%) yang telah diperluas untuk jangka waktu yang lama. Jika saya ingin mendapatkan ukuran jumlah fragmentasi eksternal untuk masing-masing file DB, dapatkah saya dapatkan dari metadata berapa kali file DB telah dimodifikasi ukurannya (baik dengan autogrow atau secara manual)? Untuk memperjelas, bisakah saya dapatkan dari metadata sejarah modifikasi file DB untuk kehidupan DB, tidak hanya sejak mulai ulang misalnya?

MattyZDBA
sumber
1
Kecuali jika mereka juga telah menyusut di beberapa titik ini harus menjadi perhitungan sederhana dari ukuran awal ke ukuran saat ini berdasarkan pengaturan tumbuh otomatis?
Martin Smith
Jika itu hanya dimodifikasi oleh autogrow, saya setuju tetapi saya telah melihat modifikasi manual dilakukan yang mungkin di luar pengaturan autogrow.
MattyZDBA

Jawaban:

20

Anda bisa mendapatkan informasi peristiwa autogrowth dari jejak default jika diaktifkan:

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

Anda dapat melihat dari sini bahwa jejak default memang memiliki penangkapan Data File Auto Grow dan Log File Auto Grow . Untuk melihat apakah Anda memiliki jejak default yang diaktifkan pada instance itu, Anda dapat melakukan hal berikut:

exec sp_configure 'default trace enabled';
go

Catatan: ini adalah opsi konfigurasi lanjutan, jadi show advanced optionsharus diatur ke 1 untuk melihat opsi konfigurasi ini sp_configure. Juga, dua peristiwa ini tidak akan dipicu jika file tumbuh secara manual .

Berikut ini contoh permintaan cepat untuk mendapatkan acara ini:

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;

Dan Anda bisa dapatkan <Trace Path>dari fungsi sistem sys.fn_trace_getinfo:

select *
from sys.fn_trace_getinfo(1);
Thomas Stringer
sumber
Ini adalah informasi yang baik, hanya perlu diingat bahwa beberapa dari peristiwa itu mungkin telah kedaluwarsa dari jejak default.
Nic
Tentu saja, tapi saya percaya itu satu-satunya pemantauan yang dilakukan OP yang akan melakukan ini dengan benar-benar melakukan audit yang tepat.
Thomas Stringer