2013-09-08 4 views
1

IIS에 배포 된 웹 응용 프로그램이 있습니다. 시간 초과 오류가 발생하고 있으며 SQL 연결을 제대로 처리하지 못하는 코드로 문제를 추적했다고 생각합니다.풀에서 SQL 연결 시간 초과가 발생할 수 있습니까?

수정하기에 많은 수술이 필요하므로 적어도 using 블록을 사용하여 새 코드를 구현하고 테스트 할 때까지 연결 풀 크기를 천문학적 인 것으로 높이기로 결정했습니다. 하지만 그건 도움이되지 않은 것 같습니다. 내 연결 문자열은 다음과 같습니다

데이터 원본 = MyServer를; 초기 카탈로그 = MYDB; 사용자 ID = 참고 MyUser, 암호 = MyPwd; 최대 풀 크기 =

10000 그리고 내 로그 파일을 보여줍니다

System.InvalidOperationException : 시간 종료가 만료되었습니다. 풀에서 연결을 가져 오기 전에 시간 초과 기간이 경과했습니다. 이는 풀링 된 모든 연결이 사용 중이며 최대 풀 크기에 도달했기 때문에 발생했을 수 있습니다.

저는이 기간 동안 성능 모니터를 열어 놓았으며 사용자 연결 수는 약 150 명을 넘었습니다. 그래서 우리는 연결이 끊어 질 수 있다고 생각하지 않습니다.

이 오류의 원인은 무엇입니까?

+0

아마도 _server_ 측면에서 연결을 최대한으로 늘릴 수 있습니다. 연결이 닫혀 있는지 확인하고 가능한 한 자주 열어 두어야합니다. – Oded

+0

@Oded - SQL 서버가 최대 32,768 개의 연결을 지원할 수 있다고 생각했습니다. 아니면 내가 꿈꿔 왔니? –

+0

AFAIK (서버 및 데이터베이스)를 구성하는 경우 – Oded

답변

1

불행히도 SqlCommand는 ConnectionString 또는 SqlConnection의 시간 제한을 준수하지 않습니다. 그리고 그것은 수동으로 설정해야합니다. 연결 문자열에 언급 된 시간 초과가 연결을 위해 사용되고 실행되지 않기 때문입니다. 그래서 그것은 코드로 타임 아웃을 설정하는 것을 고려하십시오.

var conn = new SqlConnection(cs); 
var cmd = conn.CreateCommand(); 
cmd.CommandTimeout = conn.ConnectionTimeout; 
... 
관련 문제