잠금 관리

ms-sql 2015. 1. 5. 16:51

잠금을 보고 확인하는 부분은 간단하게 말씀을 드렸구요.

sp_whosp_who2를 이용해 잠금을 유발하는 사용자 - 프로세스 - 를 보실 수 있으며

역시나 이녀석들을 죽이거나 어떻게 처리를 해 줘야 하겠지요.

방법은 두가지 입니다.

1. kill 명령으로 죽인다.

sp_who 로 잠금을 유발하는 녀석을 검사하고..

kill 프로세스ID 명령으로 죽이시면 됩니다.

물론 거의 사용하실 일 없습니다. kill 명령으로 죽인다고 문제가 해결되는 경우는

없습니다. 100명의 오퍼레이터가 있으며 개별 오퍼레이터가 사용하는 모듈을 각각

10~30개의 VB로 만들어진 모듈을 사용한다. 그중 하나의 오퍼레이의 1개 모듈이

잠금을 유발한다면? 아무리 kill 명령으로 죽여봐야 모듈의 버그를 잡고 다시 배포하지

않는 이상 계속 문제가 발생할 것이기 때문입니다.

2. lock timeout을 이용하는 방법

사실 이녀석은 데드락을 줄이는 부분일 수 있지만..

적절한 응답시간을 얻기 위해서 사용하는 것도 좋은 방법 입니다.


--락 타임아웃 시간 조사
select @@lock_timeout

--락 타임아웃 설정 : 단위는 미리초
SET LOCK_TIMEOUT 1800
GO

select @@lock_timeout

 

네 이렇게 관리가 가능합니다.

하지만.. 다시 말씀 드리면..

문제가 되는 모듈을 찾고 이부분을 해결하는 것이 더더욱 중요하지요.



이렇게 보시는 바와 같이..

성능 모니터링에서 잠금과 관련된 - 데드락 포함 - 여러 이벤트를 조사할 수 있습니다.

또한.. 수행중 데드락(Dead Lock) 이라고 하는 교착상태에 빠질 경우에 역시

참고하실 수 있습니다.

 

DaedLock이 발생할 경우는

트랜잭션(프로세스 ID xxx)이 (xxx) 리소스에서 다른 프로세스와의

교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오


식의 오류 메세지가 발생하며..

역시나 성능툴로 모니터링이 가능하구요.

이어서 프로필러를 이용 하시면..



이렇게 Deadlock을 조사할 수 있습니다.

그러면 어느 모듈이나 어느 부분이 문제를 발생하는지 판단이 가능하겠지요. ^_^

출처:

http://www.comqna.net/bbs/tb.php/database/18/85b0dbf28ecc6ce371416ede9b1fb339

'ms-sql ' 카테고리의 다른 글

잠금과 동시성  (0) 2015.01.05
잠금(Lock)의 이해  (0) 2015.01.05
데드락(Deadlock)처리  (0) 2015.01.05
Posted by 유지현 운동중독
,