PostgreSQL์ ๊ฐ์ฒด-๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
(ORDBMS)์ค ํ๋๋ก ๋ฒํด๋ฆฌ ๋ํ์์ ๊ฐ๋ฐํ Postgres(ver 4.2)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋์๋ค.
Postgres๋ฅผ ๊ณ์นํ๋ฉฐ SQL์ ์ง์ํ๋ค๋ ์ด์ ๋ก ์ด๋ฆ์ PostgreSQL๋ก ์ด๋ฆ์ ์ง๊ฒ๋์๋ค๊ณ ํ๋ค.
์ด๋ฌํ Postgres๋ BSD(Berkeley Software Distribution) ๋ผ์ด์ผ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ด ์๋ฌด๋ ์์ ๊ฐ๋ฅํ๋ฉฐ, ์์ ํ์ ๊ฒฝ์ฐ ๊ฐ๋ฐํ ์ฌ๋์ด ๊ณต๊ฐ ์ฌ๋ถ๋ฅผ ์ ํ ์ ์๋ค.
์ถ์ฒ : Understanding the PostgreSQL Architecture
Postgres์ ๋ฌผ๋ฆฌ์ ๊ตฌ์กฐ๋ ๊ต์ฅํ ๊ฐ๋จํ๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด Shared Memory, 4๊ฐ ์ ํ์ ํ๋ก์ธ์ค ๊ทธ๋ฆฌ๊ณ Data files๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
Shared Memory๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์ฑ ๋ฐ ํธ๋์ญ์ ๋ก๊ทธ ์บ์ฑ์ ์ํด ์์ฝ๋ ๋ฉ๋ชจ๋ฆฌ์ด๋ฉฐ, ๊ฐ์ฅ ์ค์ํ ์์๋
Shared Buffer
์WAL Buffer
์ด๋ค.
-
๊ณต์ ๋ฒํผ(Shared Buffer)
๊ณต์ ๋ฒํผ์ ๋ชฉ์ ์ DISK I/O๋ฅผ ์ต์ํ ํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๊ณต์ ๋ฒํผ๋ ๋ค์๊ณผ ๊ฐ์ ์์น์ ์ถฉ์กฑํด์ผ๋๋ค.- ๋งค์ฐ ํฐ ๋ฒํผ์ ๋น ๋ฅด๊ฒ ์ก์ธ์ค ๊ฐ๋ฅ
- ๋ง์ ์ฌ์ฉ์๊ฐ ๋์์ ์ก์ธ์ค ํ ๋ ๊ฒฝํฉ์ ์ต์ํ
- ์์ฃผ ์ฌ์ฉ๋๋ ๋ธ๋ก์ ๊ฐ๋ฅํ ์ค๋ซ๋์ ๋ฒํผ์ ์กด์ฌ
-
WAL ๋ฒํผ(Write Ahead Log Buffer)
WAL ๋ฒํผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ ์ฌํญ์ ์์๋ก ์ ์ฅํ๋ ๋ฒํผ์ด๋ค.
WAL ๋ฒํผ์ ์ ์ฅ๋ ๋ด์ฉ์ ์์์ ์์ ์ WAL ํ์ผ์ ๊ธฐ๋ก์ด ๋๋ฉฐ, ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ๋ฅผ ํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
Postgres์๋ 4๊ฐ์ง์ ํ๋ก์ธ์ค ์ ํ์ด ์กด์ฌํ๋ค.
- Postmaster (Daemon) Process
- Background Process
- Backend Process
- Client Process
-
Postmaster Process
ํฌ์คํธ ๋ง์คํฐ ํ๋ก์ธ์ค๋ PostgreSQL์ ์์ํ ๋ ์ฒซ ๋ฒ์งธ๋ก ์์๋๋ ํ๋ก์ธ์ค์ด๋ค.
์์์ ๋ณต๊ตฌ๋ฅผ ์ํํ๋ฉฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ๊ธฐํํ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค.
๋ํ, ํด๋ผ์ด์ธํธ ํ๋ก์ธ์ค๋ก๋ถํฐ ์ฐ๊ฒฐ ์์ฒญ์ด ์์๋ ๋ฐฑ์๋ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. -
Background Process Postgresql ์์ ์ ํ์ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ๋ค.
-
logger
์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋ก
-
checkpointer
์ฒดํฌ ํฌ์ธํธ๊ฐ ๋ฐ์ํ๋ฉด dirty ๋ฒํผ๊ฐ ํ์ผ์ ๊ธฐ๋ก
-
writer
dirty ๋ฒํผ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ผ์ ๊ธฐ๋ก
-
wal writer
WAL ๋ฒํผ์ ๋ด์ฉ์ WAL ํ์ผ์ ๊ธฐ๋ก
-
Autovacuum launcher
autovacuum์ด ํ์ฑํ ๋ ๊ฒฝ์ฐ, autovacuum ์์ ์ ํ๋ก์ธ์ค๋ฅผ Fork
-
archiver
Archive.log ๋ชจ๋์ผ๋, WAL ํ์ผ์ ์ง์ ๋ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌ
-
stats collector
์ธ์ ์คํ ์ ๋ณด(pg_stat_activity) ๋ฐ ํ ์ด๋ธ ์ฌ์ฉ ํต๊ณ ์ ๋ณด(pg_stat_all_tables)์ ๊ฐ์ DBMS ์ฌ์ฉ ํต๊ณ๊ฐ ์์ง
Vacuum..?
Vacuum์ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ค.
-
ํ ์ด๋ธ ๋ฐ ์ธ๋ฑ์ค ํต๊ณ ์์ง
-
ํ ์ด๋ธ ์ฌ๊ตฌ์ฑ
-
ํ ์ด๋ธ ๋ฐ ๋ฐ๋ ๋ธ๋ก ์ธ๋ฑ์ค ์ ๋ฆฌ
-
XID ๋ฉ ์ด๋ผ์ด๋ ๋ฐฉ์ง๋ฅผ ์ํด ๋ ์ฝ๋ XID๋ก ๊ณ ์
1,2๋ ์ผ๋ฐ์ ์ผ๋ก DBMS ๊ด๋ฆฌ์ ํ์ํ๋ 3,4๋ฒ์ PostgreSQL MVCC ๊ธฐ๋ฅ์ผ๋ก ํ์
-
-
Backend Process
๋ฐฑ์๋ ํ๋ก์ธ์ค๋ ์ฌ์ฉ์ ํ๋ก์ธ์ค์ ์ฟผ๋ฆฌ ์์ฒญ์ ์ํ ํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ์ ์กํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฑ์๋ ํ๋ก์ธ์ค๋ 100๊ฐ๊ฐ ์์ฑ๋๋ฉฐmax_connections
๋ฅผ ์ค์ ํ์ฌ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
์ฟผ๋ฆฌ ์คํ์๋ ์ผ๋ถ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๊ฐ ํ์ํ๋ฉฐ ์ด๋ฅผ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ํ๋ค.
๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ จ๋ ๋งค๊ฐ ๋ณ์๋ ๋ค์๊ณผ ๊ฐ๋ค.-
work_mem
์ ๋ ฌ, ๋นํธ ๋งต ์์ , ํด์ ์กฐ์ธ ๋ฐ ๋ณํฉ ์กฐ์ธ์ ์ฌ์ฉ๋๋ ๊ณต๊ฐ
๊ธฐ๋ณธ 4MB -
Maintenance_work_mem
CREATE INDEX์ ์ฌ์ฉ๋๋ ๊ณต๊ฐ
๊ธฐ๋ณธ 64MB -
Temp_buffers
์์ ํ ์ด๋ธ์ ์ฌ์ฉ๋๋ ๊ณต๊ฐ
๊ธฐ๋ณธ 8MB
-
-
Client Process
ํด๋ผ์ด์ธํธ ํ๋ก์ธ์ค๋ ๋ชจ๋ ๋ฐฑ์๋ ํ๋ก์ธ์ค์ ์ฐ๊ฒฐ ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค.
์ง์๋ฅผ ์ํํ๊ธฐ ์ํด Client Interface Libarary๋ฅผ ์ฌ์ฉํ๋ค.
- ํด๋ผ์ด์ธํธ์์ ์ธํฐํ์ด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(libpg, JDBC, ODBC...)๋ฅผ ํตํด ๋ฐฑ์๋ ํ๋ก์ธ์ค์ ์ฐ๊ฒฐ ์์ฒญ
- Postmaster ํ๋ก์ธ์ค๊ฐ ํด๋น ์ฐ๊ฒฐ์ ์ค๊ณ
- ํด๋ผ์ด์ธํธ๋ ํ ๋น๋ ํ๋ก์ธ์ค์ ์ฐ๊ฒฐ์ ํตํด ์ง์๋ฅผ ์ํ