๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์—‘์…ˆ ๊ฒฝ์Ÿ๋ ฅ/DB ์ธ์‚ฌ์ด๋“œ

DB ์ธ์‚ฌ์ด๋“œ | PostgreSQL Vacuum - 5. Manual Vacuum

by EXEM 2022. 4. 29.

๐Ÿ“ข ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” โ‘ Vacuum์˜ ๋ชฉ์ ๊ณผ โ‘กVacuum ๋™์ž‘ Mode์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ์กฐ๊ธˆ์€ ํŠน๋ณ„ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” โ‘ขVacuum Freeze์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•œ ํ›„ ๋งˆ์ง€๋ง‰์œผ๋กœ โ‘ฃ์ „์ฒด์ ์ธ Vacuum ์ˆ˜ํ–‰ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋”๋ถˆ์–ด ์ง€๋‚œ ๋ฌธ์„œ๋“ค์„ ํ†ตํ•ด ์†Œ๊ฐœ๋˜์—ˆ๋˜ ๊ฐœ๋…๋“ค์ด ๋ชจ๋‘ ํ˜ผ์šฉ๋˜์–ด ์‚ฌ์šฉ๋˜๋Š” ๋งŒํผ, ์ถฉ๋ถ„ํ•œ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ๊ธฐ๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

Manual Vacuum

Vacuum ์ด๋ž€?

์ง„๊ณต์ฒญ์†Œ๊ธฐ๋ผ๋Š” ๋œป์„ ์ง€๋‹Œ Vacuum์€ PostgreSQL์—๋งŒ ์กด์žฌํ•˜๋Š” ํŠน์ˆ˜ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์•ž์„  ๋ฌธ์„œ์—์„œ ๊ฐ•์กฐํ–ˆ๋‹ค์‹œํ”ผ MVCC ๋™์ž‘์›๋ฆฌ์— ๋”ฐ๋ฅธ ๊ณต๊ฐ„ ๋น„ํšจ์œจ๊ณผ XID Wraparound๋ฐœ์ƒ ๋“ฑ PostgreSQL์˜ ํŠน์„ฑ์— ๊ธฐ์ธํ•œ ๋ถ€์ž‘์šฉ์„ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

Vacuum์€ ๋ช…๋ น์–ด ์กฐํ•ฉ์— ๋”ฐ๋ผ VACUUM, VACUUM FULL, VACUUM FREEZE๋“ฑ์œผ๋กœ ๋‚˜๋‰˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” Autovacuum Launcher์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜๋Š” Vacuum์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ˆ˜ํ–‰ํ•œ Manual Vacuum์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Vacuum์˜ ๋ชฉ์ 

Vacuum์˜ ์ฃผ์š” ๋ชฉ์ ์„ 4๊ฐ€์ง€๋กœ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ๋””์Šคํฌ ๊ณต๊ฐ„ ํ™•๋ณด
2. Transaction ID Wraparound๋กœ ์ธํ•œ ์˜ค๋ž˜๋œ ์ž๋ฃŒ์˜ ์†์‹ค ๋ฐฉ์ง€
3. ํ†ต๊ณ„ ์ •๋ณด ๊ฐฑ์‹ 
4. Visibility Map(VM) ๊ฐฑ์‹  ์ž‘์—…

์ด ์ค‘ ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” Vacuum์˜ ํ•ต์‹ฌ ๋ชฉํ‘œ์ธ ๋””์Šคํฌ ๊ณต๊ฐ„ ํ™•๋ณด์™€ XID Wraparound ๋ฐฉ์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ํ›„ Vacuum ๋™์ž‘ Mode์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋””์Šคํฌ ๊ณต๊ฐ„ ํ™•๋ณด

PostgreSQL์€ MVCC ๋ชจ๋ธ ๊ตฌํ˜„์„ ์œ„ํ•ด ์˜ˆ์ „ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋„ ์‚ญ์ œํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‚จ๊ฒจ๋†“๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์ด ๋นˆ๋ฒˆํ•œ ํ…Œ์ด๋ธ”์˜ ์‚ฌ์ด์ฆˆ๋Š” ์ฆ๊ฐ€ํ•  ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ˆ์ „ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜๋“ค์— ์˜ํ•ด ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ๋งŒ ๋ณด์žฅ๋œ๋‹ค๋ฉด, ํ•ด๋‹น ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.

