2014-02-20 4 views
2

안녕하세요!SQL Server 연결 풀링

나는 asp.net 연결 풀링에 의심의 여지가있다. 나는 때때로 "최대 풀 크기에 도달했습니다"예외를 throw하는 응용 프로그램에서 작업합니다.

우리 팀이 누출 된 일부 코드를 계속 살펴 봤지만 아무 것도 발견되지 않았습니다.

하지만 지금은 의심 스럽습니다. "최대 풀 크기에 도달했습니다"라는 메시지가 나타나면 데이터베이스 또는 서버의 최대 풀 크기에 도달 했습니까?

SQL Server가 여러 다른 asp.net 응용 프로그램에 대해 여러 데이터베이스를 호스트하는 경우 이러한 다른 데이터베이스가 내 데이터베이스에서 방해받을 수 있습니까? (데이터베이스가 동일한 SQL Server에 있음). 예 : 일부 애플리케이션에 누설 연결이있는 경우이 누출로 인해 애플리케이션에서 '최대 풀 크기'가 생성 될 수 있습니까?

감사합니다.

답변

3

ADO.NET은 연결 문자열마다 별도의 연결 풀 그룹을 유지 관리합니다. 따라서 데이터베이스가 여러 개인 경우 자체 풀이 있어야하며 풀이 서로 간섭하지 않아야합니다.

일부 요청에 시간이 오래 걸릴 수 있습니까? 단일 데이터베이스에 대해 한 번에 충분한 요청이 실행되고 지연되면 연결 풀이 열려있는 연결 때문에 연결 풀에 실제로 도달했을 수도 있습니다.

당신은 sp_who을 실행하여 또는 SQL Server Activity Monitor를 실행하여 데이터베이스에서 실행되는 것을 확인할 수 있습니다, 이러한 경우가 확인합니다. 방금 더 많은 연결이 필요하다는 것을 알아 않은 경우

select 
    NULL as [Connections by Database], 
    [host_name] as [Client Machine], 
    DB.name as [Database], 
    [program_name] as [Client Program], 
    COUNT(*) as [Open Connections] 
from sys.dm_exec_sessions s (nolock) 
    left join sys.dm_exec_requests r (nolock) 
     on r.session_id = s.session_id 
    left join sys.databases DB (nolock) 
     on DB.database_id = r.database_id 
where s.session_id >= 50 -- Ignore SQL Server processes 
group by [host_name], DB.name, [program_name] 
order by [Client Machine], [Database], [Client Program] 

, 당신이 한계를 조정할 수 있습니다

또한 데이터베이스에서 열린 얼마나 많은 연결 다양한 프로그램을 볼 수있는 데이터베이스에 DMV에를 조회 할 수 있습니다 Max Pool Size 속성을 100 이외의 값으로 설정하여 연결 문자열을 지정하십시오. 여기에 an example이 있습니다.

문제의 원인이되는 풀을보고 싶다면 디버깅 힙의 .NET 개체를 조사 할 수 있습니다. w3wp.exe 프로세스의 메모리 덤프를 캡처하여 WinDbg (또는 아마도 Debug Diagnostics Tool)와 같은 도구로 분석해야합니다. 나는 이것을 과거에 해왔다. 반드시 쉬운 것은 아니지만 많은 도움이 될 수 있습니다.

편집

당신이 새는 연결을 모니터링하는 데 사용할 수있는 perfmon counter for ADO.NET connection pooling있다. 성능 모니터에서 cxpand .NET Data Provider for SqlServer를 클릭하고 NumberOfReclaimedConnections 카운터를 추가합니다. 문서에 따르면,이 카운터 의미 :

쓰레기를 닫기 또는 폐기가 응용 프로그램에 의해 호출되지 않은 수집을 재생 한 연결의 수입니다. 명시 적으로 연결을 닫거나 처리하지 않으면 성능이 저하됩니다.

이 카운터는 응용 프로그램의 연결이 누수되는지 확인하기 위해이 카운터를 사용했습니다.

+0

음 ... 감사합니다!"여러 데이터베이스를 보유하고 있다면 자체 수영장이 있어야하며 수영장이 서로 간섭해서는 안됩니다." 내가 찾고 있었던 바로 그 wat이었다! :-) – AndreMiranda

+0

낯선 사람은 10 명의 사용자가 응용 프로그램을 사용한다는 것입니다 ... – AndreMiranda

+0

이러한 테스트 중 일부를 실행하여 누출이 없는지 확인하는 것처럼 들립니다. 적어도이 메시지가 발생할 때 데이터베이스를 확인하고 실제로 많은 연결이 있는지 확인하는 것이 좋습니다. –