일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CentOS
- OTT셋톱박스
- 딜라이브플러스h3
- GUI 또는 CLI전환
- YCSB
- VPN
- cloudready OS
- ipvlan
- putty
- 컨테이너 백업
- cmd인스톨러설치
- Oracle
- Linux
- 시스템예약종료
- Dell Venue 8 Pro
- #Oracle
- Windows
- MySQL
- docker
- cmd로msi파일설치
- 파이썬 스톱워치
- CentOS7
- docker container restore
- cubrid
- ventoy 사용법
- 영상배속
- 인강배속
- docker container backup
- 웹영상배속
- 컨테이너 복원
- Today
- Total
일단은 프로그래머 나부랭이
MVCC에 관하여 정리 본문
MVCC란
Multi Version Councurrency Control의 줄임말로, 해석하면 '다중 버전 동시성 제어'쯤 된다.
즉 MVCC는 DBMS의 동시성 제어를 위한 데이터 관리 기법이다.
(참고 : ko.wikipedia.org/wiki/다중_버전_동시성_제어)
비교를 위해, 기존의 동시성 제어 방법으로 알려진 Lock의 개념을 잠깐 살펴보자.
lock은 크게 read lock과 write lock으로 나누어진다.
간단하게 살펴보면,
- read lock(shared lock)이 걸린 데이터 D를 A가 점유하고 있을 때, B는 D를 read 할 수는 있지만, write 할 수는 없다.
- write lock(exclusive lock)이 걸린 데이터 D를 A가 점유하고 있을 때, B는 D를 read, write를 할 수가 없다.
lock은 해당 데이터를 선점한 사용자가 데이터의 lock을 해제하기 전까지는 다른 사용자가 해당 데이터를 컨트롤하는데 제약이 있다.
MVCC는 이런 lock의 단점을 보완하기 위한 것이다.
MVCC는 데이터의 업데이트를 할 때, 기존의 내용을 덮어쓰지 않고, 그 데이터의 새로운 버전을 만든다.
쉽게 말해서, A가 D라는 데이터의 D-0버전을 write 할 때, MVCC는 D데이터의 D-1버전을 만들고, 만약 write 도중에 B가 D데이터에 접근하면 D-0버전을 raed 할 수 있도록 해주는 것이다.
때문에 MVCC는 이론상 lock의 개념이 필요없다.
(하지만 일부 DBMS들은 MVCC와 lock을 함께 사용한다고 한다.)
MVCC의 특징을 간단하게 짚고 넘어가면
- lock 기법만 적용된 DBMS보다 훨씬 빠르게 동작
- 불필요한 데이터(위에서 말한 데이터 버전과 같은)이 많이 쌓여서 주기적으로 이를 정리해줄 별도의 시스템이 필요하다
- 데이터 버전이 충돌할 가능성이 있음 (이 때문에 MVCC와 lock을 같이 사용하는게 아닐까 싶네요)
MVCC의 불필요한 데이터를 관리하기 위해서는 대표적으로 아래의 방법들이 이용되는 것 같습니다.
- Vacuum 방식 : 데이터의 버전별 내용을 따로 저장하여 모아두고, 그것을 일정 시점에 삭제한다. (Postgre SQL, CUBRID 등)
(출처 : postgresql.kr/docs/9.4/routine-vacuuming.html, www.cubrid.org/manual/ko/11.0/sql/transaction.html?#vacuum)
- Undo Segment 방식 : 데이터의 최신 버전만을 유지하되, old버전은 undo 보관하고, 필요에 따라 undo의 내용을 읽어옴 (Oracle, InnoDB 등)
(출처 : mysqldba.tistory.com/335 )
'DBMS' 카테고리의 다른 글
(메모) CUBRID python driver test (0) | 2021.10.11 |
---|---|
태블릿 pc에서 DBMS 의 benchmark를 돌려보자 (0) | 2021.03.28 |
MSSQL의 timestamp에 대해서 (0) | 2018.07.05 |
varchar와 nvarchar의 차이 (0) | 2018.05.29 |
LOB과 BFILE에 대해서 정리 (0) | 2018.04.10 |