次の方法で共有


ADO.NET のデータ トレース

ADO.NET には、SQL Server、Oracle、OLE DB、ODBC 用の .NET データ プロバイダーと、ADO.NET DataSet、および SQL Server ネットワーク プロトコルでサポートされる組み込みのデータ トレース機能が備わっています。

データ アクセス API 呼び出しのトレースは、次の問題を診断する際に役立ちます。

  • クライアント プログラムとデータベース間のスキーマの不一致

  • データベースの使用不可またはネットワーク ライブラリの問題

  • 誤った SQL がアプリケーションによりハードコーディングまたは生成された

  • プログラミング ロジックが不適切

  • 複数の ADO.NET コンポーネント間、または ADO.NET と独自のコンポーネント間の相互作用に起因する問題。

トレースを拡張することにより異なるトレース技術をサポートできます。このため、開発者はアプリケーション スタックのあらゆるレベルで問題をトレースできます。 トレースは ADO ではありません。NET 専用の機能である Microsoft プロバイダーは、一般化されたトレース API とインストルメンテーション API を利用します。

ADO.NET でのマネージド トレースの設定と構成の詳細については、「 データ アクセスのトレース」を参照してください。

拡張イベント ログの診断情報へのアクセス

.NET Framework Data Provider for SQL Server では、データ アクセス トレース (データ アクセス トレース) が更新され、クライアント イベントと、サーバーの接続リング バッファーや拡張イベント ログのアプリケーション パフォーマンス情報からの接続エラーなどの診断情報との関連付けが容易になりました。 拡張イベント ログを表示する方法については、「イベント セッション データの表示」を参照してください。

接続操作の場合、ADO.NET はクライアント接続 ID を送信します。 接続に失敗した場合は、接続リング バッファー (接続リング バッファーによる SQL Server 2008 での接続トラブルシューティングに関する記事を参照) にアクセスし、ClientConnectionID フィールドを見つけて、接続エラーに関する診断情報を取得することができます。 クライアント接続 ID は、エラーが発生した場合にのみリング バッファーに記録されます (ログイン前のパケットを送信する前に接続に失敗した場合、クライアント接続 ID は生成されません。)クライアント接続 ID は 16 バイトの GUID です。 拡張イベント セッション内のイベントに client_connection_id アクションが追加された場合にも、拡張イベントのターゲット出力のクライアント接続 ID を見つけることができます。 それ以上にクライアントのドライバーの診断について支援が必要な場合は、データ アクセスのトレースを有効にし、接続コマンドを再実行して、データ アクセスのトレースの ClientConnectionID フィールドを確認することができます。

SqlConnection.ClientConnectionID プロパティを使用して、クライアント接続 ID をプログラムによって取得できます。

ClientConnectionIDは、接続を正常に確立したSqlConnection オブジェクトで使用できます。 接続試行が失敗すると、ClientConnectionIDSqlException.ToString を通じて利用可能になることがあります。

ADO.NET は、スレッド固有のアクティビティ ID も送信します。 セッションが TRACK_CAUSALITY オプションを有効にして開始された場合、アクティビティ ID は拡張イベント セッションでキャプチャされます。 アクティブな接続のパフォーマンスの問題については、クライアントのデータ アクセスのトレース (ActivityID フィールド) からアクティビティ ID を取得した後、その拡張イベントの出力のアクティビティ ID を検索できます。 拡張イベントのアクティビティ ID は、4 バイトのシーケンス番号が付加された 16 バイトの GUID (クライアント接続 ID の GUID と同じではありません) です。 シーケンス番号は、スレッド内で要求の順序を表し、スレッドのバッチと RPC ステートメントの相対的順序を示します。 ActivityID は、現在、データ アクセスのトレースが有効な場合、データ アクセスのトレースの構成のワードの 18 番目のビットが有効にされると、オプションとして SQL のバッチ ステートメントと RPC の要求に送信されるようになっています。

次に示すのは、リング バッファーに格納され、RPC とバッチ操作でクライアントから送信されるアクティビティ ID を記録する拡張イベントのセッションを開始するために Transact-SQL を使用するサンプルです。

create event session MySession on server
add event connectivity_ring_buffer_recorded,
add event sql_statement_starting (action (client_connection_id)),
add event sql_statement_completed (action (client_connection_id)),
add event rpc_starting (action (client_connection_id)),
add event rpc_completed (action (client_connection_id))
add target ring_buffer with (track_causality=on)

こちらも参照ください