MS SQL 개발자로서 10년 정도 몸담고 있다가 이번에 Postgresql을 공부하게 됐습니다. (단순하게 철학이 마음에 들어서..)
제일 처음에 알아 본게 select * from table with(nolock) / Read uncommitted이게 되는지 한참을 찾아 봤는데 postgresql에서는 dirty read를 지원하지 않고
set tranaction에서 Read uncommitted해도 실제로는 Read committed으로 한다고 해서 그지같다라고 생각하고 메뉴얼에서 MVCC 얘기 하길래
닷넷 개발 MVC 개념인가 해서 그냥 SKIP했었는데 우연찮게도 구글에서 아래 문서를 발견하고 놀라움에 공식 메뉴얼의 MVCC를 다시 봤습니다.
결론은 MS SQL에서 SELECT * FROM TABLE WITH(NOLOCK)/Read uncommitted 을 하지만 Postgresql에서는 SELECT * FROM TABLE 이렇게 하고 개념 상으로 더 정확하다.
조회 하는 테이블/row에 Lock이 걸려도 SELECT 할때 대기(?)상태 없이 조회 하는 시점의 Commit상태된 데이터만 select하게 됩니다.
MVCC로 Lock을 제어 하기 때문에 다른 db처럼 Dirty Read 개념이 필요 없다.
자세한 내용은 아래 글을 읽어봐주세요. (이 철학 하나만 봐도 Postgresql은 대단하다는 생각이 듭니다.)
http://www.onlamp.com/pub/a/onlamp/2001/05/25/postgresql_mvcc.html
|