[PostgreSQL] Internal: WAL์ ๊ตฌ์กฐ
https://blog.naver.com/sssang97/223233122052
PostgreSQL์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก WAL ๊ตฌ์กฐ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ณ , ๊ทธ๊ฑธ ํ์ฒ๋ฆฌํด์ ์ต์ ํ ๊ฐ๋ฅํ ํํ๋ก ๊ฐ๊ณตํ๋ ํํ๋ฅผ ์ทจํ๋ค.
์คํ ๋ฆฌ์ง ํจ์จ์ฑ์ด๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ธํ ํ๋์ ํด์ผ ํ๋ค๋ฉด, WAL์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ๊ฝค ์ค์ํ๋ค.
WAL์ ์ ์ฅ ๊ตฌ์กฐ
Linux ํ๊ฒฝ์ด๋ผ๋ฉด, ๋ณดํต wal์ ์๋ ๊ฒฝ๋ก์ ์๋ค.
sudo ls -lah /var/lib/postgres/data/pg_wal
WAL์ ์์ฒ๋ผ ์์ ๋ก๊ทธ ํ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ๊ฐ์ ํ์ผ์ ์ธ๊ทธ๋จผํธ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๊ฐ๊ฐ์ ์ธ๊ทธ๋จผํธ ํ์ผ์ ์ต๋ ํฌ๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 16MB ์ ๋๋ค.
์ฌ์ฉ์๊ฐ ์๋ํ ๋ชจ๋ ์ฐ๊ธฐ ๋ด์ญ์ ์ ๋ถ ์ฌ๊ธฐ์ ์ผ๋จ ๊ธฐ๋ก๋๊ณ ๋ณธ๋ค.
commit์ด ๋์ง ์๋๋ผ๋, rollback๋ write๋ ์ ๋ถ WAL์ ์์ธ๋ค. ๊ทธ๋์ ๋กค๋ฐฑํ๋ค๊ณ ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๊ฐ ๊ฐ์ง ์๋ ๊ฒ์ ์๋๋ค. ์ผ๊ด์ฑ์ ์ํ ๊ฒ์ผ ๋ฟ์ด๋ค.
๋จ์ผ ์ธ๊ทธ๋จผํธ ํ์ผ์ ์ต๋๋ 16MB ์ ๋๊ณ , ์ด๊ณผํ๋ฉด ๊ณ์ํด์ ์ ํ์ผ์ ์์ฑํ๋ ์์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด WAL์ ์์ญ ๊ตฌ๋ถ์ด ์๋ค.
์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์คํค๋ง, ํ
์ด๋ธ์ write๋ฅผ ๋ ๋ฆฌ๋ , ์ด ๋จ์ผ ๊ฒฝ๋ก์ WAL ํ์ผ์ด ๋ง๋ค์ด์ง๋ ๊ฒ์ด๋ค. ํ
์ด๋ธ ๋จ์๋ก ๋๋๋ ๊ฒ์ ํ์ฒ๋ฆฌ ๊ฐ๋
์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
WAL์ ๋ ์ฝ๋ ํฌ๋งท
WAL์ ๋น์ฐํ ๋จ์ํ ํ
์คํธํ์ผ์ด ์๋๋ค. ์ ๋นํ ํํ์ ๋ฐ์ด๋๋ฆฌ๋ก ์ ์ฅ๋์ด์๋ค.
์ด๊ฑธ ๊น๋ณด๋ ค๋ฉด pg_waldump ๋๊ตฌ๋ฅผ ์จ์ ๋ณด๋ฉด ๋๋ค.
ํ์ผ์ ํ๋ ๊ณจ๋ผ์ ๊น๋ณด์.
sudo pg_waldump /var/lib/postgres/data/pg_wal/walํ์ผ
๊ทธ๋ผ ์ด๋ ๊ฒ ์ด์ง๋ฝ๊ฒ ์์ธ๋ค.
์ด ํ ํ๋ํ๋๊ฐ ๋ณ๋์ ์ฐ๊ธฐ ๋ฐ์ดํฐ์ธ ๊ฒ์ด๋ค.
WAL๊ณผ CHECKPOINT
์ฒดํฌํฌ์ธํธ๋ WAL์ ์ด๋๊น์ง ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋์ง๋ฅผ ๊ด๋ฆฌํ๋ ์ผ์ข ์ ์ปค์๋ค.
์ด๋ฅผ ํตํด WAL ๊ธฐ๋ก ์ค์ ์ ์ ๋ฑ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋, ์์ ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ค.
์๋ฅผ ๋ค๋ฉด ์ด๋ฐ ์์ด๋ค.
-
00001-00010 ์ด 10๊ฐ์ WAL ๋ฐ์ดํฐ ์ฝ์
-
00001-00005๊น์ง์ WAL์ ์ฒ๋ฆฌํด์ ๋ฉ์ธ ํ ์ด๋ธ์ ๋ฐ์.
-
CHECKPOINT์ 00005๊น์ง ์ฒ๋ฆฌํ๋ค๊ณ ๊ธฐ๋ก
-
00006-00010 WAL ์ฒ๋ฆฌ์ค ์ฅ์ ๋ฐ์
-
์ฌ์์
-
CHECKPOINT๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์์ - 00006-00010 WAL ์ฒ๋ฆฌ...
์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ์ธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ์ง WAL ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ณต๊ตฌํ๊ณ , ๊ฐ๊ณตํด์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ก ๋ง๋ค ์ ์๋ค.
๋ง์ฝ ์ฒดํฌํฌ์ธํธ ์ง์ , ์ด๋ฏธ ํ ์ด๋ธ์ ๋ฐ์ํ ๊ฒ์ ๋ค์ ๋ฐ์ํ๊ฒ ๋๋๋ผ๋ ๊ด์ฐฎ๋ค. ์ด์ฐจํผ ๋ ์ฝ๋ ๋ฒํธ(LSN)์ ๊ธฐ๋ฐ์ผ๋ก ๋ฉฑ๋ฑ์ ์ธ ์์ ์ ํ๋ ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์์ ์ ์ฑ๋ฅ์ ์ํด์ ๋์คํฌ ์ฐ๊ธฐ๋ฅผ ๋งค์ฐ ๊ฒ์ผ๋ฅด๊ฒ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ์์๋ง ์์ ํ๊ณ ๋์คํฌ์๋ ๋ฐ์๋์ง ์๋ ๊ฒ์ด ํํ๋ค. ์ฒดํฌํฌ์ธํธ๋ ์ด๊ฑธ ๋ค์ ๋ฐ๋ก์ก๋ ๋ณด์์ ๊ฐ๋ ์ผ๋ก์๋ ๊ธฐ๋ฅํ๋ค. ์ฒดํฌํฌ์ธํธ๊ฐ ๋๋ฉด ๋์คํฌ-๋ฉ๋ชจ๋ฆฌ ๋ถ์ผ์น๋ฅผ ๊ฐ์ ๋ก ๊ต์ ํ๋ ๊ฒ์ด๋ค.
ํ์ฌ ์ปค์ (LSN)์ ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ํตํด ํ์ธ ๊ฐ๋ฅํ๊ณ

