2013-02-22 1 views
6

우리는 C# 클라이언트, C# WCF 웹 서비스 계층 및 SQL Server 데이터베이스가있는 3 계층 응용 프로그램을 사용합니다. 웹 서비스는 ADO.NET을 사용하여 데이터베이스에 연결합니다. 모든 C# 코드는 .NET Framework 2.0을 사용합니다.ADO.NET 연결 열기 시간 모니터링

최근 고객이 애플리케이션에 스트레스 테스트를 수행했습니다. 테스트하는 동안 웹 서버는 다음과 같은 많은 오류를 생성했습니다.

연결 문자열 '...'에 대해 데이터베이스에 연결할 수 없습니다. 제한 시간이 만료되었습니다. 작업이 완료되기 전에 시간 초과 기간이 경과되었거나 서버가 응답하지 않습니다.

연결 풀이 꽉 찼을 때 연결 오류를 잡아 연결 풀 외부에서 연결을 시도하는 방법이 있음을 알고 있습니다. 또한 튜닝해야 할 몇 가지 쿼리를 발견했지만 웹 서버 연결 시간 초과를 설명하지는 않습니다.

웹 서버가 데이터베이스에 연결하는 시간 초과 이유를 파악하려고합니다. ADO.NET performance counters을 모두 사용하도록 웹 서버를 설정했습니다. 그러나 연결에 필요한 시간이나 연결 제한 시간 등과 관련된 내용은 표시되지 않습니다. 이상적으로는 다른 ADO.NET 카운터 옆의 perfmon에 연결 시간을 그래프로 나타낼 수 있습니다.

연결을 획득 할 때 ADO.NET 성능을 모니터링하는 방법이 있습니까?

연결을 열려고 시도 할 때마다 "평균 연결 열기 시간"성능 카운터를 만들 수 있다고 생각하지만 이미 존재하는 것을 사용하고 싶습니다.

+0

SQL 프로파일 러는 이와 관련하여 도움이 될까요? –

+0

@MrMose : 프로파일 러는 문제 쿼리를 찾는 데 많은 도움이되었습니다. 그러나 연결 시간을 모니터링하여 그들이 언제 올라 가기 시작하는지 그리고 시간이 초과되는지 알 수있는 뭔가가 필요합니다. –

답변

2

perfmon을 사용하면이 정보를 얻을 수 있습니다. User Connections 모니터에 SQL Server: General Statistics 아래에 첨부해야합니다. Here is the blog post 나는 그것을에서 움켜 잡았다. 그러면 연결이 열려있는 시점을 알 수 있습니다.

그런 다음 응용 프로그램 작업 (즉, 계속해서 올라가는 것을 볼 때 응용 프로그램에서 수행중인 작업)과 관련시켜야합니다.

using (SqlConnection cn = new SqlConnection("some connection string")) 
{ 
    cn.Open(); 
    ... 
} 

이 일을함으로써 당신이 Close를 발행 할 필요가 없습니다 : 당신은 당신이하지 이미한다면 당신은 using 문 내부에 이러한 연결을 얻고 싶은 거라고 수행하면

그리고 그들에 대해 걱정할 필요가 없습니다.

간단히 말해 성능 카운터는 문제의 원인이되는 응용 프로그램의 코드를 추적하는 데 도움을 주지만 말만큼 줄이지는 않습니다.

+0

감사합니다.하지만 응용 프로그램 연결 diposal 걱정하지 않습니다. 나는 우리 데이터 객체가 올바르게 그것을하고 있음을 확신한다. 왜 가끔 데이터베이스에 연결하는 데 오랜 시간이 걸리는지 궁금합니다. 특히, perfmon을 통한 연결 획득 시간을 모니터링하여 I/O 또는 CPU 사용량 보류와 같은 데이터베이스 번호에 연결 획득 시간의 스파이크를 일치시킬 수 있습니다. 나 자신의 카운터를 만드는 것 이외의 다른 방법은 없다. –