Vacuum์€ ์ด์ฒ˜๋Ÿผ ๊ตฌ ๋ฒ„์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๊ตฌ ๋ฒ„์ „ ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ณต๊ฐ„์„ OS๋กœ ๋ฐ˜ํ™˜ํ•จ์œผ๋กœ์จ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ „์ž์˜ ๊ฒฝ์šฐ๋ฅผ Standard Vacuum์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, VACUUM ๋ช…๋ น์–ด์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ํ›„์ž๋Š” ๊ตฌ ๋ฒ„์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜์—ฌ ํŒŒ์ผ์„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ VACUUM FULL ๋ช…๋ น์–ด์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

Standard Vacuum์˜ ์ˆ˜ํ–‰ ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

1. VM ํŒŒ์ผ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Vacuum ๋Œ€์ƒ ํŽ˜์ด์ง€๋ฅผ ์„ ์ •
2. ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ Dead Tuple์— ๋Œ€ํ•œ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰

Standard Vacuum์€ ๊ณต๊ฐ„๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ๋ณด๋ฉด ์ตœ์†Œ์˜ ๊ณต๊ฐ„ ์‚ฌ์šฉ๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ์–ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฃผ๊ธฐ์ ์ธ Vacuum์ˆ˜ํ–‰์œผ๋กœ ์ธํ•œ ์žฌ์‚ฌ์šฉ ๊ณต๊ฐ„์˜ ํ™•๋ณด๋Š” ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€ ๋Ÿ‰์„ ์–ต์ œํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ์˜ ๊ณต๊ฐ„ ์œ ์ง€๋ผ๋Š” ์ผ๋ถ€ ๋ชฉ์ ์€ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜๋ฉด, Vacuum Full ์ž‘์—…์˜ ๊ฒฝ์šฐ ์•ž์„œ ์ด์•ผ๊ธฐํ•œ Standard Vacuum๊ณผ๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Standard Vacuum์ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋ผ ํ•œ๋‹ค๋ฉด, Vacuum Full์€ ์ผ์ข…์˜ Table Reorganization ์ž‘์—…๊ณผ ์œ ์‚ฌํ•˜๋‹ค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, Live Tuple ๋“ค๋งŒ์„ ๋ชจ์•„์„œ ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๊ณ , ๊ธฐ์กด ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌผ๋ฆฌ์ ์ธ ๊ณต๊ฐ„ ๋ฐ˜ํ™˜์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์žฌ๊ตฌ์„ฑ ๋ฐฉ์‹์˜ ๋™์ž‘ ๊ณผ์ •์€ Table์— ๋Œ€ํ•œ Exclusive Lock์˜ ํš๋“ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฉฐ, ์ด๋Š” ๋™์‹œ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ์›์ธ์ด ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‹ ๊ทœ ํ…Œ์ด๋ธ”์„ ์œ„ํ•œ ์ผ์ •๋Ÿ‰์˜ ๋””์Šคํฌ ๊ณต๊ฐ„์ด ์กด์žฌํ•ด์•ผ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ž˜๋œ ์ž๋ฃŒ ์†์‹ค์˜ ๋ฐฉ์ง€

XID Wraparound ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ Data Freezing ์ž‘์—… ์—ญ์‹œ Vacuum์˜ ์ฃผ์š” ๋ชฉ์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

Data Freezing์ž‘์—… ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ์•ž์„œ ์„ค๋ช…ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„ ์ •๋ฆฌ ์ž‘์—… ํ›„ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

1. VM ํŒŒ์ผ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Vacuum ๋Œ€์ƒ ํŽ˜์ด์ง€๋ฅผ ์„ ์ •
2. ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ Dead Tuple์— ๋Œ€ํ•œ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰
3. ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ Data Freezing ์ž‘์—…์„ ์ˆ˜ํ–‰