์ฒดํฌํฌ์ธํธ์ ๋ํ ์ปค์ ์ ๋ณด๋ pg_control์ด๋ผ๋ ๊ธ๋ก๋ฒ ์ค์ ํ์ผ์ ์กด์ฌํ๋ค.

๋น์ฐํ ๊ทธ๋ฅ์ ๋ชป์ฝ๊ณ
๋๊ตฌ๋ฅผ ์จ์ผ ํ์ฑํด์ ๋ณผ ์ ์๋ค.

์ฒดํฌํฌ์ธํธ๋ ์ฐ๊ธฐ๋ ์ปค๋ฐ๋ง๋ค ๋๋ฆฌ๊ฑฐ๋ ํ์ง ์๊ณ , postgresql์ด ๋ด๋ถ์ ์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๋ ค์ ์ฒ๋ฆฌํ๋ ์์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋๋ฆฌ๋๊ฒ ํ๋ ์๊ณ , ํฌ๊ธฐ ์ ํ์ผ๋ก ๋๋ฆฌ๋๊ฒ ํ๋ ์๋ค.

๊ธฐ๋ณธ ์ต์
์ ์ด๊ฑฐ๋ค. 5๋ถ๋ง๋ค ์ฒดํฌํฌ์ธํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ณ , ๋ณต๊ตฌ ์ง์ ์ ์ฌ์ค์ ํ๋ ๊ฒ์ด๋ค.
์ฐ๊ธฐ ๊ท๋ชจ๊ฐ ํฌ๋ค๋ฉด ์ด ์ต์
์ ์กฐ์ ํ๋ ๊ฒ๋ ์ฑ๋ฅ์ ์ ์๋ฏธํ ์ํฅ์ ์ค๋ค.
๋๋ฌด ์์ฃผ ๋์๋ ์ข์ง ์๊ณ , ๋๋ฌด ํ๋ฒ์ ๋ชฐ์์ ์ฒ๋ฆฌํด๋ ์ข์ง ์๋ค.
์๊ฐ๋น ์์ด๋ ๋ฐ์ดํฐ ํ๊ท ์ ์์๋ด์ max_wal_size๋ฅผ ์ค์ ํ๊ณ , ์์ ์ ์ด๊ณ ์์ ๊ฐ๋ฅํ ์์ ์ checkpoint๊ฐ ๋๊ฒ๋ ํ๋ ๊ฒ์ด ์ต์ ์ ์ ๋ต์ด๋ค.
WAL๊ณผ ํ์ผ ์ ๋ฆฌ
๋น์ฐํ WAL์ ๋ก๊ทธ์ด๋ฏ๋ก, ์ถฉ๋ถํ ํ์ฉํ๋ค๋ฉด ์ญ์ ํ๊ฑฐ๋ ์ ๋ฆฌ๋ฅผ ํด์ผ ํ๋ค. ๋ฌดํํ ์๋๋ค๋ฉด ๋์คํฌ๊ฐ ๋จ์๋์ง ์์ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ถํ์ํ WAL ํ์ผ์ ์ ๋ฆฌ๋ CHECKPOINT ๋จ๊ณ์์ ์ด๋ฃจ์ด์ง๋ค.
์ฒดํฌํฌ์ธํธ๋ฅผ ์ง๋ WAL ํ์ผ๋ค์ "์ญ์ "ํ๊ฑฐ๋, ์ฌํ์ฉํ๊ธฐ๋ ํ๋ค. ์ฌํ์ฉ์ ๊ธฐ์กด์ ํ์ผ์ ์ด๋ฆ๋ง ๋ฐ๊ฟ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ๋งํ๋ค.
์ฌ๊ธฐ์๋ ์ฌ๋ฌ๊ฐ์ง ์ต์ ์ด ์๋ค.

