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

ADO.NET、Oracle、OLE DB、および ODBC DataSet用 SQL Server の .net データプロバイダー、および 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

SQL Server の .NET Framework Data Provider では、データアクセスのトレース (データアクセスのトレース) が更新され、クライアントイベントと接続エラーなどの診断情報をサーバーの接続から簡単に関連付けることができるようになりました。拡張イベントログのリングバッファーとアプリケーションのパフォーマンス情報。In the .NET Framework Data Provider for SQL Server, data access tracing (Data Access Tracing) has been updated to make it easier to 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. アクティビティ ID は、TRACK_CAUSALITY オプションを有効にしてセッションが開始された場合に、拡張イベントセッションでキャプチャされます。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.

次に示すのは、Transact-sql を使用して拡張イベントセッションを開始するサンプルです。このセッションでは、リングバッファーに格納され、RPC およびバッチ操作でクライアントから送信されたアクティビティ ID が記録されます。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