์ด ํ์ด์ง์์๋ Cloud SQL ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์๊ฐ
Cloud SQL ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ํํฉ๋๋ค. PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฌ๋ก๋๊ฐ ์ฆ๊ฐํ๋ฉด ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์ธ์คํด์ค์์ ๋๋๋ก ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ์ด๋ํ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํฌ ์ ์์ต๋๋ค.
์์๊ฐ ์ฆ๊ฐํ์ฌ Cloud SQL ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์ดํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ธ์คํด์ค๊ฐ ์ ์์ ์ธ ์ํ๋ก ์๋ํ๋๋ก ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
PostgreSQL ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ์์๋ ํฌ๊ฒ ๋ ๊ฐ์ ์น์ ์ผ๋ก ๋๋ฉ๋๋ค.
- ์ ์ญ ๋ฉ๋ชจ๋ฆฌ: ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํด ๋ชจ๋ ํ๋ก์ธ์ค์์ ๊ณต์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด
shared_buffers
๋ฐmax_connections
์ ๋๋ค. - ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ: ๊ฐ ์ฐ๊ฒฐ์ ํ ๋น๋ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ์
๋๋ค. ์๋ฅผ ๋ค๋ฉด,
work_mem
,maintenance_work_mem
๋ฐtemp_buffers
์ ๋๋ค.
๊ธฐํ ๊ตฌ์ฑ ๊ณ ๋ ค์ฌํญ์ ์ผ๋ฐ ๊ถ์ฅ์ฌํญ ๋ฐ ์ด์ ๊ฐ์ด๋๋ผ์ธ์ ์ฐธ์กฐํ์ธ์.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ํ๋๊ทธ
Cloud SQL ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ ๋๋ง๋ค ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ ๊ณ ๋ คํด์ผ ํ ์ ์์ต๋๋ค.
- ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ ๋๋ ํ๋ก์ธ์ค๋ ๋ฌด์์ธ๊ฐ์?
- ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋์ ์ ํฉํ๊ฐ์?
- ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ ์ด๋ป๊ฒ ๋ณ๊ฒฝํ๋์?
PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ํ๋ฉด ๋๋ถ๋ถ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์์ญ์์ ๋ฐ์ํฉ๋๋ค.
๊ณต์ ๋ฒํผ: PostgreSQL์์
read
๋ฐwrite
์์ ์ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋๋ก ํ ๋นํ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค.read
์์ ์ ๊ฒฝ์ฐ ๋์คํฌ์์ ์์ฒญ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ RAM์ผ๋ก ๊ฐ์ ธ์จ ํ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก PostgreSQL์์๋ ๋ฐ์ดํฐ๊ฐ ์์ฒญ๋๋ฉด(์:SELECT * from emp
) ๋จผ์ ์บ์ฑ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์์shared_buffers
๋ก ๊ฐ์ ธ์จ ๋ค์ ํด๋ผ์ด์ธํธ์ ์ ๊ณตํฉ๋๋ค.write
์์ ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.๊ณต์ ๋ฒํผ๋ ๋ฐ์ดํฐ ์บ์ฑ, ์ฐ๊ฒฐ ์บ์ฑ, ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด(DML) ์์ ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋์ ๋ํ ๋ชจ๋ ํ๋ก์ธ์ค ๋ฐ ์ฐ๊ฒฐ์ ๋ํ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๊ธฐ๋ ํฉ๋๋ค. ์ด ์์ญ์์ ํ ๋นํ ์ ์๋ ์ต๋๊ฐ์
shared_buffers
ํ๋๊ทธ๋ก ์ง์ ๋๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ์ 33%์ ๋๋ค.shared_buffers
๊ฐ์ด ๋์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์บ์๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํฝ๋๋ค.- ์ฟผ๋ฆฌ ์์
๋ฉ๋ชจ๋ฆฌ: ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด PostgreSQL์ ์ ๋ ฌ ๋ฐ ํด์ฑ๊ณผ ๊ฐ์ ๊ฐ ์์
์ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. ์์ ๋์คํฌ ํ์ผ์ ์ฐ๊ธฐ ์ ์ ๊ฐ ์ฟผ๋ฆฌ ์์
์ ํ ๋นํ ์ ์๋ ์ต๋๊ฐ์
work_mem
ํ๋๊ทธ๋ก ๊ตฌ์ฑ๋๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 4MB์ ๋๋ค.work_mem
๊ฐ์ด ๋์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ ฌํ ์ ์๋ ๋ฐ์ดํฐ ์์ด ๋ง์ต๋๋ค. - ์ ์ง๋ณด์ ์์
๋ฉ๋ชจ๋ฆฌ:
VACUUM
,CREATE INDEX
,ALTER TABLE
,ADD FOREIGN KEY
์ ๊ฐ์ ์ผ๋ถ ์ ์ง๋ณด์ ์์ ์๋ PostgreSQL์ด ํ ๋นํ๋ ๋ณ๋์ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฌํ ์์ ์์ ์ฌ์ฉํ๋ ๋ฐฑ์๋ ํ๋ก์ธ์ค์ ์ต๋ ํฌ๊ธฐ๋maintenance_work_mem
ํ๋๊ทธ๋ก ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 64MB์ ๋๋ค. autovacuum ์์ ์๋ ์ ์ง๋ณด์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ต๋๊ฐ์autovacuum_work_mem
ํ๋๊ทธ๋ก ์ฌ์ ์ํ ์ ์์ต๋๋ค.maintenance_work_mem
๊ฐ์ด ๋์ผ๋ฉดVACUUM
์์ ์ ์ฑ๋ฅ ์๋๊ฐ ๋์ต๋๋ค. - ์์ ๋ฒํผ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์
์์ ์์ ํ
์ด๋ธ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ PostgreSQL์ ์ธ์
๋ก์ปฌ ์์ ํ
์ด๋ธ์ ์ ์ฅํ ์์ ๋ฒํผ๋ฅผ ํ ๋นํฉ๋๋ค. ์ต๋ ์ฉ๋์
temp_buffers
ํ๋๊ทธ๋ก ์ง์ ํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 8MB์ ๋๋ค. - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ: ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ฉด PostgreSQL์ ํด๋ผ์ด์ธํธ ์ธ์
์ ์ ๊ณตํ๊ธฐ ์ํ ๋ฐฑ์๋ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ญ๋๋ค. PostgreSQL์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ฉ๋ชจ๋ฆฌ ์ธ์๋ ์์คํ
์นดํ๋ก๊ทธ ์บ์ ๋ฐ ์ค๋น๋ ์ฟผ๋ฆฌ ๊ณํ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ง๊ด๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ํ์ฉ๋๋ ์ต๋ ๋์ ์ฐ๊ฒฐ ์๋
max_connections
ํ๋๊ทธ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๊ฐ ์ ํด ์ฐ๊ฒฐ์ ์ฝ 2MB~3MB์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.max_connections
๊ฐ์ด ๋์ผ๋ฉด ์ธ์คํด์ค๊ฐ ๋ ๋ง์ ์ฐ๊ฒฐ์ ์ค์ ํ ์ ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
PostgreSQL์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ์์์ ์ ์ฒด ๋ชฉ๋ก์ PostgreSQL ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์. ์ด ์น์ ์ ๋์ด๋ ํ๋๊ทธ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ ํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง
Cloud Monitoring์์ ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ํ๋ ๋ฏธ๋ง์ผ๋ก ์ ์งํฉ๋๋ค. 6์๊ฐ ๋์ ์ฌ์ฉ๋์ด ํ๋์ 90%๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ ์๋ฆผ์ ๋ฐ๋๋ก Cloud Monitoring์์ ์๋ฆผ์ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ์๋ฆผ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํ๋์ ์ง์์ ์ผ๋ก ๊ฐ๊น์์ง ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ด์๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
์ด๋ฅผ ์ํด Cloud Monitoring์์ server process .* was terminated by signal 9: Killed
๋ฉ์์ง์ ๋ํด ๋ก๊ทธ ๊ธฐ๋ฐ ์ธก์ ํญ๋ชฉ์ ์ค์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ด๋ฒคํธ๋ฅผ ๊ณ์ฐํ ๋ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์๋ฆผ์ ๋ณด๋
๋๋ค.
์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ๋์ 90% ์ด์์ผ๋ก ๊ณ์ ์๋ํ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค.
๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์๋ฅผ ์ ํํ๊ฑฐ๋ shared_buffers
, work_mem
, max_connections
๋ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ๋ฅผ ๋ฎ์ถฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ๋๊ทธ๋ฅผ ๋ฎ์ถ๋ฉด ์ธ์คํด์ค์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํฌ๋ก๋๋ฅผ ์ฒ๋ฆฌํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ตํ์ ์๋จ์ผ๋ก ๊ธฐ๋ณธ Linux ์ด์์ฒด์ ๊ฐ out-of-memory (OOM) killer
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํด์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํฉ๋๋ค. Cloud SQL์ OOM killer
๊ฐ PostgreSQL ์์
์ ํ๋ก์ธ์ค๋ง ๋์์ผ๋ก ์ง์ ํ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํ๊ธฐ ์ํด ๋ชจ๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ข
๋ฃํ๊ณ ๋ณต๊ตฌ๋ฅผ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋๋๋ก postmaster ํ๋ก์ธ์ค๊ฐ ๋ณด์กด๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋น์ค ์ค๋จ ๋ฐ ๋ค์ดํ์์ด ๋ฐ์ํฉ๋๋ค. PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก๊ทธ์ ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
2021-10-24 23:34:22.265 UTC [7]: [663-1] db=,user= LOG: server process (PID 1255039) was terminated by signal 9: Killed 2021-10-24 23:34:22.265 UTC [7]: [664-1] db=,user= DETAIL: Failed process was running: SELECT * FROM tab ORDER BY col 2021-10-24 23:34:22.277 UTC [7]: [665-1] db=,user= LOG: terminating any other active server processes 2021-10-24 23:34:22.278 UTC [1255458]: [1-1] db=postgres,user=postgres WARNING: terminating connection because of crash of another server process 2021-10-24 23:34:22.278 UTC [1255458]: [2-1] db=postgres,user=postgres DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory. 2021-10-24 23:34:22.278 UTC [1255458]: [3-1] db=postgres,user=postgres HINT: In a moment you should be able to reconnect to the database and repeat your command. 2021-10-24 23:34:22.278 UTC [1255458]: [4-1] db=postgres,user=postgres CONTEXT: while updating tuple (27,18) in relation "tab" ... 2021-10-24 23:34:22.558 UTC [1255477]: [1-1] db=postgres,user=postgres FATAL: the database system is in recovery mode ... 2021-10-24 23:34:25.579 UTC [7]: [666-1] db=,user= LOG: all server processes terminated; reinitializing ... 2021-10-24 23:34:25.691 UTC [1255482]: [1-1] db=,user= LOG: database system was interrupted; last known up at 2021-10-24 23:31:53 UTC 2021-10-24 23:34:25.776 UTC [1255482]: [2-1] db=,user= LOG: database system was not properly shut down; automatic recovery in progress 2021-10-24 23:34:25.789 UTC [1255482]: [3-1] db=,user= LOG: redo starts at 227/AB359400 2021-10-24 23:34:38.957 UTC [1255482]: [4-1] db=,user= LOG: redo done at 229/4621F508 2021-10-24 23:34:38.959 UTC [1255482]: [5-1] db=,user= LOG: last completed transaction was at log time 2021-10-24 23:34:18.5535+00 2021-10-24 23:34:39.290 UTC [7]: [667-1] db=,user= LOG: database system is ready to accept connections
๋ค์ ๋จ๊ณ
- PostgreSQL์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ตฌ์ฑ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
- PostgreSQL ์๋ฒ ์กฐ์