min_wal_size/max_wal_size๋ checkpoint ์ดํ์๋ ๋จ๊ฒจ๋ ์ต์-์ต๋ wal ํฌ๊ธฐ๋ค.
์ด๋ ๊ฒ ๋จ๊ธด ํ์ผ์ ๋์ค์ write๊ฐ ๋ฐ์ํ ๋, ์ด๋ฆ๋ง ๋ฐ๊พธ๊ณ ๋ฎ์ด์จ์ ์ฌ์ฌ์ฉํ๋ค.
์์นด์ด๋ธ์ค๋๊ฐ off์ฌ์ผ ์๋์ผ๋ก wal ํ์ผ์ ์ ๋ฆฌํด์ค๋ค. ๊ธฐ๋ณธ๊ฐ์ off๋ค.
๋ WAL ์ ๋ฆฌ๋ฅผ ๋ฐฉํดํ ์ ์๋ ์ฃผ๋ฒ์ผ๋ก๋ replication slot์ด ์๋ค.
CDC ๊ตฌํ์ ์ฌ์ฉ๋๋ ์์คํ
์ธ๋ฐ, ๋น์ฐํ ๋ก๊ทธ๊ฐ ์์ฌ์์ด์ผ ๊ทธ๊ฑธ ๊ฐ๋ค๊ฐ ๋๊ธฐํ์ ์ธ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทผ๋ฐ ์ด๊ฒ ์ ๋ ์๋ชจ๋์ง ์๊ณ ์์ฌ์์ผ๋ฉด, wal์ ์ง์ฐ์ง ๋ชปํ๊ณ ๊ฑธ๋ ค๋ฒ๋ฆฐ๋ค.
https://m.blog.naver.com/sssang97/223926531588
WAL๊ณผ WAL Buffer
write๋ฅผ ํ๋ค๊ณ ํด์ wal ์ธ๊ทธ๋จผํธ ํ์ผ์ด ๋ ๋ฐ๋ก ๋ง๋ค์ด์ง๋ ๊ฒ์ ์๋๋ค.
wal ์ฐ๊ธฐ ์ ๋จ๊ณ์ WAL Buffer๋ผ๊ณ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๊ฐ ์กด์ฌํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก๋ 4MB~16MB ์ ๋๋ก ์ค์ ๋๋ฉฐ, ํธ๋์ญ์ ๋จ์๋ก flush๋๋ค.

