[DB] WAL๊ณผ fsync

https://m.blog.naver.com/sssang97/223233122052

Write Ahead Log(์ดํ•˜ WAL)์€ DB์— ์žˆ์–ด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ทผ๊ฐ„์ด๋ฉด์„œ๋„, ๊ฐ€์žฅ ํฐ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์ ์ด๊ธฐ๋„ ํ•˜๋‹ค.
์ด๊ฑด ์–ด๋–ค DB๋“  ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ณ‘๋ชฉ์˜ ์„ธ๋ถ€์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋””์Šคํฌ ์“ฐ๊ธฐ ๋ณด์žฅ(fsync)์ด๋‹ค.

WAL์ด ์ œ๋•Œ ์ž‘์„ฑ๋˜์–ด์•ผ ํ˜น์‹œ๋‚˜ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ณต๊ตฌํ•  ์ˆ˜๊ฐ€ ์žˆ๋Š”๊ฑด๋ฐ, ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฌด์ž‘์ • write๋งˆ๋‹ค fsync๋ฅผ ๋‚ ๋ ค์„œ WAL์„ ํ™•์‹คํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜๋ฉด ์„ฑ๋Šฅ ๋ถ€ํ•˜๊ฐ€ ํฌ๊ฒŒ ๊ฑธ๋ฆฐ๋‹ค. ์ด๊ฒŒ ์ƒ๊ฐ๋ณด๋‹ค ์—„์ฒญ ํฐ ๋”œ๋ ˆ๋งˆ๋‹ค.

fsync๋ฅผ ๋„ˆ๋ฌด ๋‚ ๋ ค๋Œ€๋ฉด ๋””์Šคํฌ ์ €์žฅ์€ ํ™•์‹คํ•˜๊ฒŒ ๋ณด์žฅ๋˜๋‹ˆ ์•ˆ์ „ํ•˜๊ธฐ์•ผ ํ•˜์ง€๋งŒ, ๊ทธ๋งŒํผ ๋””์Šคํฌ/๋ฆฌ์†Œ์Šค ๋ถ€ํ•˜๊ฐ€ ์ปค์ง„๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  fsync๋ฅผ ๊ฒŒ์œผ๋ฅด๊ฒŒ ํ•˜๋ฉด, ์ง„์งœ ๋””์Šคํฌ ์“ฐ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์„œ๋ฒ„๊ฐ€ ๋ป—์„ ๊ฒฝ์šฐ ์†์‹ค์ด ๋ฐœ์ƒํ•œ๋‹ค.




PostgreSQL์˜ ๊ฒฝ์šฐ

PostgreSQL์€ ์•ˆ์ •์„ฑ์„ ์„ฑ๋Šฅ๋ณด๋‹ค ์ค‘์š”์‹œํ•˜๋Š” ๊ฒฝ์šฐ๋ผ์„œ, fsync๋ฅผ write๋งˆ๋‹ค ๋‚ ๋ฆฌ๋Š” ์ถ•์— ์†ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์กฐ์ • ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์ด ์ œ๊ณต๋œ๋‹ค.

WAL fsync์™€ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” commit_delay๊ฐ€ ์žˆ๋‹ค. ๋‹จ์œ„๋Š” ๋งˆ์ดํฌ๋กœ์ดˆ๊ณ  ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋ผ์„œ ํ•ญ์ƒ ์ฆ‰์‹œ ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

commit_delay์— 500ms๋ฅผ ์ง€์ •ํ•œ๋‹ค๋ฉด, write๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ตœ๋Œ€ 500ms๊นŒ์ง€ ๋‹ค๋ฅธ write๋ฅผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ fsync๋ฅผ ๋‚ ๋ฆฌ๋Š” ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋ชจ์•„์„œ ์˜๋Š” ๊ฒƒ์ด๋‹ค.
๋‹น์—ฐํžˆ ์ด ๊ฐ’์„ ๋Š˜๋ฆด ์ˆ˜๋ก ์“ฐ๊ธฐ ์„ฑ๋Šฅ์€ ํ–ฅ์ƒ๋˜๊ฒ ์ง€๋งŒ, ๊ทธ๋งŒํผ ์žฅ์• ์‹œ ๋ฐ์ดํ„ฐ ๋‚ด๊ตฌ์„ฑ์ด ์†์‹ค๋  ๊ฒƒ์ด๋‹ค.




CassandraDB์˜ ๊ฒฝ์šฐ

CassandraDB๋Š” ์ด ๋ถ€๋ถ„์—์„œ ๋‚ด๊ตฌ์„ฑ์„ ํฌ๊ธฐํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐ€์ ธ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ–ˆ๋‹ค.
write๋งˆ๋‹ค fsync ๋™๊ธฐํ™”๋ฅผ ํ•˜์ง€๋Š” ์•Š๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด์„œ ์ •๊ธฐ์ ์œผ๋กœ fsync๋ฅผ ๋‚ ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋””์Šคํฌ ์ €์žฅ์„ ๋А์Šจํ•˜๊ฒŒ ๋ณด์žฅํ•œ๋‹ค.

์ด์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ commitlog_sync_period_in_ms๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 10000(10์ดˆ)๋‹ค.

์ด ๋ง์ธ์ฆ‰์Šจ 10์ดˆ๋งˆ๋‹ค ๋™๊ธฐํ™”๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ํ•˜๋“œ์›จ์–ด ์žฅ์•  ๋“ฑ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด 10์ดˆ ๋‚ด์— ์ €์žฅ๋œ ๊ฐ’์€ ์ง„์งœ ์ฆ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://cassandra.apache.org/doc/3.11/cassandra/architecture/storage_engine.html
https://stackoverflow.com/questions/67353944/will-the-write-ahead-log-become-the-bottleneck-of-cassandra
https://postgresql.kr/docs/9.5/runtime-config-wal.html
https://wiki.postgresql.org/wiki/Group_commit