SQL2000 강좌
이번에 드릴 이야기는..
별 내용은 아닙니다. ^_^ 잠금이 걸리는 상황을 타개해보자..의 연장이라고 보시면 됩니다.
잠금을 보고 확인하는 부분은 간단하게 말씀을 드렸구요.
sp_who나 sp_who2를 이용해 잠금을 유발하는 사용자 - 프로세스 - 를 보실 수 있으며
역시나 이녀석들을 죽이거나 어떻게 처리를 해 줘야 하겠지요.
방법은 두가지 입니다.
1. kill 명령으로 죽인다.
sp_who 로 잠금을 유발하는 녀석을 검사하고..
kill 프로세스ID 명령으로 죽이시면 됩니다.
물론 거의 사용하실 일 없습니다. kill 명령으로 죽인다고 문제가 해결되는 경우는
없습니다. 100명의 오퍼레이터가 있으며 개별 오퍼레이터가 사용하는 모듈을 각각
10~30개의 VB로 만들어진 모듈을 사용한다. 그중 하나의 오퍼레이의 1개 모듈이
잠금을 유발한다면? 아무리 kill 명령으로 죽여봐야 모듈의 버그를 잡고 다시 배포하지
않는 이상 계속 문제가 발생할 것이기 때문입니다.
2. lock timeout을 이용하는 방법
사실 이녀석은 데드락을 줄이는 부분일 수 있지만..
적절한 응답시간을 얻기 위해서 사용하는 것도 좋은 방법 입니다.
|
--락 타임아웃 시간 조사
|
네 이렇게 관리가 가능합니다.
하지만.. 다시 말씀 드리면..
문제가 되는 모듈을 찾고 이부분을 해결하는 것이 더더욱 중요하지요.
이렇게 보시는 바와 같이..
성능 모니터링에서 잠금과 관련된 - 데드락 포함 - 여러 이벤트를 조사할 수 있습니다.
또한.. 수행중 데드락(Dead Lock) 이라고 하는 교착상태에 빠질 경우에 역시
참고하실 수 있습니다.
DaedLock이 발생할 경우는
트랜잭션(프로세스 ID xxx)이 (xxx) 리소스에서 다른 프로세스와의
교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오
식의 오류 메세지가 발생하며..
역시나 성능툴로 모니터링이 가능하구요.
이어서 프로필러를 이용 하시면..
이렇게 Deadlock을 조사할 수 있습니다.
그러면 어느 모듈이나 어느 부분이 문제를 발생하는지 판단이 가능하겠지요. ^_^
...
잠금 관리에서.. 갑자기 데드락까지 넘어 가는군요.. 끝으로.
잠금으로 발생하는 여러 상황을 보셨습니다. 모니터링 하는 방법도요..
이런 케이스가 있더군요..
sp_who2 로 뭐.. 잘 블러킹을 볼 수 있습니다.
- 하지만 동시에 문제의 쿼리를 볼수는 없더군요.
블러킹등이 발생하는 상황은 잘 알 수 있습니다.
- 하지만 로깅을 하고 나중에 분석하려할때 대단히 어렵더군요.
이런 저런 이유로.. 프리웨어를 제가 만들었구요..
사실 담배값 - 아시죠. This 한갑은 1300원.. 에 팔까..
담배는 피우면서 만드니.. T.T
했으나.. 뭐.. 사실 신경쓸 부분이 이쪽이 아니고.. -_-;;;
사이트 정신에도 위배 되기 때문에.. 프리웨어로 공개 합니다. ^_^
말은 이렇게 해도.. 참 목구멍이 포도청이라.. 힘든 결심이었답니다. T.T
자료실에서 다운로드 받으실 수 있구요..
이곳 자료실을 참고 하시길 바랍니다.
이곳에서 받으실 수 있습니다.
물론 코난이나.. 다른곳으로 정보 전송 없습니다. - 스파이 웨어 같은거 할줄
알면 좋겠으나. -_-;; 물론 그런것 없으며.. 나중에 기회가 되면 -__-+++
COM 구성요소로 업글해 만들 생각은 있습니다. - 현재는 C/S입니다.
버그가 있다면 그냥.. 메일만 주시고..
Windows2000 서버와 어드밴스드 서버, 프로에서는 잘 돌아 갑니다.
물론 SQL서버가 설치된 시스템이나.. 원격 시스템(랜상을 기준으로 만들었습니다.)도
잘 됩니다. 도움말 없다고 미워 마시고.. 이곳을 참고해 보세요..
대충 쿼리 분석기 처럼 붙으면.. 이런 서버 정보 화면 나옵니다.
아시죠? 서버 정보일 뿐입니다. -_-;;
중요한 블러킹 화면으로.. 시작 - 멈춤이 있구요..
보시면.. blkby라는 컬럼이 있지요? 블럭하는 녀석이고..
blk된 녀석까지 붉은 색으로 했습니다.
그리고.. 오른쪽 윗부분에 SPID와 Query를 실시간으로 - 사실 약간의 딜레이가 있으므로
LAN상의 SQL서버 시스템을 이용하시길 권장합니다. - 보실 수 있습니다.
옵션중에는.. 리프레시 간격을 초단위로 조절이 가능하며..
히스토리로 로깅하시고..블럭 히스토리 탭에서 나중에 다시 블럭된 쿼리를
보실 수 있습니다. - 어느 모듈이 문제인지 즉시 확인 가능하겠죠?
나머지는 직접.. 해 보시길..
테스트는 SQL2000에서 했으며.. SQL7에서도 돌아는 가는 걸로 압니다.
System Admin 롤의 계정을 사용하셔야만 하며 - 그래야 DBCC명령 등 잘 됩니다.
내부적으로 master DB에 하나의 저장 프로시져를 생성하고 그녀석으로 위의 정보를
보여주는 겁니다. - 버그가 있더라도 양해하시고..
그냥.. 있는 그대로 사용해 주시길 바랍니다. -_-;;
저역시 가끔 사이트에서.. 블러킹 확인할때의 용도로만 사용합니다.
한 컨커런트한 유저가 50명 정도가 되어도 끄떡 없이 잘 보여주니 참고하세요.
히스토리 분석 탭으로... DB선택, 호스트 이름 선택, 어플리케이션 이름 선택..
그리드의 높이 조절 기능이 있으니 참고하세요. - 이정보는 서버가 아닌 로컬 시스템에
이진 화일로 저장 됩니다. - 엑세스 형식
항상 걸고 사용하는 것은 권장하지 않으며..
위에 말씀 드린대로.. 원하는 정보만 볼수 있게 만든 기능성 프로그램입니다.
소스 공개는.. 나중에 시간 여유가 되어서 3Tier로 재구축이 가능하게 된다면
그때 공개 하도록 하구요. 허접하지만.. 나름대로 여러 목적으로 이용 가능합니다.
어느 SQLER의 회원님은 웹서버 로드 밸런싱 확인 용도로 쓰시더군요. -_-;;
패키징을 인스톨 실드 7.1 DEV버젼으로 했구요.. 그리두는 모두 제가 좋아하는
투루디비그리드.. -_-;;
ADO 2.6을 사용하며.. 히스토리는 엑세스로 생성 했습니다.
그럼 끝으로.. 데드락 이야기를 하도록 할까요!
11. 트랜젝션과 잠금처리 - 6. 잠금 관리 문서의 끝입니다.

부족하지만, SQLER의 누군가와 함께한 나눔을 통해 제가 더 많이 즐거웠습니다.
SQLER와 함께 즐거워 할수록, 그 나눔을 통해 더 많은 기회와 가치를 발견하게 되었습니다.
나눔의 생각이 앞으로도 계속, SQLER를 움직일 것입니다.
코난, 김대우 / SQLER 운영자 / 골라먹는 SQLER RSS 정보 구독 / 실시간 SQLER 소식 uxkorea 트위터

코난