๊ทธ๋์ ๊ฐ๋ณ write๋ฅผ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์๋ ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ์ ์ธ ์ด๋์ด ๋ณ๋ก ์๊ณ , ์ฌ๋ฌ๊ฐ์ write๋ฅผ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ๋ชจ์์ ์๋ ๊ฒฝ์ฐ์๋ง ์ ์๋ฏธํ ์ฑ๋ฅ ํฅ์์ด ์๋ค.
WAL Buffer๋ ๋ฉ๋ชจ๋ฆฌ ์์ค ์์ญ์ด๋ผ ์ฅ์ ๋ฐ์์์๋ ์ ์ค๋ ์ ์๋ค. ํ์ง๋ง ์ด์ฐจํผ ํธ๋์ญ์ ๋จ์๋ก flushํ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ถ์์ฉ์ ํฌ์ง ์์ ํธ์ด๋ค.
ํ์ง๋ง ํธ๋์ญ์ ์ ๊ฑฐ๋ํ write ๋จ์๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ๊ฐ ํํ๋ค๋ฉด, wal_buffer๋ฅผ ์ข ํฌ๊ฒ ์กฐ์ ํ๋ ๊ฒ์ด ์๋ฏธ์๋ ํ๋์ด ๋ ์ ์๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ๋ณดํต ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ์ 3-5% ์ ๋๋ฅผ ๊ถ์ฅํ๋ค.
WAL๊ณผ ๋์คํฌ ๋ถ๋ฆฌ
๊ฐ๋ฅํ๋ค๋ฉด, ์ง์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ฅ๋๋ ๋์คํฌ์ WAL์ด ์ ์ฅ๋๋ ๋์คํฌ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌ๋๋ ๊ฒ์ด ๋ ์ฑ๋ฅ์ ๊ทน๋ํํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ๋จ์ผ ๋์คํฌ์๋ I/O ํ๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฃผ์์ฌํญ
WAL ์ฐ๊ธฐ ๋ํ ํ๋์จ์ด๋ OS ์์ค ์ฅ์ ๋ก ์ธํด์ ์ธ์ ๋ ์คํจํ ์ ์๋ค.
์๋ฅผ ๋ค๋ฉด, ์ค์ ๋ก OS๊ฐ ๋์คํฌ์ flushํ์ง ์์์์๋ flushํ๋ค๊ณ ์๋ ค์ค ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ด์ฉ ๋๋ฆฌ๊ฐ ์๋ค. ๊ฒ๋ค๊ฐ ์ด๋ฐ ์ฅ์ ์ํฉ์์ ์ ์ ์ด ๋ฐ์ํ๋ค๊ฑฐ๋ ํ๋ฉด ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ํ๊น์ง ๊ฐ ์๋ ์๋ค.
์ฐธ์กฐ
https://www.postgresql.org/docs/current/wal-internals.html
https://postgresql.kr/docs/10/continuous-archiving.html
https://www.postgresql.org/docs/current/wal-reliability.html
https://edbkorea.com/blog/postgresql-checkpoint-tuning/
https://postgresql.kr/docs/9.5/runtime-config-wal.html