Session 상태가 SQL Server인 경우 DB가 느려지고 사이트가 Time Out 되는 문제
1. 증상
- 사이트가 불규칙적으로 "제한시간만료" 에러 페이지 리턴
- w3wp.exe 의 메모리와 상관없이 사이트가 멈춤, w3wp.exe 서비스 프로세스를 끝내면 바로 돌아옴
- DB 직접 SSMS 연결 상태의 경우도 간혹 멈추거나 먹통이 되는 경우
- ASPStateTempSessions 테이블의 데이터가 약 3000 이상이 될 때 발생.
2. 문제 발생 환경
- IIS 서버
- Session 상태 관리를 MS SQL Server 에 두는 경우
- SQL Server 에이전트의 작업 중 "ASPState_Job_DeleteExpiredSessions" 의 일정이 매일 1분마다 호출
3. 내용
1) "ASPState_Job_DeleteExpiredSessions" 작업안에는 SP인 "DeleteExpiredSessions" ( DB: ASPState ) 가 단계로 포함되어 있음.
"DeleteExpiredSessions" 의 역활은 만기된 세션 ID 의 레코드를 삭제하는 역활
2) "DeleteExpiredSessions"은 SQL에서 자동으로 만들어 주는 SP로 기본적으로 다음과 같은 구문이로 이뤄짐
3) 테이블 "ASPStateTempSessions" 에서 만기일자가 현제일자 보다 적은 경우 삭제하라는 문구
이는 테이블 X Lock 을 발생시킴.
4) 웹 사이트에서 많은 브라우져 세션들이 만기일자를 업데이트 하기 위해 접근, 이것은 SP "DeleteExpiredSessions" 작업과 경합 및 충돌을 일으킬수 있음
4. 해결책
1) "ASPState_Job_DeleteExpiredSessions" 의 작업 일정을 매일 30분마다 호출
2) SP "DeleteExpiredSessions"의 구문을 바꿔줌
테이블 Lock 이 아닌 커서를 이용해 Row Lock 이 걸리도록 유도
'프로그래밍 > ASP NET' 카테고리의 다른 글
목록(list) 페이지에서 Search,View,기타 Action의 form submit 처리 방법 (0) | 2014.01.03 |
---|---|
[C#] Split 함수, Separator가 문자열인 경우 처리 (0) | 2013.10.04 |
[Razor View]문자열 + 변수 설정 방법 (0) | 2013.04.03 |
JsonResult , 단일 Class, List Class로 리턴 (0) | 2013.04.02 |
[MVC] jQuery를 이용하여 BeginForm의 action 또는 controller 바꾸기 (0) | 2013.02.07 |