database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10082 게시물 읽기
No. 10082
[질문] 아래 질문 에 대한 재질의...
작성자
이한철
작성일
2019-06-12 19:45
조회수
3,224

.아래 질문글에 댓글을 달아주셔서 감사합니다.

추가로 댓글을 달려고 하니 안되서 새글로 시도합니다.

 

 

===========================================

제가 본문에 빠뜨린 내용이 있는거 같아 다시 여쭤볼게요.

예를 들어 세션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 에 대한 지식이 미천하여 이런 질문 드립니다.  ^^;;

 

  

 

 

이 글에 대한 댓글이 총 4건 있습니다.

 잠금에 대한 동시성 제어 관련은 공식 문서를 참고 하면 됩니다. EDB PAS와 PostgreSQL이 완벽하게 같거나, 거의 비슷합니다. 

commit 을 기다리고 있는 트랜잭션에서 사용한 모든 테이블은 트랜잭션이 종료되기 전까지는 적당한 lock을 유지하고 있습니다. 이게 PostgreSQL 정책입니다. 

truncate는 제일 배타적인 잠금을 사용하기 때문에, 작업전 그 테이블의 어떤 사용도 없어야 작업을 진행할 수 있습니다.

자세한 설명은 공식 설명서를 참조하세요.

김상기(ioseph)님이 2019-06-13 11:49에 작성한 댓글입니다.

다른 dbms랑 좀 다르게 동작하는 것 같기는 합니다.

제가 테스트 한건 informix, db2, oracle 정도인데 트랜잭션 내의 select로 인해 테이블락(shared)이 잡히진 않았고 truncate 문장도 잘 수행됐습니다.

그래서 postgresql에서 명시적으로 isolation level을 uncommitted read로 설정하고 조회를 시도해보았는데, 역시 마찬가지로 테이블락을 사용합니다. 매뉴얼을 보니 uncommitted read가 committed read로 작동하는 것 같더군요.

정상규(pajama)님이 2019-06-13 15:19에 작성한 댓글입니다.

 pg의 truncate 는 rollback 이 됩니다. 그것 때문에 이런 정책을 쓰는 것 같습니다. 

begin;

truncate;

rollback;

 

김상기(ioseph)님이 2019-06-13 16:24에 작성한 댓글입니다.

공식문서에서 찾은 내용입니다.

 

 Once acquired, a lock is normally held till end of transaction

 

한줄....^^

 

PostgreSQL 은 DML 도 rollback 이 되는것도 참 신기합니다 ^^

역시 DB는 제대로 공부해서 써야되나봐요~

답글 주신분들 모두 감사합니다~~~

 

이한철님이 2019-06-13 17:05에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
10086자식 table drop constraint 시 부모 table에 대한 relation lock 발생관련 문의입니다. [2]
김은경
2019-06-25
2981
10084포스트그레 sql 튜닝용 힌트 [1]
오노
2019-06-19
3433
10083주소에 한단어나 두 단어 이상 검색 어떻게 해야되나요? [4]
이기자
2019-06-19
3047
10082[질문] 아래 질문 에 대한 재질의... [4]
이한철
2019-06-12
3224
10081[질문] select 시 locking 현상? [1]
이한철
2019-06-12
3179
10080넘버링 방법 [1]
일쌍다반사
2019-06-07
3029
10079postgresql 이미지 insert 방법.. [1]
한재원
2019-06-07
3071
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다