1

私は、さまざまな sp_trace プロシージャを使用してリモート SQL Server データベースからイベントを表示する C# アプリケーションに取り組んでいます。私が最も興味を持っている特定のイベントは、クエリとストアド プロシージャの開始時と終了時です。タイミング、SQL テキスト、ホスト名など、各イベントのデータが必要です。

MSFT のドキュメントによると、sp_trace 機能は廃止され、拡張イベントに置き換えられています。また、拡張イベントによってデータベースのオーバーヘッドが大幅に減少するという記事をいくつか発見しました。ただし、拡張イベントを使用してトレース機能を複製するチュートリアルや例を見つけるのに苦労しています。

したがって、私の質問は、データベースを効果的にトレースするために C# アプリから実行する必要がある一連のストアド プロシージャは何ですか?

4

1 に答える 1

0

ストアド プロシージャを使用する代わりに、拡張イベント トレースは DDL を使用して作成されます。次の例は、リング バッファーとトレース ファイルの両方のターゲットを使用したトレースと、「sys.fn_xe_file_target_read_file」TVF から選択して XE トレース データを返すことを示しています。

リング バッファ ターゲットは、永続性を必要とせず、最新のイベントをメモリに保持したいだけの場合に便利です。ファイル ターゲットを使用すると、最大ファイル サイズとロールオーバー ファイルの数を指定できます。多くのイベントをキャプチャする場合は、ファイル ターゲットをお勧めします。

SSMS オブジェクト エクスプローラーを使用してトレースを作成し、アプリケーションのニーズに合わせてスクリプトを生成できます。

CREATE EVENT SESSION [batch_and_rpc] ON SERVER 
ADD EVENT sqlserver.rpc_starting(
    WHERE ([sqlserver].[client_hostname]=N'ServerName')),
ADD EVENT sqlserver.rpc_completed(
    WHERE ([sqlserver].[client_hostname]=N'ServerName')),
ADD EVENT sqlserver.sql_batch_starting(
    WHERE ([sqlserver].[client_hostname]=N'ServerName')),
ADD EVENT sqlserver.sql_batch_completed(
    WHERE ([sqlserver].[client_hostname]=N'ServerName'))
ADD TARGET package0.event_file(SET filename=N'C:\TraceFiles\batch_and_rpc.xel'),
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO

ALTER EVENT SESSION [batch_and_rpc] ON SERVER STATE = START;
GO

SELECT * 
FROM sys.fn_xe_file_target_read_file('C:\TraceFiles\batch_and_rpc*.xel', null, null, null);
GO

XE セッションを削除するには:

DROP EVENT SESSION [batch_and_rpc] ON SERVER; 

Microsoft.SqlServer.XEvent 名前空間のオブジェクトを使用して XE データを読み取ることもできます。ただし、メソッドは十分に文書化されていないことに注意してください。http://blogs.msdn.com/b/extended_events/archive/2011/07/20/introducing-the-extended-events-reader.aspxを参照してください。

于 2014-12-06T18:23:10.437 に答える