안녕하세요. MSSQL DB 지연 현상이 있어 문의 드립니다..
증상은 SP 1개를 짧은 시간 주기로 콜하는 다량의 CS프로그램들이 있는데요.
어느 순간, CS프로그램 모두에서 DB 접속 에러를 띄워, 순간적으로 데이터가 모두 꼬여버리는 현상이 발생하고 있습니다.
sp_readerrorlog를 확인해보니, SP 안의 구문에서 데드락 로그가 발생하고 있습니다..
문제가 발생할때, 데드락 로그가 남을때도 있고,, 안 남을때도 있네요..
여태 확인한 사항은
1. 장애 발생했을 시에 SQL 에이전트 작업 로그 확인하여, 행 걸린 JOB이 있는지 확인
-> 이상 없음.
2. DB HW 점검
-> 이상 없음.
3. 프로시져안에 콜하는 테이블들 데이터 삭제
-> 이상 없음.
다음에 해보려는게, 해당 테이블 인덱스리빌드와
각 클라이언트 별로 콜하는 SP를 나누고자 하는데요.
SP안의 테이블도 클라이언트 별로 나누자니.. 작업 공수가 어마어마해서.. 불가능 할 것 같고.
같은 내용의 SP를 클라이언트 명칭을 추가시켜 여러개 복사한 후,, 클라이언트에서 각각 SP를 콜하게끔 해보려고 합니다.
이렇게 해보려는 이유는.. 해당 SP 내의 트랜잭션을 데이터 방지를 위해 첫줄부터 마지막 줄까지 통으로 걸어놨는데요,,
통으로 트랜잭션이 걸린 SP를 다량의 클라이언트에서 콜해버려서.. 위와 같은 현상이 발생했을 수도 있을 것 같아서입니다..
그래서 내용은 같지만,, SP를 분리해서 클라이언트가 호출하게끔해보려고하는데..
효용성이 있을까요?
감사합니다..
Comment 1
-
minsouk
2018.10.25 00:18
데드락 그래프를 그려 상황을 보고 우회할 방법을 찾아야 합니다.