[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