๐ข Manual Vacuum์ ์ด์ด, ๋ณธ ๋ฌธ์ ์ญ์ โ Autovacuum์ด ๋ฌด์์ธ์ง ์์๋ณด๊ณ , โกAutovacuum์ ๋์ ์กฐ๊ฑด ๋ฐ โขAutovacuum ํ๋ก์ธ์ค์ ์ํด ์ํ๋๋ Anti-Wraparound Vacuum์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก โฃAutovacuum ์ ์ฒด ํ๋ก์ธ์ค์ ๋ํด ํ์ธํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Autovacuum
Autovacuum์ด๋ Vacuum์ํ์ ์๋ํํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ด์ผ๊ธฐํฉ๋๋ค. Autovacuum๊ธฐ๋ฅ์ Autovacuum Daemon์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ค์ ์ํด ์ํ๋๋ฉฐ, ์ด ์ค Autovacuum Launcher ํ๋ก์ธ์ค๋ Worker ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์ง์ํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
Autovacuum์ด ๋์ํ๊ธฐ ์ํด์๋ AUTOVACUUM
, TRACK_COUNTS
Parameter๊ฐ ์ผ์ ธ ์์ด์ผ ํฉ๋๋ค.
์ด๋ Autovacuum Launcher ํ๋ก์ธ์ค๋ AUTOVACUUM_NAPTIME
(Sec)์ ์ฃผ๊ธฐ๋ก ์ต๋ AUTOVACUUM_MAX_WORKERS
๊ฐ์๋งํผ์ Worker ํ๋ก์ธ์ค๋ฅผ ๊นจ์์ Vacuum์์
์ ์ํํ๊ฒ ๋ฉ๋๋ค.
Parameter | Default Value |
autovacuum | on |
track_counts | on |
autovacuum_naptime | 60 |
autovacuum_max_workers | 3 |
๐ ๋จ, Cluster ๋ด์ ํ ๊ฐ ์ด์(N)์ Database๋ฅผ ์ด์ํ ๊ฒฝ์ฐ ๋์ ์ฃผ๊ธฐ์ ํ๋ก์ธ์ค๊ฐ N๊ฐ๋ก ๋ถ์ฐ๋ ์ ์์ต๋๋ค. ์ฆ, Database๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ์ด๊ธฐ ๊ด๋ จ Parameter์ ์ฆ๊ฐ๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
Trigger
Autovacuum์ ๋์์ด ๋๋ ์กฐ๊ฑด์ ํ ์ด๋ธ์ ๋ณํ๋์ด ์ ํด์ง ์๊ณ์น๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ์ ๋๋ค.
์์ TRACK_COUNTS
๋ฅผ on์ผ๋ก ์ค์ ํด์ผ ํ๋ ์ด์ ๊ฐ ์ฌ๊ธฐ ์๋๋ฐ, ํด๋น Parameter๋ฅผ ์ผฐ์ ๋ DML์ ์ํ ๋ณํ๋์ ์ถ์ ํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Autovacuum์ ๋์ ์ฌ๋ถ๋ฅผ ํ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
TRACK_COUNTS
๋ฅผ ํจ ์ํ์์ Table์ ์ ์ฒด Row์์, DML๋ฐ์๋์ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# ์ด Row ์ ์กฐํ
select
relname,
reltuples
from
pg_class
where
relname = 'test_vm'
relname|reltuples|
-------+---------+
test_vm| 4004.0|
# DML๋ฐ์๋
select
relname ,
n_tup_ins , --Insert Rows
n_tup_del , --Delete Rows
n_tup_upd , -- Update Rows
last_autovacuum
from
pg_stat_all_tables
where
relname = 'test_vm'
relname|n_tup_ins|n_tup_del|n_tup_upd|last_autovacuum |
-------+---------+---------+---------+-----------------------------+
test_vm| 1001| 0| 0|2022-04-05 13:47:54.920 +0900|
์ด๋ ๊ฒ ์ธก์ ๋ pg_stat_all_tables.n_tup_xxx
๊ฐ๋ค์ด ์๋ ๊ณต์์ ์ํด ๊ณ์ฐ๋ ์์น๋ณด๋ค ๋์ ๊ฒฝ์ฐ Autovacuum์ ๋์์ผ๋ก ์ ์ ๋ฉ๋๋ค.
# Delete + Update ๋ฐ์ Rows์ ์๋ ๊ณต์ ๋น๊ต
autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * pg_class.reltuples
# Insert ๋ฐ์ rows์ ์๋ ๊ณต์ ๋น๊ต
autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_scale_factor * pg_class.reltuples
์๊ณ์น ๊ณต์์ ์ ์ดํด๋ณด๋ฉด INSERT
๋ผ๋ ํค์๋๊ฐ ๋ค์ด๊ฐ ๊ณต์๊ณผ ์๋ ๊ฒ์ผ๋ก ๋๋์ด ์์ต๋๋ค.
๊ทธ ์ด์ ๋ 13 ๋ฒ์ ์ด์ ๊น์ง Insert์กฐ์๊ณผ ๊ด๋ จ๋ Autovacuum Parameter๊ฐ ์กด์ฌํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, 13 ์ด์ ๋ฒ์ ์์๋ Delete์ Update ๋ฑ Dead Tuple์ด ๋ฐ์ํ์ง ์๋ Insert-Only Table์ ๊ฒฝ์ฐ Autovacuum์ ๋์์ด ๋ ์ ์๋ ๊ณ ์ง์ ์ธ ๋ฌธ์ ๊ฐ ์์์ผ๋ฉฐ Manual Vacuum์ ํตํ ์ฌ์ฉ์ ๊ด๋ฆฌ๊ฐ ๋ถ๊ฐํผํ์ต๋๋ค.
ํ์ง๋ง 13 ๋ฒ์ ๋ถํฐ ๋ฑ์ฅํ Parameter์ธ AUTOVACUUM_VACUUM_INSERT_SCALE_FACTOR
, AUTOVACUUM_VACUUM_INSERT_THRESHOLD
๋๋ถ์ Insert-Only Table ์ญ์ Autovacuum์ ๋ํ Trigger๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค.
Parameter | Default Value |
autovacuum_vacuum_scale_factor | 0.2 |
autovacuum_vacuum_threshold | 50 |
autovacuum_vacuum_insert_scale_factor | 0.2 |
autovacuum_vacuum_insert_threshold | 10000 |
Anti-Wraparound Vacuum
์์ Autovacuum์ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ ์กฐ๊ฑด์ผ๋ก AUTOVACUUM
, TRACK_COUNTS
๋ฅผ ์ด์ผ๊ธฐํ์ต๋๋ค. ํ์ง๋ง, ํด๋น Parameter๋ฅผ Disable ์ํค๋๋ผ๋ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ Autovacuum์ ์ํ ์๋ Vacuum์ ์ํ๋ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก Vacuum์ ์ํํ์ง๋ ์๊ณ , Autovacuum๊ธฐ๋ฅ ์ญ์ ์ฌ์ฉํ์ง ์๋ ํ๊ฒฝ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ณต๊ฐ๊ด๋ฆฌ์ ์ฑ๋ฅ ํฅ์์ด๋ผ๋ Vacuum์ ์ ํ ์ํฅ๋ ฅ์ ๋์งธ ์น๋๋ผ๋, Database์ ์ ํฉ์ฑ์ ํผ์์ํฌ ์ ์๋ XID Wraparound ์ํฉ์ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํ ์ต์ํ์ ์์ ์ฅ์น๋ ํ์ํด ๋ณด์ ๋๋ค.
์ด๋ฅผ ์ํด PostgreSQL์ Autovacuum๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ผ๋ ํน์ ์ํฉ ๋ฐ์ ์ Autovacuum ํ๋ก์ธ์ค์ ์ํ Anti-Wraparound Vacuum์ ์๋์ผ๋ก ์ํํ๊ฒ ํ์์ผ๋ฉฐ, ํด๋น ์กฐ๊ฑด์ Table์ Age๊ฐ AUTOVACUUM_FREEZE_MAX_AGE
๋ฅผ ์ด๊ณผํ ์์ ์
๋๋ค.
AUTOVACUUM_FREEZE_MAX_AGE
๋ ์์ Eager Mode์ Lazy Mode์ ์ ํ ๊ธฐ์ค์ผ๋ก ์ด์ผ๊ธฐํ VACUUM_FREEZE_TABLE_AGE
๋ณด๋ค ํฐ ์์น์ด๋ฉฐ XID Wraparound์ํฉ์ ์ ์งํ๊ธฐ ์ํ ๋ง์ง๋ง ๋ฐฉ์ด ๋ผ์ธ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
Parameter | Default Value |
autovacuum_freeze_max_age | 200000000 |
vacuum_freeze_table_age | 150000000 |
๐ vacuum_freeze_table_age๊ฐ autovacuum_freeze_max_age๋ณด๋ค ์ปค์ง ์ ์๋ค๋ฉด Manual Vacuum์ Eager Mode๋ ์๋ฏธ๊ฐ ์์ด์ง๋๋ค. ์ด๋ฌํ ์ด์ ๋ก vacuum_freeze_table_age๋ฅผ ์๋ฌด๋ฆฌ ํฌ๊ฒ ๋ณ๊ฒฝํด๋ autovacuum_freeze_max_age์ 95% ๋ก ์ ํ๋ฉ๋๋ค.
Autovacuum Process
Autovacuum์ ๋์ ๊ณผ์ ์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค. Manual Vacuum๊ณผ ๋น์ทํ์ง๋ง ๋ ๋ง์ Parameter์ ์ํด ์ ์ด๋จ์ ์ ์ ์์ต๋๋ค.
Parameter | Default Value |
vacuum_freeze_min_age | 50000000 |
vacuum_freeze_table_age | 150000000 |
autovacuum_freeze_max_age | 200000000 |
autovacuum | on |
track_count | on |
autovacuum_vacuum_scale_factor | 0.2 |
autovacuum_vacuum_threshold | 50 |
autovacuum_vacuum_insert_scale_factor | 0.2 |
autovacuum_vacuum_insert_threshold | 10000 |
์๊ณ์น ๊ณ์ฐ ๊ณต์
autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * pg_class.reltuples
autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_ scale_factor * pg_class.reltuples
๊ธฐํ ๋ฐ ๊ธ | ๊ธฐ์ ๊ธฐํํ
์ด๋ฏธ์ง ์ ์ | ๋์์ธ๊ทธ๋ฃน ์ด๋ฏผ์
'์์ ๊ฒฝ์๋ ฅ > DB ์ธ์ฌ์ด๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DB ์ธ์ฌ์ด๋ | MySQL Architecture - 2. ์คํ ๋ฆฌ์ง ์์ง (0) | 2022.06.30 |
---|---|
DB ์ธ์ฌ์ด๋ | MySQL Architecture - 1. MySQL ์์ง (0) | 2022.06.30 |
DB ์ธ์ฌ์ด๋ | PostgreSQL Vacuum - 5. Manual Vacuum (0) | 2022.04.29 |
DB ์ธ์ฌ์ด๋ | PostgreSQL Vacuum - 4. Visibility Map (0) | 2022.04.29 |
DB ์ธ์ฌ์ด๋ | PostgreSQL Vacuum - 3. Age (0) | 2022.04.29 |
๋๊ธ4