Data Freezing ์ž‘์—…์€ ๊ฐœ๋ณ„ Row(Tuple)์˜ Age๊ฐ€ VACUUM_FREEZE_MIN_AGE ๋ณด๋‹ค ํฐ(=์˜ค๋ž˜๋œ) Row๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค๊ณ  ์ด์•ผ๊ธฐํ•œ ๋ฐ” ์žˆ์Šต๋‹ˆ๋‹ค. VACUUM_FREEZE_MIN_AGE ๊ฐ’์„ ์ค„์ผ ๊ฒฝ์šฐ๋ณด๋‹ค ๋งŽ์€ Row๋ฅผ Freezing ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ๋” ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ์ž์›์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

 

์–ผํ•, VACUUM_FREEZE_MIN_AGE๋ฅผ ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋ฉด, ์ดํ›„ Data Freezing์„ ์ˆ˜ํ–‰ํ•  ๋Œ€์ƒ Row๋“ค์ด ์ค„์–ด๋“œ๋Š” ์ด์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์กฐ์ž‘(Delete/Update)์ด ๋นˆ๋ฒˆํ•œ ํ…Œ์ด๋ธ”์˜ VACUUM_FREEZE_MIN_AGE์ˆ˜์น˜๋ฅผ ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์• ์จ Freezing ํ•œ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ๋“ค์ด ๋‹ค์‹œ ALL_FROZEN=0์ธ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ตœ๊ทผ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ง€์†์ ์ธ Data Freezing ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ…Œ์ด๋ธ” ์šฉ๋„์™€ ์‚ฌ์šฉ ํŒจํ„ด์— ๋งž๋Š” ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ vacuum_freeze_min_age
Vacuum์ด Freeze ํ•  Row์˜ ์ตœ์†Œ Age์ด๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์€ 5์ฒœ๋งŒ(50,000,000)์ž…๋‹ˆ๋‹ค.

 

Standard Vacuum Mode

Standard Vacuum์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ Mode๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์„ Eager Mode์™€ Lazy Mode๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ๊ฐ Mode์˜ ๋™์ž‘ ๊ธฐ์ค€ ๋ฐ ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ ๋™์ž‘์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์‚ฌ์‹ค ๋‘ Mode๋Š” Document์— ์กด์žฌํ•˜๋Š” ์ •์‹ ์šฉ์–ด๋Š” ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. Eager Mode/ Lazy Mode๋ฅผ ๊ฐ๊ฐ Aggressive Vacuum / Vacuum์œผ๋กœ๋„ ์นญํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๋ณธ ๋ฌธ์„œ์—์„œ๋Š” Vacuum Freeze์— ์‚ฌ์šฉ๋  Aggressive Vacuum๊ณผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด Eager Mode / Lazy Mode๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Mode์˜ ๊ธฐ์ค€

๋‘ Mode ์ค‘ ๋ฌด์—‡์„ ์„ ํƒํ• ์ง€ ์—ฌ๋ถ€๋Š” ์˜ค๋กœ์ง€ Table์˜ Age์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

Vacuum์ด ์ˆ˜ํ–‰๋˜๋Š” ์‹œ์ ์— Table์˜ Age๊ฐ€ VACUUM_FREEZE_TABLE_AGE ๋ณด๋‹ค ํฌ๋ฉด(=์˜ค๋ž˜๋๋‹ค) Eager Mode๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๋ฐ˜๋Œ€๋กœ VACUUM_FREEZE_TABLE_AGE ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋ผ๋ฉด Lazy Mode๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ vacuum_freeze_table_age
Vacuum Mode๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” Age์ด๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์€ 150,000,000์ž…๋‹ˆ๋‹ค.

Mode์˜ ์ฐจ์ด์ 

Table์˜ Age์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๊ฐ Mode์˜ ์ฐจ์ด์ ์€ ๋Œ€์ƒ ํŽ˜์ด์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ Mode๋Š” ๋Œ€์ƒ์ด ๋˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

Lazy Mode : Visibility Map์˜ ALL_VISIBLE Bit๊ฐ€ 0์ธ ๋ชจ๋“  ํŽ˜์ด์ง€
Eager Mode : Visibility Map์˜ ALL_FROZEN Bit๊ฐ€ 0์ธ ๋ชจ๋“  ํŽ˜์ด์ง€

