2021. 1. 10. 03:04ใ๐๐ปโ๏ธ Study/โ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ( Database )
์ ๋ฒ ๊ธ์์ ํธ๋์ญ์ ์ ACID ํน์ฑ์ ๋ํด ์ ๊น ์ธ๊ธํ๋ ์ ์ด ์๋๋ฐ์.
์ค๋์ ํธ๋์ญ์ ์ ACID ์ค I(Isolation)์ธ ๊ฒฉ๋ฆฌ์ฑ์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ํ ๊ธ์ ํฌ์คํ ํ๊ณ ์ ํฉ๋๋ค.
Docker์ MySQL์ ์ด์ฉํ ํธ๋์ญ์ rollback / commit ์ค์ต์ ์๋ ๊ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์ : )
Isolation Level (๊ฒฉ๋ฆฌ ์์ค) ์ด๋?!
๋ฉํฐ ์ฐ๋ ๋ / ํธ๋์ญ์ ์ด ๋์์ ๋์ผํ ํ ์ด๋ธ / ๋ ์ฝ๋์ ์ ๊ทผํ ๋ ์ ์ฉํ๋ ๊ท์น
Lock ๊ณผ ๋น์ทํ์ง๋ง ๋ค๋ฅด๋ค!
๐ Read Uncommitted
commit ์ฌ๋ถ์ ๊ด๊ณ์์ด ํ์ฌ ๋ ์ฝ๋ ๊ฐ์ ๋ฆฌํดํ๋ ๊ฒ
๊ฐ์ฅ ๋ฎ์ ๋ฐ์ดํฐ์ ์์ ์ฑ But ๊ฐ์ฅ ๋์ ์ฑ๋ฅ
Dirty Read ํ์ ๋ฐ์ ๊ฐ๋ฅํ๋ค !
rollback ์ํ ์ ์ฝ์ด๊ฐ๋ ๊ฐ์ ์ฐ๋ ๊ธฐ ๊ฐ์ด ๋์ด์ง๋ ํ์
๐Read Committed
์ค๋ผํด์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก Commit ๋ ๋ง์ง๋ง ๊ฐ์ ๋ฆฌํดํ๋ ๊ฒ
์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋์ด์ง๋ ๊ฒฉ๋ฆฌ ์์ค
Non - Repeatable Read ํ์ ๋ฐ์ ๊ฐ๋ฅํ๋ค !
๋์ผํ ํธ๋์ญ์ ์์์ ๋์ผํ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ํ์
๐Reapeatable Read
MySQL์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ๋์ผํ ํธ๋์ญ์ ์์๋ ํ ์ฟผ๋ฆฌ์ ๊ฐ์ด ํญ์ ์ผ์ ํ ๊ฒ
๋ฐฑ์ ์ด๋ ๋ณต์ ์ ๊ฐ์ด ์๋์ ์ผ๋ก ๊ธด ์๊ฐ๋์ ๋์ํ๋ ํธ๋์ญ์ ์์ ์์ ์ ์ธ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ณด์ฅ๋๊ฑฐ๋ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ
Phantom Read ํ์ ๋ฐ์ ๊ฐ๋ฅํ๋ค !
์ค๊ฐ์ ์๋ก์ด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ์๋ ๊ฐ์ด ๋ํ๋๋ ํ์
Q . ์ Phantom Read ํ์์ด ๊ฐ๋ฅํ ๊น!?
A . ๋ฐฑ์ / ๋ณต์ ์์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ์ง๋ง ์ถ๊ฐ / ์ญ์ ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ค.
๐Serializable Read
๋ ๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋์ง ์๋ ๊ฒ
์ด์ ํธ๋์ญ์ ์ด ์ปค๋ฐ์ด ์๋ฃ ๋๋ฉด ๋ค์ ํธ๋์ญ์ ์ ์คํํ๋ ๋ฐฉ์์ด๋ค.
๊ฐ์ฅ ๋์ ๋ฐ์ดํฐ ์์ ์ฑ But ๊ฐ์ฅ ๋ฎ์ ์ฑ๋ฅ -> ์ค์ ๋ก๋ ๋ง์ด ์ ์ฐ์ธ๋ค.
ํธ๋ ์ญ์ ์ ๊ฒฉ๋ฆฌ์ฑ ์์ค ์ด ์ ๋ฆฌ
Isolation Level | Dirty Read | Non - Repeatable Read | Phantom Read |
Read Uncommitted | ๊ฐ๋ฅ | ๊ฐ๋ฅ | ๊ฐ๋ฅ |
Read Committed | ๋ถ๊ฐ๋ฅ | ๊ฐ๋ฅ | ๊ฐ๋ฅ |
Repeatable Read | ๋ถ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ | ๊ฐ๋ฅ |
Serializable Read | ๋ถ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
MySQL Isolation ๊ด๋ จ ์ค์ต
์์ฃผ ๊ฐ๋จํ๊ฒ ํ์ฌ Isolation ๊ฐ ํ์ธ๊ณผ ๋ณ๊ฒฝ์ ๊ดํ ์ค์ต์ด๋ ์ฝ๋๋ง ๋ณด์ฌ์ฃผ๊ณ ์ค์ ์ค์ต์ ์๋ตํฉ๋๋ค : )
show variables like '%isolation%'; // ํ์ฌ isolation ๊ฐ ํ์ธํ๊ธฐ
set tx_isolation = 'READ-COMMITTED' ; // read - committed ๋ก isolation ๋ณ๊ฒฝํ๊ธฐ
show variables like '%isolation%'; // ๋ณ๊ฒฝ ๋ isolation ๊ฐ ํ์ธ ํ๊ธฐ
MySQL์ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ ์์ค์ Repeatable Read ์ด๋ค!
why?! ๋ฐฑ์ / ๋ณต์ ์ ์์ ์ฑ ๋๋ฌธ !
๐๐ป MySQL์ ํต์ฌ ๊ธฐ๋ฅ์ธ ๋ณต์ ๊ฐ ์์ ์ ์ผ๋ก ๋์ํ๋๋ก ํ๊ธฐ ์ํด ์ฑ๋ฅ์ ํฌ์ํ์ฌ default ๊ฒฉ๋ฆฌ ์์ค์ repeatable read๋ก ์ค์ ๋์ด์ง๋ค. ์ด๋ก ์ ์ผ๋ก๋ Read Committed (Oracle์ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ์์ค)์ด ๋น ๋ฅด์ง๋ง ๋ ๊ฐ์ ์ฑ๋ฅ ์ฐจ์ด๋ ๋ฏธ์ธํ๋ค.
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค ๋น๊ต
- ํ์ฌ์ ๋ฐ์ดํฐ ๊ฐ VS Undo Log ์์ ๋ง์ง๋ง ์ปค๋ฐ๋ ๊ฐ (Read Uncommitted VS Read Committed)
- Undo Log ์์ ๋ง์ง๋ง ์ปค๋ฐ๋ ๊ฐ VS Undo Log ์์ ์ปค๋ฐ๋ ๊ฐ๋ค ์ค์์ ์ฒ์์ผ๋ก ์ฝ์ด๊ฐ ์๊ฐ ๊ณ ๋ ค (Read Committed VS Repeatable Read)
'๐๐ปโโ๏ธ Study > โ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ( Database )' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker/MySQL] ํธ๋์ญ์ (Transaction) (0) | 2021.01.03 |
---|---|
[Docker/MySQL] JDBC - PreparedStatement ์ค์ต (2) | 2020.12.31 |
[Docker/MySQL] JDBC - Statement ์ค์ต (0) | 2020.12.31 |