다음을 통해 공유


SqlClient에서 데이터 추적

적용 대상: .NET Framework .NET .NET Standard

ADO.NET 다운로드

.NET은 SQL Server 및 SQL Server 네트워크 프로토콜을 위한 Microsoft SqlClient 데이터 공급자가 지원하는 기본 제공 데이터 추적 기능을 제공합니다.

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

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

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

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

  • 잘못된 프로그래밍 논리

  • SQL Server용 Microsoft SqlClient 데이터 공급자와 사용자 고유의 구성 요소 간의 상호 작용으로 인해 발생하는 문제입니다.

다양한 추적 기술을 지원하기 위해 추적을 확장할 수 있으므로 개발자는 애플리케이션 스택의 모든 수준에서 문제를 추적할 수 있습니다. SQL Server용 Microsoft SqlClient 데이터 공급자는 일반화된 추적 및 계측 API를 활용합니다.

.NET에서 관리되는 추적을 설정하고 구성하는 방법은 데이터 액세스 추적을 참조하세요.

확장 이벤트 로그의 진단 정보 액세스

이제 SQL Server용 Microsoft SqlClient 데이터 공급자의 데이터 액세스 추적 기능이 확장 이벤트 로그에 있는 서버 연결 링 버퍼 및 애플리케이션 성능 정보를 사용하여 연결 실패 등의 진단 정보와 클라이언트 이벤트 간의 상관 관계를 더 쉽게 찾을 수 있도록 업데이트되었습니다. 확장 이벤트 로그를 읽는 방법에 대한 자세한 내용은 이벤트 세션 데이터 보기를 참조하세요.

연결 작업의 경우 SQL Server용 Microsoft SqlClient 데이터 공급자는 클라이언트 연결 ID를 전송합니다. 연결에 실패하면 연결 링 버퍼(연결 링 버퍼를 사용하여 SQL Server 2008의 연결 문제 해결)에 액세스하고 ClientConnectionID 필드를 검색하여 연결 실패에 대한 진단 정보를 얻을 수 있습니다. 클라이언트 연결 ID는 오류가 발생한 경우에만 링 버퍼에 로그인됩니다. 로그인 전 패킷을 전송하기 전에 연결이 실패하는 경우 클라이언트 연결 ID는 생성되지 않습니다. 클라이언트 연결 ID는 16바이트 GUID입니다. client_connection_id 동작이 확장 이벤트 세션에서 이벤트에 추가된 경우 확장 이벤트 대상 출력에서 클라이언트 연결 ID를 찾을 수도 있습니다. 추가 클라이언트 드라이버 진단이 필요한 경우 데이터 액세스 추적을 활성화하고 연결 명령을 다시 실행하여 데이터 액세스 추적에서 ClientConnectionID 필드를 관찰할 수 있습니다.

SqlConnection.ClientConnectionID 속성을 사용하여 클라이언트 연결 ID를 프로그래밍 방식으로 가져올 수 있습니다.

참고 항목

Microsoft SqlClient Data Provider for SQL Server는 2.1.0 버전부터 서버 프로세스 ID를 지원합니다. SqlConnection.ServerProcessId 속성을 사용하여 프로그래밍 방식으로 가져올 수 있습니다.

ClientConnectionIDServerProcessId는 연결을 성공적으로 설정하는 SqlConnection 개체에 사용할 수 있습니다. 연결 시도에 실패한 경우에는 ClientConnectionID을 통해 SqlException.ToString를 확인할 수 있습니다.

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

다음 SQL문은 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)

참고 항목