์ฆ‰, Lazy Mode์—์„œ๋Š” Frozen์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด Dead Tuple์ด ์žˆ๋Š” ํŽ˜์ด์ง€(ALL_VISIBLE_=0)๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ, Eager Mode์—์„œ๋Š” Lazy Mode ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ Frozen์ด ์•ˆ๋œ ๋ชจ๋“  ํŽ˜์ด์ง€(ALL_FROZEN=0)๋ฅผ Vacuum์˜ ๋Œ€์ƒ์œผ๋กœ ์‚ผ๋Š”๋‹ค๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ์ด๋ฅผ ๋‘๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

ํ•œ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋งŒ ๋˜๊ณ  ๋ณ€๋™์ด ์—†๋Š” Table์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ›„, Row์˜ Age๊ฐ’์ด VACUUM_FREEZE_MIN_AGE์— ๋„๋‹ฌํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ Standard Vacuum์„ ์ˆ˜ํ–‰ํ•˜์˜€๋‹ค๋ฉด ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๋Š” ALL_VISIBLE=1, ALL_FROZEN=0 ์ƒํƒœ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Vacuum์ด Lazy Mode ๋ฐฉ์‹์œผ๋กœ๋งŒ ๋™์ž‘ํ•œ๋‹ค๋ฉด, ์œ„ ์ƒํƒœ(ALL_VISIBLE=1, ALL_FROZEN=0)์˜ ํŽ˜์ด์ง€๋Š” Vacuum ๋Œ€์ƒ ํŽ˜์ด์ง€์—์„œ ํ•ญ์ƒ ์ œ์™ธ๋  ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ณต๊ฐ„ ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ์ž‘์—…์€ ๋ถˆํ•„์š”ํ•˜๋‚˜, ์ž ์žฌ์ ์œผ๋กœ Data Freezing์˜ ๋Œ€์ƒ์ด ๋  Row๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€๋“ค์กฐ์ฐจ Vacuum์˜ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ง‰๊ณ ์ž Table์˜ Age๊ฐ€ VACUUM_FREEZE_TABLE_AGE ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ALL_FROZEN=0์ธ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” Eager Mode๋กœ Vacuum์ด ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Eager Mode๋กœ Vacuum์ด ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์ „์ฒด ํŽ˜์ด์ง€์— ๋Œ€ํ•œ Data Freezing ์ƒํƒœ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•˜์˜€๋‹ค๋Š” ๋œป์ด๊ธฐ๋„ ํ•˜๋ฏ€๋กœ Table์˜ Age์— ์‚ฌ์šฉ๋˜๋Š” relfrozenxid์— ๋Œ€ํ•œ ๊ฐฑ์‹ ์ž‘์—… ์—ญ์‹œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Data Freezing ์ƒํƒœ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•˜์˜€๋‹ค๋Š” ๊ฒƒ์€ ๋ชจ๋“  Row๋ฅผ Data Freezing ํ•˜์˜€๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ชจ๋“  Row๊ฐ€ Data Freezing์ด ๋ถˆํ•„์š”ํ•œ ์ƒํƒœ์ž„์„ ํ™•์ธํ•˜์˜€๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ“Œ 9.6 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” VM์— ALL_FROZEN Bit ๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Eager Mode ์ˆ˜ํ–‰ ์‹œ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ Scan ํ•ด์•ผ ํ•˜๋Š” ๋น„ํšจ์œจ์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 9.6 ๋ฒ„์ „์— ALL_FROZEN Bit๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ Skip ํ•ด์•ผ ํ•  ํŽ˜์ด์ง€๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์กŒ๊ณ , Vacuum, ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด Eager Mode์˜ Vacuum ์„ฑ๋Šฅ์ด ์ข‹์•„์ง€๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

Eager Mode ๋™์ž‘ ํ›„ relfrozenxid์˜ ๋ณ€ํ™”

