๐ข ๋ณธ ๋ฌธ์์์๋ MVCC ๋ชจ๋ธ์ ํตํด ์๊ฐํ Transaction ID(์ดํ XID)์ ๋ํด ์์ธํ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฐ์ โ XID์ ์ ์์ ์ฉ๋๋ฅผ ํ์ธํ๊ณ , โก๋ถ์กฑํ XID๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด PostgreSQL์ด ์ ํํ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Transaction ID
XID ๋?
์ฐ๋ฆฌ๋ ๋ฏธ๋์ ์ผ์ด๋ ์ฌ๊ฑด์ ๋ํด ์์ง ๋ชปํ์ง๋ง ๊ณผ๊ฑฐ์ ์ผ์ด๋ฌ๋ ์ฌ๊ฑด๋ค์ ์ถฉ๋ถํ ์ ์ ์์ต๋๋ค. ํ์ค์ด ์๋ DBMS์์ ์ผ์ด๋๋ ์ผ๋ จ์ ์ฌ๊ฑด๋ค์ ํธ๋์ญ์ ์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ํธ๋์ญ์ ์ด ๋ฐ์ํ ์์ ์ ์๋ณํ๊ธฐ ์ํ ์ ๋ณด๋ก XID๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, XID๋ ์ผ์ข ์ ์๊ฐ ์ ๋ณด๋ก ์ดํดํ ์ ์์ต๋๋ค.
XID๋ ํธ๋์ญ์ ์ด ์ผ์ด๋ ๋๋ง๋ค ํ๋์ฉ ์ฆ๊ฐํ๋ฉฐ, MVCC๋ชจ๋ธ์ ๊ตฌํ ๋ฐ ์ฝ๊ธฐ ์ผ๊ด์ฑ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
XID ์ฌ์ฉ์ฉ๋
ํธ๋์ญ์ ์ด ๋ฐ์ํ ๋๋ง๋ค ์ฆ๊ฐํ๋ XID๋ฅผ ์ด๋์, ์ด๋ป๊ฒ ์ ์ฉํ์ฌ ์ฌ์ฉํ๋์ง ๊ถ๊ธํด์ง ์ ์์ต๋๋ค. ์๊ฐ ์ ๋ณด ์๋ ๊ฐ์ XID๋ ์๋์ ๊ฐ์ด ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์๊ธธ ๋๋ง๋ค ๊ทธ ์์ ์ ๊ธฐ๋กํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
relfrozenxid
: Object ์์ฑ ์์ ์ XID๋ฅผ Object์ ํ ๋น (+ Vacuum ์ํ ์ ์์ ๊ฐฑ์ )XMIN
,XMAX
: Row(๋ ์ฝ๋)๊ฐ ์ ๋ ฅ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋ ์์ ์ XID๋ฅผ Row๋จ์๋ก ํ ๋น
์ด์ฒ๋ผ ์ค๋ธ์ ํธ, ๊ทธ๋ฆฌ๊ณ Row ๋จ์๋ก ํ ๋น๋๋ XID๋ ์กฐํ ์์ ์ XID์ ๋น๊ตํ์ฌ ์ฝ์ ๋์์ธ์ง ์๋์ง๋ฅผ ํ๋จํ๊ธฐ ์ํ ์ฉ๋๋ก๋ ์ฐ์ด๋ฉฐ, ๋๋ฌด ์ค๋๋ XID๋ฅผ ๊ฐ๋ Object๋ Vacuum์ ๋์์ด ๋๊ธฐ๋ ํฉ๋๋ค.
๊ตฌ์กฐ์ ์ธ ํ๊ณ์ ๋ณด์ ๋์ฑ
๋ถ์กฑํ XID
XID๊ฐ ์๊ฐ ์ ๋ณด๋ก ์ฌ์ฉ๋๋ค๋ ๊ฒ์ ๊ทธ ๊ฐ ์์ฒด๋ง์ผ๋ก ์์ ์ ํน์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ดํฌ๋์ด ์์์ ์๋ฏธํ๊ธฐ๋ ํฉ๋๋ค. ๋ง์น ์ฐ๋ฆฌ๊ฐ ์ด๊ณ ์๋ 2022๋ ์ด ๋ฏธ๋์ ๋ค์ ๋ฐ๋ณต๋์ง ์์ผ๋ฆฌ๋ผ๋ ํ์ ๊ณผ๋ ๋น์ทํฉ๋๋ค.
PostgreSQL์ XID์ ๋น๊ต ๊ฐ๋ฅํ Oracle SCN์ ํํ ๋ฒ์๋ 2^63(19c ๊ธฐ์ค)์ผ๋ก, ๋ช ์ฒ๋ ์ด์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ซ์๋ฅผ ํํํ ์ ์์ต๋๋ค. ์ ํ์ ์์ผ๋ ์ฌ์ค์ ๊ทธ ์์น์ ๋๋ฌํ ๋ฆฌ ๋ง๋ฌดํ๋ฏ๋ก ์ ์ ์ ์ผ๋ก ์ถฉ๋ถํ ์ซ์๋ผ๊ณ ๊ฒฐ๋ก ๋ด๋ฆด ์ ์์ต๋๋ค.
- DB ์ธ์ฌ์ด๋ | PostgreSQL Vacuum - 1. MVCC ๋ด์ฉ ไธญ -
๊ฐ ๋ ์ฝ๋(row) ๋ณ๋ก 4 Byte์ ๋ฒ์ ์ ๋ณด(XID)๋ฅผ ๋์ด ์์ ์ ์๋ณํ ์ ์๋๋ก ํ๋ค
ํ์ง๋ง PostgreSQL์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ์ ๋ ฅ ๋ฐ ๋ณ๊ฒฝ ์ Row ๋จ์๋ก XID๋ฅผ ํ ๋นํด์ผ ํ๋ฏ๋ก ๊ณต๊ฐ ์ฌ์ฉ ์ด์๊ฐ ๋ฐ์ํ ์๋ฐ์ ์์ต๋๋ค.
์ฆ, ๊ณต๊ฐ ์ ์ฝ์ ์ธก๋ฉด๊น์ง ๊ณ ๋ คํด ์ ์๋ 4 Byte์ XID๊ฐ์ด ์ด๋ฒ์๋ ํํ ๊ฐ๋ฅํ XID์ ๋ฒ์๋ฅผ ์ ์ฝํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๊ฒ ๋์์ต๋๋ค. 4 Byte๋ก๋ ์ฝ 43์ต์ XID๋ฐ์ ํํํ ์ ์์ผ๋ฉฐ, ์ด๋ TPS๊ฐ ๋์ ์์คํ ์์ ๋ถ๊ณผ ๋ช ๋ฌ์ด๋ฉด ๋ชจ๋ ์์งํ ์ ์๋ ์์น์ ๋๋ค.
์ํ ๊ตฌ์กฐ
์ด์ฒ๋ผ ์ ๋์ ์ธ XID ๊ฐ์๊ฐ ๋ถ์กฑํ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด์ PostgreSQL์ XID๋ฅผ ์ํ๊ตฌ์กฐ๋ก ์ฌ์ฉํฉ๋๋ค.
์ด๋ฅผ ์ํด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ฌ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ด XID(40์ต)์ ์ ๋ฐ(20์ต)์ ๋ํด์๋ ๋ฏธ๋์ ๋ฐ์ํ ํธ๋์ญ์ ์ ์ํด ์ฌ์ฉ๋ ์์ฝ๋ XID๊ณต๊ฐ(Newer)์ผ๋ก, ๋๋จธ์ง ์ ๋ฐ(20์ต)์ ๊ณผ๊ฑฐ ๋ฐ์ํ๋ ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ XID๊ณต๊ฐ(Older)์ผ๋ก ๋ถ๋ฅํฉ๋๋ค.
๐ PostgreSQL์ ์ค์ XID๋ ์ฝ 43์ต์ด๋ฉฐ, Newer/Older ์์ญ์ XID๋ ๊ฐ๊ฐ ์ฝ 21์ต์ด์ง๋ง, ๋ณธ ๋ฌธ์์์๋ ๊ฐ๋ตํ ํํ ๋ฐ ์ฌ์ด ๊ณ์ฐ์ ์ํด ๊ฐ๊ฐ 40์ต๊ณผ 20์ต์ผ๋ก ํํํ์ต๋๋ค.
์ํ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด ์๋ ๊ทธ๋ฆผ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์์ ์ด์ผ๊ธฐํ Newer/Older ์์ญ์ ํฌํจ๋๋ XID๋ ๊ณ ์ ๋์ด ์์ง ์์ต๋๋ค. Newer/Older ์์ญ์ ๋จ์ํ ๊ณ ์ ๋ ์ฐฝ๋ฌธ๊ณผ ๊ฐ์ด(Window) ๊ฐ๊ฐ 20์ต ๊ฐ์ XID๋ฅผ ๋ฐ๋ผ๋ณด๋ ์ญํ ๋ง์ ์ํํฉ๋๋ค. ์ด์ ๋ฐ๋๋ก XID๋ ํธ๋์ญ์ ์ด ๋ฐ์ํ ๋๋ง๋ค ์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ฒ๋ผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ฉฐ, ๋ ์ผ์ ๋์ ๋๋ฌํ๋ฉด ๋ค์ Newer์์ญ์ ๋์ผ๋ก ์ถ๊ฐ๋๋ ์์ผ๋ก ์ํํฉ๋๋ค.
์ฆ ํ์ฌ ์์ ์ ๋ฐ๋ผ Newer/Older ์์ญ์ ํฌํจ๋๋ XID๋ ๋ ๋ณ๊ฒฝ๋๋ฉฐ, ๋์ผํ ์ด์ ๋ก XID๊ฐ ์์ฒด์ ํฌ๊ณ ์์์ด Newer/Older๋ฅผ ๋ถ๋ฅํ๋ ๊ธฐ์ค์ด ๋์ง๋ ์์ต๋๋ค.
Anti-Wraparound์ Data Freezing
์ฌ๊ธฐ๊น์ง ์ดํดํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ์๋ฌธ์ด ์๊ธธ ์ ์์ต๋๋ค.
40์ต์ ์ฃผ๊ธฐ๋ก ํ๋์ Cycle์ ๋๋ ์ํ๊ตฌ์กฐ์์๋ ์ด๋ ์๊ฐ ๋์ผํ XID๋ก ์ธํ ์์ ์๋ณ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ ์์๊น?
์๋ฅผ ๋ค์ด XID=3์ธ ์์ ์ ์ ๋ ฅ๋ ํ ๋ณํ๊ฐ ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์๊ฐ์ด ํ๋ฌ Current XID๊ฐ 40์ต ์์ ์ด ๋์ ๋, XID=3์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ ๋ถ๋ช ๊ณผ๊ฑฐ์ ์ ๋ ฅ๋์์ง๋ง ๊ทธ XID๋ Newer ์์ญ์ ์์นํ๊ณ ์์ผ๋ฏ๋ก ํด๋น XID๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ณผ๊ฑฐ์ ๊ฒ์ธ์ง ๋ฏธ๋์ ๊ฒ์ธ์ง ๊ตฌ๋ถํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
๐ ๊ทธ๋ฆผ์์ XID์ ํํ์ 3๋ถํฐ ์์ํ ์ด์ ๊ฐ ์ฌ๊ธฐ ์๋๋ฐ, 0,1,2๋ ํน์ํ ์๋ฏธ๋ฅผ ์ง๋ ์์ฝ๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ์ค, XID=2๋ฅผ Frozen XID๋ผ๊ณ ํ๋ฉฐ, ์ค์ ํธ๋์ญ์ ์ ์ฌ์ฉ๋๋ ์ผ๋ฐ XID์ ๋ฒ์๋ 3~40์ต ์ด๋ฏ๋ก Frozen XID๋ ํญ์ ์ด๋ค ์ผ๋ฐ XID๋ณด๋ค ์์(์ค๋๋จ)์ด ๋ณด์ฅ๋ฉ๋๋ค.
์ด๋ฌํ ์ํฉ์ ํํผํ๊ณ ์ PostgreSQL์ “Current XID - ์์ฑ(์ ๋ ฅ) ์์ ์ XID”๊ฐ ํ Cycle์ ์ ๋ฐ์ธ ์ฝ 20์ต(=Older ์์ญ์ ์์นํ๋ ๊ธฐ๊ฐ)์ ๋ฒ์ด๋๊ธฐ ์ ์ ํด๋น ์๋ฃ๋ค์ XID๋ฅผ ํน์ํ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ์์ ์ ์ํํ๋ฉฐ, ๋ ํ๋ ์ ์ ์๋ ์ฌ์ค์ 40์ต ๊ฐ์ XID ์ค ์ค์ ์ฌ์ฉ ๊ฐ๋ฅํ XID๋ 20์ต ๊ฐ๋ผ๋ ๊ฒ์ ๋๋ค.
์ด์ฒ๋ผ XID Wraparound๋ฅผ ํผํ๊ธฐ ์ํ ์ผ๋ จ์ ์์
์ Data Freezing
์ด๋ผ ๋ถ๋ฅด๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก XID๊ฐ์ Frozen XID
๋ผ๋ ํน์ํ ๊ฐ์ผ๋ก ํ์ํ์ฌ ์๊ตฌ์ ์ธ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ์์ ํ์ํ๋ ์ผ๋ จ์ ์์
์ ์ํํฉ๋๋ค.
์ด๋ด ๊ฒฝ์ฐ XID=3 ์์ ์ ์
๋ ฅ๋์๋ ๋ฐ์ดํฐ๋ Current XID๊ฐ 20์ต์ด ๋๊ธฐ ์ ์ ์ด๋ฏธ Frozen XID
๋ก์ ๋ณ๊ฒฝ์ด ๋ณด์ฅ๋๋ฏ๋ก ์ดํ์ XID=3 ์์ ์ ์
๋ ฅ๋๋ ๋ฐ์ดํฐ์์ ์๋ณ ๋ฌธ์ ์์ ๋ฒ์ด๋ ์ ์์ต๋๋ค.
๊ธฐํ ๋ฐ ๊ธ | ๊ธฐ์ ๊ธฐํํ
์ด๋ฏธ์ง ์ ์ | ๋์์ธ๊ทธ๋ฃน ์ด๋ฏผ์
'์์ ๊ฒฝ์๋ ฅ > DB ์ธ์ฌ์ด๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DB ์ธ์ฌ์ด๋ | PostgreSQL Vacuum - 4. Visibility Map (0) | 2022.04.29 |
---|---|
DB ์ธ์ฌ์ด๋ | PostgreSQL Vacuum - 3. Age (0) | 2022.04.29 |
DB ์ธ์ฌ์ด๋ | PostgreSQL Vacuum - 1. MVCC (2) | 2022.04.29 |
DB ์ธ์ฌ์ด๋ | PostgreSQL Architecture - 4. ๋์ ์๋ฆฌ (0) | 2022.04.27 |
DB ์ธ์ฌ์ด๋ | PostgreSQL Architecture - 2. Physical Structure (0) | 2022.04.27 |
๋๊ธ0