web-dev-qa-db-ja.com

ファイル増加イベントを特定する

デフォルトの自動拡張設定(1 MBまたは10%の増分)で作成され、長期間にわたって拡張された多数のDBをポートフォリオで見つけました。各DBファイルの外部断片化の量のゲージを取得したい場合、メタデータからDBファイルのサイズが(自動拡張または手動で)変更された回数を取得できますか?明確にするために、インスタンスの再起動以降だけでなく、DBの存続期間中のDBファイルの変更履歴をメタデータから取得できますか?

9
MattyZDBA

有効になっている場合、デフォルトのトレースから自動拡張イベント情報を取得できます。

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

これから、デフォルトのトレースにはData File Auto GrowおよびLog File Auto Growイベントキャプチャ。そのインスタンスでデフォルトのトレースが有効になっているかどうかを確認するには、次のようにします。

exec sp_configure 'default trace enabled';
go

注:これは高度な構成オプションであるため、show advanced optionsからこの構成オプションを表示するには、sp_configureを1に設定する必要があります。また、 ファイルが手動で拡張された場合、これらの2つのイベントはトリガーされません

これらのイベントを取得するための簡単なサンプルクエリを次に示します。

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);
20
Thomas Stringer