타임 아웃을 디버그하는 몇 가지 좋은 방법은 무엇입니까? (씨#)
-
05-07-2019 - |
문제
나는 몇 시간 동안 잘 작동하는 사이트를 만들고 있지만 *.asmx 및 *.ashx 호출은 타이밍을 시작합니다.
예외 : "시간 초과가 만료되었습니다. 풀에서 연결을 얻기 전에 경과 한 시간 초과 기간은 모든 풀링 된 연결이 사용되었고 최대 풀 크기에 도달했기 때문에 발생했을 수 있습니다."
나는 subsonic을 ORM으로 사용하고 있습니다.
문제는 몇 분마다 실행되고 데이터베이스에 도달하는 예정된 작업을 기반으로합니다. SQL Server 2000의 "Current Activity"를 볼 때 다음과 같습니다.
- "수면"상태가있는 100 개의 프로세스
- 100 자물쇠
100 개의 프로세스는 응용 프로그램 ".NET SQLClient Data Provider"에서 나온 것이며 명령은 "대기 명령"입니다.
그래서 나는 그것이 문제라고 생각합니다. . 그러나 어떻게 문제를 해결합니까? 이것은 DB에서 교착 상태처럼 들리나요? 을하자마자
C : > iisrestart
, 모든 것이 괜찮습니다 (잠시 동안).
감사합니다 - 나는 이런 일을 한 적이 없으며 진행하는 가장 좋은 방법은 확실하지 않습니다.
남자 이름
해결책
이 문제의 복제 일 수 있습니다. Connection Pooling이 SubSonic에서 올바르게 작동합니까?
LoadandCloseReader () 대신로드 ()로 개체를로드하는 경우 각 연결이 열려 있고 결국 연결 풀이 배출됩니다.
다른 팁
컬렉션에서 load ()를 호출 할 때 독자가 열린 상태로 남겨 둡니다. 리더가 닫기를 원하거나 사용 블록을 사용하는 경우 LoadandCloseReader () 호출하십시오.
소스 코드도 갖는 데 도움이됩니다.
나는 subsonic에 대해 아무것도 모르지만 아마도 당신은 데이터베이스 '컨텍스트'를 유출하고 있습니까? 데이터베이스 리소스를 완료 한 후에 모든 데이터베이스 리소스가 폐기되고 있는지 확인합니다 ...