- DB ์ธ์‚ฌ์ด๋“œ | PostgreSQL Vacuum - 3. Age ๋ฌธ์„œ ไธญ -
Table์˜ Age์— ์‚ฌ์šฉ๋˜๋Š” relfrozenxid ๊ฐ’์€ ํŠน์ • ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ ๊ฐฑ์‹  ๊ฐ€๋Šฅํ•˜๋‹ค

ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ๋ฏธ์ฒ˜ ์„ค๋ช…ํ•˜์ง€ ๋ชปํ•œ ํŠน์ • ์กฐ๊ฑด์ด๋ž€, Eager Mode๋ฅผ ํ†ตํ•ด ALL_FROZEN=0์ธ ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋Œ€ํ•ด Data Freezing ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ ์ƒํƒœ๋ฅผ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. Eager Mode๋กœ Vacuum์ด ์ˆ˜ํ–‰๋˜๋ฉด Table์˜ relfrozenxid๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

relfrozenxid = Current XID - VACUUM_FREEZE_MIN_AGE

๋˜ํ•œ ๋ณ€๊ฒฝ๋œ relfrozenxid๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Table์˜ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ Row์˜ Age๋Š” VACUUM_FREEZE_MIN_AGE ์ž„์„ ๋ณด์žฅํ•œ๋‹ค.
  • Table์˜ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ Row์˜ Age๊ฐ€ VACUUM_FREEZE_MIN_AGE ์ด๋ฏ€๋กœ, Table์˜ Age ์—ญ์‹œ VACUUM_FREEZE_MIN_AGE๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. (์–ด๋ ค์ง„๋‹ค)

Vacuum Freeze

Vacuum์˜ ๋ชฉ์ ์„ ์„ค๋ช…ํ•˜๋ฉฐ ์–ธ๊ธ‰ํ•œ VACUUM๊ณผ VACUUM FULL์™ธ์—๋„ VACUUM FREEZE๋ผ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค FREEZE ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ Vacuum์˜ ์ฒ˜๋ฆฌ๊ณผ์ •์€ Standard Vacuum๊ณผ ์™„์ „ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์Œ ๋‘ Parameter ๊ฐ’์„ 0์œผ๋กœ ์กฐ์ •ํ•œ ํ›„ Vacuum์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

VACUUM_FREEZE_MIN_AGE = 0
VACUUM_FREEZE_TABLE_AGE = 0

๋‚ด๋ถ€์ ์œผ๋กœ VACUUM_FREEZE_TABLE_AGE๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ Table์˜ Age๋Š” ํ•ญ์ƒ VACUUM_FREEZE_TABLE_AGE๋ณด๋‹ค ํฌ๋ฏ€๋กœ Vacuum์ด Eager Mode๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Data Freezing ์„ ์ •๊ธฐ์ค€์ธ VACUUM_FREEZE_MIN_AGE๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ ๋Œ€์ƒ ํŽ˜์ด์ง€ ๋‚ด ๋ชจ๋“  Tuple๋“ค์ด Data Freezing์˜ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด FREEZE์˜ต์…˜์„ ์‚ฌ์šฉํ•œ Vacuum์„ Standard Vacuum๋ณด๋‹ค ๊ณต๊ฒฉ์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค ๋ผ๋Š” ์˜๋ฏธ์—์„œ Aggressive Vacuum์œผ๋กœ ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

Manual Vacuum Process

์ง€๊ธˆ๊นŒ์ง€ ์ด์•ผ๊ธฐํ•œ VACUUM, VACUUM FULL, VACUUM FREEZE์™€ ๊ฐ™์€ Manual Vacuum์˜ ๋™์ž‘ ๊ณผ์ • ๋ฐ ์˜์‚ฌ๊ฒฐ์ •์— ๊ด€์—ฌํ•˜๋Š” Parameter๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Parameter  Default Value
vacuum_freeze_min_age 50000000
vacuum_freeze_table_age 150000000

 

 

๊ธฐํš ๋ฐ ๊ธ€ | ๊ธฐ์ˆ ๊ธฐํšํŒ€

์ด๋ฏธ์ง€ ์ œ์ž‘ | ๋””์ž์ธ๊ทธ๋ฃน ์ด๋ฏผ์„

 

 

 

๋Œ“๊ธ€0