Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit df51b32

Browse files
[InnoDB의 MVCC]
1 parent 8888f02 commit df51b32

File tree

5 files changed

+39
-6
lines changed

5 files changed

+39
-6
lines changed

‎.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.idea

‎README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
## 관계형 데이터베이스 (RDS)
12
### Common
23
- [Optimistic Concurrency vs Pessimistic Concurrency](https://github.com/technical-learn-room/database-learn/blob/main/rdb/common/optimistic-concurrency-vs-pessimistic-concurrency.md)
4+
### MySQL
5+
- [InnoDB의 MVCC]()
36

4-
### 관계형 데이터베이스 (RDS)
7+
##NoSQL
58

6-
### NoSQL
7-
8-
### Key-Value Store (KVS)
9-
#### Redis
10-
- [빈 리스트와 타입 간의 직렬화 문제](https://github.com/technical-learn-room/database-learn/blob/main/kvs/redis/%EB%B9%88%20%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%99%80%20not%20null%20%ED%83%80%EC%9E%85%20%EA%B0%84%EC%9D%98%20%EC%A7%81%EB%A0%AC%ED%99%94%20%EB%AC%B8%EC%A0%9C.md)
9+
### Redis
10+
- [빈 리스트와 타입 간의 직렬화 문제](https://github.com/technical-learn-room/database-learn/blob/main/nosql/redis/%EB%B9%88%20%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%99%80%20not%20null%20%ED%83%80%EC%9E%85%20%EA%B0%84%EC%9D%98%20%EC%A7%81%EB%A0%AC%ED%99%94%20%EB%AC%B8%EC%A0%9C.md)
File renamed without changes.

‎rdb/mysql/InnoDB의 MVCC.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## InnoDB의 MVCC
2+
3+
#### MVCC란?
4+
`MVCC``Multi Version Concurrency Control`의 약자로
5+
우리가 쓰기 작업을 하면서 읽기 작업도 동시에 가능하도록 하는 기술입니다.
6+
7+
> `MySQL`에 종속된 기술은 아닙니다.
8+
9+
#### MVCC의 동작
10+
`MVCC` 기술이 작동하는 방식은 스토리지 엔진마다 다릅니다.
11+
하지만 여기서는 대표적인 `InnoDB` 스토리지 엔진의 동작 방식만 알아볼 것입니다.
12+
13+
또한 `MVCC`는 데이터베이스의 격리 수준에 따라 동작할 수도 있고 동작하지 않을 수도 있는데,
14+
이는 `MVCC`가 트랜잭션과 밀접한 연관이 있기 때문입니다.
15+
16+
`InnoDB`에서 `MVCC`를 구현할 때 트랜잭션 버전을 이용하여 구현합니다.
17+
테이블의 레코드는 각각 생성 번호와 소멸 번호를 가지고 있는데
18+
이는 그 레코드가 생성된 시점의 트랜잭션 버전과 소멸된 시점의 트랜잭션 버전입니다.
19+
레코드가 수정될 경우 새 레코드를 만들며, 이전의 레코드는 삭제 처리합니다.
20+
삭제될 경우에는 삭제 번호를 매기며, 삽입시 생성 번호를 매깁니다.
21+
22+
삽입, 삭제, 수정의 경우에는 `READ COMMITTED` 수준과 `REPEATABLE READ` 수준이 같은 동작을 하지만
23+
조회는 격리 수준의 특징에 따라 조금씩 다릅니다.
24+
25+
- READ COMMITTED
26+
- 조회시 삭제 번호가 없거나, 현재 트랜잭션 버전보다 큰 번호인 레코드만 조회합니다.
27+
- REPEATABLE READ
28+
- 조회시 삭제 번호가 없거나, 현재 트랜잭션 버전보다 큰 번호인 레코드만 조회합니다.
29+
- 조회시 생성 번호가 현재 트랜잭션 버전과 같거나 작은 번호인 레코드만 조회합니다.
30+
31+
> `READ UNCOMMITTED` 수준은 모든 트랜잭션의 동작이 현재 트랜잭션에 영향을 미치므로 버전과 관계 없이 조회가 되어야 하고,
32+
> `SERIALZABLE` 수준은 현재 트랜잭션이 들어서는 순간 락을 걸어버려 아무도 건들지 못하기 때문에 버전 조회가 무의미합니다.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /