.아래 질문글에 댓글을 달아주셔서 감사합니다.
추가로 댓글을 달려고 하니 안되서 새글로 시도합니다.
===========================================
제가 본문에 빠뜨린 내용이 있는거 같아 다시 여쭤볼게요.
예를 들어 세션1에서는
begin
select * from table1
하고
세션2에서
truncate table table1
하면
세션2가 blocking 당하면서 waiting 합니다.
만약 ms-sql 같은 DB 에서라면 이런상황에서 세션2에서 truncate 가 수행됩니다. (제가 test 안해보고 경험으로 적는거라 틀릴수도 있지만)
그런데 Postgresql 에서는 세션1이 access shared lock 을 걸고있는걸로 확인되네요.
그래서 제가 좀 이상하게 생각한게 select 가 수행중일때는 shared lock 이 걸리는게 맞지만
select 가 끝난이후에는 (begin transaction이 걸려있다하더라도) lock 이 해제되어야 하는게 아닌가 하고 생각한겁니다.
이부분이 제가 궁금한 부분이구요..
EDB 교육자료를 찾아보니 다른 DB와 달리 access share, access exclusive 란게 있네요.
그래서 (begin tran 하고) select 를 하면 access shared lock 이 걸리고 다른 세션에서 access exclusive lock 이 필요한 작업
(alter table, drop table, trunate 등등) 을 하면 lock 호환이 안되기 때문에 block 걸릴수있다는걸 알았습니다.
근데 그렇다고 해도 위에서 제가 언급한 부분 (select 가 끝나도 lock 을 유지하는 현상)은 궁금증이 해소가 안됩니다.
혹시 이런 부분에 대한 자료를 찾아볼 수 있을까요?
제가 아직 PostgreSQL 에 대한 지식이 미천하여 이런 질문 드립니다. ^^;;
|