ADO.NET のデータ追跡Data Tracing in ADO.NET

ADO.NET に組み込まれているデータ トレース機能は、SQL Server、Oracle、OLE DB、ODBC 用の .NET データ プロバイダーと、ADO.NET DataSet および SQL Server ネットワーク プロトコルによりサポートされています。ADO.NET features built-in data tracing functionality that is supported by the .NET data providers for SQL Server, Oracle, OLE DB and ODBC, as well as the ADO.NET DataSet, and the SQL Server network protocols.

データ アクセス API 呼び出しのトレースは、次の問題を診断する際に役立ちます。Tracing data access API calls can help diagnose the following problems:

  • クライアント プログラムとデータベース間のスキーマの不一致Schema mismatch between client program and the database.

  • データベースの使用不可またはネットワーク ライブラリの問題Database unavailability or network library problems.

  • 誤った SQL がアプリケーションによりハードコーディングまたは生成されたIncorrect SQL whether hard coded or generated by an application.

  • プログラミング ロジックが不適切Incorrect programming logic.

  • 複数の ADO.NET コンポーネント間または ADO.NET と独自コンポーネント間の対話に起因する問題Issues resulting from the interaction between multiple ADO.NET components or between ADO.NET and your own components.

トレースを拡張することにより異なるトレース技術をサポートできます。このため、開発者はアプリケーション スタックのあらゆるレベルで問題をトレースできます。To support different trace technologies, tracing is extensible, so a developer can trace a problem at any level of the application stack. トレースは ADO.NET のみで使用できる機能ではありませんが、Microsoft プロバイダーでは、汎用トレース機能および instrumentation API を活用しています。Although tracing is not an ADO.NET-only feature, Microsoft providers take advantage of generalized tracing and instrumentation APIs.

ADO.NET におけるマネージド トレースの設定と構成について詳しくは、データ アクセスのトレースに関する記事をご覧ください。For more information about setting and configuring managed tracing in ADO.NET, see Tracing Data Access.

拡張イベント ログの診断情報へのアクセスAccessing Diagnostic Information in the Extended Events Log

.NET Framework Data Provider for SQL Server では、拡張イベント ログのサーバーの接続のリング バッファーやアプリケーションのパフォーマンス情報から、接続の障害などのクライアントのイベントを診断情報と関連付けることを容易にするため、データ アクセスのトレース (データ アクセスのトレースに関する記事を参照) が更新されました。In the .NET Framework Data Provider for SQL Server, data access tracing (Data Access Tracing) has been updated to make it easier to correlate client events with diagnostic information, such as connection failures, from the server's connectivity ring buffer and application performance information in the extended events log. 拡張イベント ログを表示する方法については、「イベント セッション データの表示」を参照してください。For information about reading the extended events log, see View Event Session Data.

接続操作では、ADO.NET はクライアント接続 ID を送信します。For connection operations, ADO.NET will send a client connection ID. 接続に失敗した場合は、接続リング バッファー (接続リング バッファーによる SQL Server 2008 での接続トラブルシューティングに関する記事を参照) にアクセスし、ClientConnectionID フィールドを見つけて、接続エラーに関する診断情報を取得することができます。If the connection fails, you can access the connectivity ring buffer (Connectivity troubleshooting in SQL Server 2008 with the Connectivity Ring Buffer) and find the ClientConnectionID field and get diagnostic information about the connection failure. クライアント接続 ID は、エラーが発生した場合にのみリング バッファーに記録されます。Client connection IDs are logged in the ring buffer only if an error occurs. (ログイン前のパケットを送信する前に接続に失敗した場合、クライアント接続 ID は生成されません。)クライアント接続 ID は 16 バイトの GUID です。(If a connection fails before sending the prelogin packet, a client connection ID will not be generated.) The client connection ID is a 16-byte GUID. 拡張イベント セッション内のイベントに client_connection_id アクションが追加された場合にも、拡張イベントのターゲット出力のクライアント接続 ID を見つけることができます。You can also find the client connection ID in the extended events target output, if the client_connection_id action is added to events in an extended events session. それ以上にクライアントのドライバーの診断について支援が必要な場合は、データ アクセスのトレースを有効にし、接続コマンドを再実行して、データ アクセスのトレースの ClientConnectionID フィールドを確認することができます。You can enable data access tracing and rerun the connection command and observe the ClientConnectionID field in the data access trace, if you need further client driver diagnostic assistance.

SqlConnection.ClientConnectionID プロパティを使用して、クライアント接続 ID をプログラムによって取得できます。You can get the client connection ID programmatically by using the SqlConnection.ClientConnectionID property.

ClientConnectionID は、正常に接続を確立する SqlConnection オブジェクトで使用できます。The ClientConnectionID is available for a SqlConnection object that successfully establishes a connection. 接続試行が失敗すると、ClientConnectionIDSqlException.ToString を通じて利用可能になることがあります。If a connection attempt fails, ClientConnectionID may be available via SqlException.ToString.

ADO.NET は、スレッド固有のアクティビティ ID も送信します。ADO.NET also sends a thread-specific activity ID. TRACK_CAUSALITY オプションが有効な状態でセッションが開始された場合、アクティビティ ID は拡張イベントのセッションでキャプチャされます。The activity ID is captured in the extended events sessions if the sessions are started with the TRACK_CAUSALITY option enabled. アクティブな接続のパフォーマンスの問題については、クライアントのデータ アクセスのトレース (ActivityID フィールド) からアクティビティ ID を取得した後、その拡張イベントの出力のアクティビティ ID を検索できます。For performance issues with an active connection, you can get the activity ID from the client's data access trace (ActivityID field) and then locate the activity ID in the extended events output. 拡張イベントのアクティビティ ID は 16 バイトの GUID (クライアント接続 ID の GUID と同じではありません) であり、4 バイトのシーケンス番号が追加されています。The activity ID in extended events is a 16-byte GUID (not the same as the GUID for the client connection ID) appended with a four-byte sequence number. シーケンス番号は、スレッド内で要求の順序を表し、スレッドのバッチと RPC ステートメントの相対的順序を示します。The sequence number represents the order of a request within a thread and indicates the relative ordering of batch and RPC statements for the thread. ActivityID は、現在、データ アクセスのトレースが有効な場合、データ アクセスのトレースの構成のワードの 18 番目のビットが有効にされると、オプションとして SQL のバッチ ステートメントと RPC の要求に送信されるようになっています。The ActivityID is currently optionally sent for SQL batch statements and RPC requests when data access tracing is enabled on and the 18th bit in the data access tracing configuration word is turned ON.

次に示すのは、リング バッファーに格納され、RPC とバッチ操作でクライアントから送信されるアクティビティ ID を記録する拡張イベントのセッションを開始するために Transact-SQL を使用するサンプルです。The following is a sample that uses Transact-SQL to start an extended events session that will be stored in a ring buffer and will record the activity ID sent from a client on RPC and batch operations.

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)

関連項目See also