ADO.NET의 데이터 추적

ADO.NET은 SQL Server, Oracle, OLE DB 및 ODBC뿐만 아니라 ADO.NET DataSet 및 SQL Server 네트워크 프로토콜을 위한 .NET 데이터 공급자가 지원하는 기본 제공 데이터 추적 기능을 제공합니다.

데이터 액세스 API 호출을 추적하면 다음과 같은 문제를 진단할 수 있습니다.

  • 클라이언트 프로그램과 데이터베이스 간의 스키마 불일치

  • 데이터베이스 비가용성 또는 네트워크 라이브러리 문제

  • 하드 코딩되거나 애플리케이션에서 생성된 잘못된 SQL

  • 잘못된 프로그래밍 논리

  • 여러 ADO.NET 구성 요소 간의 상호 작용 및 ADO.NET과 사용자 구성 요소 간의 상호 작용으로 인한 문제

다양한 추적 기술을 지원하기 위해 추적을 확장할 수 있으므로 개발자는 애플리케이션 스택의 모든 수준에서 문제를 추적할 수 있습니다. 추적이 ADO.NET에만 있는 기능은 아니지만 Microsoft 공급자에서는 일반화된 추적 및 계측 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 개체에 사용할 수 있습니다. 연결 시도에 실패한 경우에는 ClientConnectionID을 통해 SqlException.ToString를 확인할 수 있습니다.

또한 ADO.NET은 스레드별 동작 ID를 전송합니다. TRACK_CAUSALITY 옵션이 설정된 상태로 세션이 시작된 경우 확장 이벤트 세션에 작업 ID가 캡처됩니다. 활성 연결에 성능 문제가 발생할 경우 클라이언트의 데이터 액세스 추적(ActivityID 필드)에서 작업 ID를 가져온 다음 확장 이벤트 출력에서 작업 ID를 찾을 수 있습니다. 확장 이벤트의 동작 ID는16바이트 GUID(클라이언트 연결 ID의 GUID와는 다름)에 4바이트 시퀀스 번호를 추가한 것입니다. 시퀀스 번호는 스레드 내의 요청 순서를 나타내며 스레드에서 일괄 처리 및 RPC 문의 상대적인 순서를 나타냅니다. ActivityID는 현재 데이터 액세스 추적이 활성화된 상태이고 데이터 액세스 추적 구성 단어의 18번째 비트가 ON 상태인 경우 SQL 일괄 처리 문과 RPC 요청에 대해 선택적으로 전송됩니다.

다음은 Transact-SQL을 사용하여 링 버퍼에 저장되고 RPC 및 일괄 처리 작업 시 클라이언트에서 전송된 작업 ID를 기록하는 확장 이벤트 세션을 시작하는 샘플입니다.

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)

참고 항목