ADO.NET SQL Server, Oracle, OLE DB 및 ODBC용 .NET 데이터 공급자와 ADO.NET DataSet및 SQL Server 네트워크 프로토콜에서 지원하는 기본 제공 데이터 추적 기능을 제공합니다.
데이터 액세스 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
필드를 관찰할 수 있습니다.
속성을 사용하여 프로그래밍 방식으로 클라이언트 연결 ID를 SqlConnection.ClientConnectionID
가져올 수 있습니다.
ClientConnectionID
연결이 성공적으로 설정된 개체에 SqlConnection 사용할 수 있습니다. 연결 시도가 실패하면 ClientConnectionID
을 통해 SqlException.ToString
를 사용할 수 있습니다.
ADO.NET 스레드별 활동 ID도 보냅니다. 세션이 TRACK_CAUSALITY 옵션을 사용하도록 설정된 상태로 시작하는 경우 활동 ID는 확장 이벤트 세션에서 캡처됩니다. 활성 연결의 성능 문제의 경우 클라이언트의 데이터 액세스 추적(ActivityID
필드)에서 활동 ID를 가져오고 확장 이벤트 출력에서 활동 ID를 찾을 수 있습니다. 확장 이벤트의 활동 ID는 4 바이트 시퀀스 번호가 추가된 16 바이트 GUID(클라이언트 연결 ID의 GUID와 동일하지 않음)입니다. 시퀀스 번호는 스레드 내의 요청 순서를 나타내며 스레드에서 일괄 처리 및 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)