Transaction
- ์ต์ข ์์ : 2024๋ 2์ 14์ผ
Jim Gray (1944-2007)

-
์ธ๊ณ ์ต์ด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค System-R ๊ฐ๋ฐ
-
ํธ๋์ญ์ ๊ฐ๋ ์ ์
-
2 Phase Locking
-
Granularity Locking
-
ํ๋ง์๊ณผ ์ฐฐ์ค๋ฐฐ๋น์ง์ ์์
๋ณต์ต
-
InnoDB๋ ๋ ์ฝ๋ ๊ธฐ๋ฐ ์ ์ฅ๊ตฌ์กฐ
cf. column store (Amazon Redshift) -
RID (page #, slot #)๋ฅผ ํตํด ๋ ์ฝ๋ ์ ๊ทผ
-
B-tree ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค
-
Secondary Index๋ PK๋ฅผ ์ฐธ์กฐํจ
-
๋ ์ฝ๋ ๊ธฐ๋ฐ ์ ๊ธ์ ์ง์ํ์ง๋ง ์ค์ ๋ฌผ๋ฆฌ์ ์ ๊ธ์ ์ธ๋ฑ์ค์ ๊ฑธ๋ฆผ
ํธ๋์ญ์ ์ ์ฑ์ง
A: Atomicity
C: Consistency
I: Isolation
D: Durability
์ฐธ๊ณ : CAP ์ด๋ก
C: Consistency
A: Availability
P: Partition Tolerence
์
๋ชจ๋ ๋ง์กฑ์ํค๋ ์์คํ
์ ๊ตฌํํ ์ ์๋ค.
(ํธ๋์ญ์
์ ์ผ๊ด์ฑ๊ณผ ์๋ฏธ๊ฐ ๋ค์ ๋ค๋ฆ)
๋ง์ NoSQL์ ์ผ๊ด์ฑ์ ํฌ๊ธฐํจ
์ฐธ๊ณ : Eventual Consistency
๋ฏธ๋์ ์ธ์ ๊ฐ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋๊ธด ํ๋๋ฐ ๊ทธ ์์ ์ ์ ํด์ง์ง ์์์ ๊ฒฝ์ฐ
S3, DynamoDB๋ฑ ๋ง์ AWS ์ ํ๊ตฐ์ด ์ด๋ฅผ ์ง์
์ฐธ๊ณ , NoSQL์ ํน์ฑ
BA: Basically Available
S: Soft State
E: Eventual Consistency
์ฐ VS ์ผ๊ธฐ??
ํธ๋์ญ์ ๊ณผ Serial Schedule
-
๊ฐ์ฅ ์ฝ๊ฒ ACID๋ฅผ ์ง์ํ๋ ๋ฐฉ๋ฒ์?
-
ํ ๋ฒ์ ํ๋์ฉ์ ํธ๋์ญ์ ๋ง ์คํ
Serial Schedule
์ธ ํธ๋์ญ์ A, B, C๊ฐ ์์ ๋ ํ ๋ฒ์ ํ๋์ฉ ์คํํ์ ๋ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ค์ ์งํฉ
3!
Serializable
์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ๊ฒฐ๊ณผ๊ฐ Serial Schedule์ ๋ถ๋ถ์งํฉ์ธ ๊ฒฝ์ฐ Serializable์ด๋ผ๊ณ ํจ
Lock ์์ด ํธ๋์ญ์ ์ด ๊ฐ๋ฅํ ๊น?
-
Optimistic Concurrency Control VS Pessimistic Lock
-
https://en.wikipedia.org/wiki/Optimistic_concurrency_control
Transaction์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ค
Lost Update Problem
-
๋ ๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ํ ์์ดํ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์
-
ํธ๋์ญ์ ์ ์ง์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋ฐ์ํ๋ฉด ์ ๋จ
(P1) Dirty Read Problem
- ํ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ ๊ฐ์ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ฝ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์

(P2) Non-repeatable Read Problem
- ํ ํธ๋์ญ์ ์์ ๊ฐ์ ๊ฐ์ ๋ ๋ฒ ์ฝ์์ ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ด ์ฝํ๋ ๊ฒฝ์ฐ

(P3) Phantom Read Problem
- ์ฃผ๋ก ํต๊ณ๋ ๋ถ์, aggregation function ๋ฑ์ ์ํํ๋ ์ฟผ๋ฆฌ์์ ์๋ชป๋ ๊ฐ์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ

Transaction Isolation Level
ANSI SQL (SQL92)

-
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ง์ํ๋ ๋ ๋ฒจ์ด ๋ค๋ฆ
-
MySQL๊ณผ MS-SQL์ 4๊ฐ์ง ๋ชจ๋ ์ง์
-
MySQL default: Repeatable Read
Isolation Level ํ์ธ ๋ฐ ๋ณ๊ฒฝ (MySQL 5.7 ์ด์ )
SHOW VARIABLES LIKE 'tx_isolation';
SET TRANSACTION ISOLATION LEVEL ๋ ๋ฒจ;
START TRANSACTION;
-- QUERY START
COMMIT | ROLLBACK;
๊ฐ๋ฅํ ๋ ๋ฒจ
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
Isolation Level ํ์ธ ๋ฐ ๋ณ๊ฒฝ (MySQL 5.7)
https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html
SELECT @@GLOBAL.transaction_isolation, @@transaction_isolation;
SET GLOBAL transaction_isolation='REPEATABLE-READ';
SET SESSION transaction_isolation='SERIALIZABLE';
๊ฐ๋ฅํ ๋ ๋ฒจ
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
MVCC
MySQL์ InnoDB๋ ์ค๋ผํด๊ณผ ๊ฐ์ด MVCC๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ
-
์ ๋ฐ์ดํธ ์ค์๋ ์ฝ๊ธฐ๊ฐ ๋ธ๋ก๋์ง ์๋๋ค.
-
์ฝ๊ธฐ ๋ด์ฉ์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
-
์ ๋ฐ์ดํธ์ X๋ฝ์ด ์ธ๋ฑ์ค์ ๊ฑธ๋ฆฐ๋ค.
-
์ ๋ฐ์ดํธ์ ๋ฝ์ ๋์์ด ์ค์ ์ ๋ฐ์ดํธ ์์ดํ ๋ณด๋ค ๋ ํด ์ ์๋ค.
-
๋์ ์ ๋ฐ์ดํธ๋ฅผ ์ํ์ ๋์ค ํธ๋์ญ์์ ๋ธ๋ก๋๋ค. ์ผ์ ์๊ฐ ์ง๋๋ฉด Lock Timeout์ด ๋ฐ์ํ๋ค.
-
์ ๋ฐ์ดํธ์ ์ด์ ๊ฐ์ Undo Log๋ก ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ์ ์ ์งํ๋ค. ์ด ๊ฐ์ ๋กค๋ฐฑ์์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ์ฝ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
Repeatable Read
-
MySQL์ ๊ธฐ๋ณธ ๋์ ๋ชจ๋
-
์ฒซ ๋ฒ์งธ ์ฝ๊ธฐ์ ์ค๋ ์ท์ ์์ฑํจ
-
์ดํ ๋์ผ ํธ๋์ญ์ ์์๋ ์ค๋ ์ท์์๋ถํฐ ๊ฐ์ ์ฝ์
-
์ ๊ธ์ ๋์์ unique index, secoendary index์ ์ ๋ฌด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง
Read Committed
-
์ปค๋ฐ๋ ์์ดํ ์ ์ฝ์ ์ ์๋ ๋ชจ๋
-
์ปค๋ฐ๋์ง ์์ ๊ฐ์ ์ฝ์ ์ ์๋ค.
-
๊ฐ์ ํธ๋์ญ์ ์์๋ ์ต๊ทผ์ ์ค๋ ์ท์ ์ฝ๋๋ค.
Read Uncommitted
-
๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ฐ๊พผ ๊ฐ์ด ํธ๋์ญ์ ์ค๊ฐ์๋ ๋ฐ์๋๋ค.
-
Read Committed์๋ ๋ค๋ฅธ ๊ฐ์ด ์ฝํ ์ ์๋ค.
-
์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ฅ ์ต์ ์ ๋ฐ์ดํธ ๊ฐ์ ์ฝ๋๋ค.
-
์๋นํ ์ํํ๋ค!
Serializable
-
MySQL์์๋ ๋ชจ๋ SELECT๋ฌธ์ S๋ฝ์ด ๊ฑธ๋ฆฐ๋ค.
-
Repeatable Read์์๋ Phantom ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก ๋ง์ด ์ฌ์ฉํ์ง ์๋๋ค.
-
์ญ์๋ ๋งค์ฐ ์ํํ๋ค!
๊ธฐํ
-
MySQL์์๋ ํธ๋์ญ์ ๋ ๋ฒจ์ ๋ฐ๋ผ binlog ํํ๊ฐ ๋ฐ๋๋ค.
-
์ด์ ๋ฒ์ ์์๋ row ๋ ๋ฒจ์ด ์ฉ๋๊ณผ ์ฑ๋ฅ๋ฌธ์ ๊ฐ ์์ด์ ์ฃผ๋ก mixed๋ statement๋ฅผ ์ฌ์ฉํ๋๋ฐ 5.7๋ถํฐ row ๋ ๋ฒจ์ ๋ง์ ๊ฐ์ ์ด ์์๋ค๊ณ ํจ
๋ถ์ฐ ํ๊ฒฝ์์์ ํธ๋์ญ์
2 PC (2 Phase Commit)
-
๋ถ์ฐ ํ๊ฒฝ์์ ํธ๋์ญ์ ์ ๋กค๋ฐฑ๊ณผ ์ปค๋ฐ์ ๊ฒฐ์ ํ๋๋ฐ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ
-
์ค๋ผํด ๋ฑ์์ ์ง์
MySQL์ 2PC
-
MySQL 5.7 ๋ถํฐ XA ํธ๋์ญ์ ์ ์ง์ํจ
-
์ถ์ฒํ์ง๋ ์๋๋ค๊ณ ํจ
๋ ๊ณต๋ถํ๊ธฐ
-
๋๊ด์ ์ ๊ธ๊ณผ ๋น๊ด์ ์ ๊ธ์ ๋์ ์๋ฆฌ
-
CRDT ๋ ๋ฌด์์ธ๊ฐ?
-
๋ถ์ฐ ํธ๋์ญ์
-
์คํ๋ง๊ณผ ๋๊ด์ ์ ๊ธ
-
WAL ํ๋กํ ์ฝ
-
์ธ๋ ๋ก๊ทธ, ๋ฆฌ๋ ๋ก๊ทธ, ์ฒดํฌํฌ์ธํธ
๊ธฐํ ์ด๋ณด ํ
-
autocommit์ ๋์ (ํนํ JDBC ๋ฑ์์ ์ฃผ์)
-
๊ธด ํธ๋์ญ์ ์ ๋ฐ๋๋ฝ์ ์์ธ
-
๋ฐฐ์น ์์ ์ค๊ฐ์ ์ปค๋ฐ์ ํ์
-
์๋ฌด๊ฒ๋ ํ์ง ์์ ํธ๋์ญ์ ๋ฐ ์ปค๋ฅ์ ์ ์ฃผ์!
-
ํธ๋์ญ์ ์ค๊ฐ์ ์ฌ์ฉ์ ์ ๋ ฅ์ด ์กด์ฌํ๋ฉด ์๋จ!
-
์๋ฒ ๋ชจ๋ํฐ๋ง์ ์ฃผ๊ธฐ์ ์ผ๋ก