PostgreSQL Linux ํ๋ ๋ฐ ๊ตฌ์ฑ: EPAS ์ฑ๋ฅ ์ต์ ํ ๊ฐ์ด๋
Lรฆtitia Avrot ยท 2024๋ 8์ 1์ผ
EDB Postgres Advanced Server(EPAS)์ PostgreSQL์ Linux์์ ์ต์ ํํ๊ธฐ ์ํ ๊ตฌ์ฑยทํ๋ ๊ถ์ฅ ์ฌํญ์ ํ์ธํ์ธ์.
์ด ํ๋ ๊ฐ์ด๋๋ 2020๋ Dave Page, Devrim Gรผnduz, Shaun Thomas, Stacy Scoggins, Vibhor Kumar, Vik Fearing์ด ์์ฑํ ์๋ณธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, 2024๋ ์ ๋ฐ์ดํธ ๋ฒ์ ์ Lรฆtitia Avrot์ Vibhor Kumar๊ฐ ์์ฑํ์ต๋๋ค.
์ด ๊ถ์ฅ ์ฌํญ์ ์ด๋๊น์ง๋ ์์์ ์ด๋ฉฐ, ์ถ๊ฐ์ ์ธ ๋ฒค์น๋งํฌ์ ์ธก์ ์์ ์ด ํ์ํฉ๋๋ค. ๋ชจ๋ ๊ตฌ์ฑ ์ค์ ์ ๋ค๋ฃฌ ํฌ๊ด์ ์ธ ๋ชฉ๋ก์ด ์๋๋ผ, ๊ธฐ๋ณธ๊ฐ๊ณผ ๋ฌ๋ผ์ผ ํ๋ ๊ฐ์ฅ ์ค์ํ ๋งค๊ฐ๋ณ์๋ง์ ๋ค๋ฃน๋๋ค. ์ต์ ์ ํ๋์ ์ํด์๋ EDB ์ ๋ฌธ ์๋น์ค ํ ๋๋ EDB ๊ณต์ธ ํํธ๋์ ํ๋ ฅํ์๊ธฐ ๋ฐ๋๋๋ค.
๊ฐ๋ ฅํ PostgreSQL ์๋ฒ ์ค๊ณํ๊ธฐ
์๋ ๋ด์ฉ์ PostgreSQL์ฉ ๋ฒ ์ด๋ฉํ ์๋ฒ ๋ฐ ๊ฐ์ ๋จธ์ (VM) ํ๊ฒฝ์ ์ด์ ์ ๋ง์ถฅ๋๋ค. (ํฅํ ๋ฒ์ ์์ ํด๋ผ์ฐ๋ ๋ฐ ์ปจํ ์ด๋ ํ๊ฒฝ ์ค๊ณ๊ฐ ์ถ๊ฐ๋ ์ ์์ต๋๋ค.)
๋ฒ ์ด๋ฉํ ์๋ฒ
๋ฒ ์ด๋ฉํ ์๋ฒ๋ฅผ ์ค๊ณํ ๋๋ CPU, RAM, ๋์คํฌ, ๊ทธ๋ฆฌ๊ณ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋คํธ์ํฌ ์นด๋๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
CPU ์ ํ
CPU ์ ํ์ ์ฑ๋ฅ ์ต์ ํ์ ํต์ฌ ์์์ ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ CPU ์๋๋ ํ์์ด๋ฉฐ, L3 ์บ์๊ฐ ํฐ CPU์ผ์๋ก ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. OLTP(์จ๋ผ์ธ ํธ๋์ญ์ ์ฒ๋ฆฌ) ์ฑ๋ฅ์ ์ํด์๋ ์ฝ์ด ์๊ฐ ๋ง๊ณ ๊ฐ ์ฝ์ด๊ฐ ๋น ๋ฅผ์๋ก ์ด์์ฒด์ ์ PostgreSQL์ ํจ์จ์ด ๋์์ง๋๋ค.
CPU์๋ ์ต์ ๋ ์ข ๋ฅ์ ์บ์๊ฐ ์์ต๋๋ค.
- L1 ์บ์(๊ธฐ๋ณธ ์บ์): ๊ฐ์ฅ ์๊ณ ๋น ๋ฅด๋ฉฐ CPU ์ฝ์ด์ ๋ด์ฅ๋์ด ์์ต๋๋ค.
- L2 ์บ์(๋ณด์กฐ ์บ์): L1๋ณด๋ค ๋๋ฆฌ์ง๋ง ๋ ํฌ๋ฉฐ, L1์ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํฉ๋๋ค.
L1๊ณผ L2๋ ๊ฐ ์ฝ์ด์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ๋ฐ๋ฉด, L3 ์บ์๋ ๋ชจ๋ ์ฝ์ด๊ฐ ๊ณต์ ํฉ๋๋ค. L3๋ L1ยทL2๋ณด๋ค ๋๋ฆฌ์ง๋ง RAM๋ณด๋ค๋ ๋น ๋ฆ ๋๋ค. ๋ณ๋ ฌ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์ ์ฝ์ด ๊ฐ ๊ณต์ ๋๋ L3 ์บ์ ํฌ๊ธฐ๊ฐ ์ฑ๋ฅ์ ์ง์ ์ ์ธ ์ํฅ์ ์ฃผ๋ฏ๋ก, L3 ์บ์๊ฐ ํฐ CPU๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์ ๋ณ๋ ฌ ์ฟผ๋ฆฌ ๋ชจ๋์์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
RAM ๊ด๋ฆฌ
Linux์์ PostgreSQL ์ฑ๋ฅ์ ๊ทน๋ํํ๋ ค๋ฉด RAM์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ด์์ฒด์ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต๋ํ ํ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๋ฉฐ, ์บ์๊ฐ ๋ง์์๋ก ๋์คํฌ I/O๊ฐ ์ค๊ณ ์ฟผ๋ฆฌ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
์ ํ๋์จ์ด๋ฅผ ๊ตฌ์ ํ ๋๋ ๊ฐ๋ฅํ ํ ๋ง์ RAM์ ํ๋ณดํ์ธ์. ๋์ค์ RAM์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฒฝ์ ์ ยท๊ธฐ์ ์ ์ผ๋ก ๋ ๋น์ ์ ์์ต๋๋ค(ํซ์ค์ RAM์ด ์๋ค๋ฉด ๋ค์ดํ์ ํ์). PostgreSQL์ ์ฌ๋ฌ ๋งค๊ฐ๋ณ์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ ์กฐ์ ๋ฉ๋๋ค.
๋์คํฌ ์ต์ ํ
์ ํ๋ฆฌ์ผ์ด์ ์ด I/O ์ค์ฌ(์ฝ๊ธฐยท์ฐ๊ธฐ ์ง์ฝ์ )์ด๋ผ๋ฉด ๋ ๋น ๋ฅธ ๋๋ผ์ด๋ธ๊ฐ ์ฑ๋ฅ์ ํฌ๊ฒ ๋์ด์ฌ๋ฆฝ๋๋ค. NVMe, SSD ๋ฑ ์ฌ๋ฌ ์ ํ์ง๊ฐ ์์ต๋๋ค.
- WAL ๋์คํฌ ๋ถ๋ฆฌ: WAL(Write-Ahead Logging)์ ๋ฐ๋์ ๋ฐ์ดํฐ ๋์คํฌ์ ๋ถ๋ฆฌํ์ธ์. ์ฐ๊ธฐ ์ง์ฝ์ ํ๊ฒฝ์์ ๋ณ๋ชฉ์ด ๋ ์ ์์ผ๋ฏ๋ก ๋ณ๋์ ๋น ๋ฅธ ๋๋ผ์ด๋ธ์ ๋ฐฐ์นํฉ๋๋ค. ์ต์ RAID 1์ ์ฌ์ฉํ๊ณ , ์ฐ๊ธฐ ์์ ์ด ๋ง๋ค๋ฉด RAID 10์ ๊ณ ๋ คํ์ธ์.
- ์ธ๋ฑ์คยท๋ฐ์ดํฐ ๋ถ๋ฆฌ: ํนํ SATA ๋๋ผ์ด๋ธ์์ ์คํํ๋ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋์ ํ ์ด๋ธ์คํ์ด์คยท๋๋ผ์ด๋ธ๋ก ๋ถ๋ฆฌํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ๋ค๋ง SSDยทNVMe์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ ํ ์ฌํญ์ ๋๋ค. ๋ฐ์ดํฐ ๋๋ผ์ด๋ธ์๋ RAID 10์ ๊ถ์ฅํฉ๋๋ค.
๋คํธ์ํฌ ์ค์
๋คํธ์ํฌ ํ๋์ ๋ฐฑ์ ยท๋ณต์ ์ฑ๋ฅ์ ์ข์ฐํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ํฌ๊ฒ ๋์ด๋๋ฉด ๋ ๋น ๋ฅด๊ฑฐ๋ ๋ณธ๋ฉ๋(bonded) ๋คํธ์ํฌ ์นด๋๋ฅผ ์ฌ์ฉํด ๋ฒ ์ด์ค ๋ฐฑ์ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
๊ฐ์ ๋จธ์ (VM)
VM์ ๊ฐ์ํ ๊ณ์ธต ๋๋ฌธ์ ๋ฒ ์ด๋ฉํ ๋๋น ์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ๊ฐ ์๊ณ , ๊ณต์ ๋ฆฌ์์ค๋ก ์ธํด ๊ฐ์ฉ CPU์ ๋์คํฌ I/O ์ฑ๋ฅ๋ ์ค์ด๋ญ๋๋ค.
์ฑ๋ฅ์ ๋์ด๋ ค๋ฉด CPU์ ๋์คํฌ๋ฅผ ํธ์คํธ์ ๊ณ ์ (pinning)ํ์ธ์. ํธ์คํธ์์ ์คํ ์ค์ธ ๋ค๋ฅธ VM์ผ๋ก ์ธํ ๋ณ๋ชฉ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ต์ํํ ์ ์์ต๋๋ค. ๋ํ ์ค์น ์ ์ ๋์คํฌ ๊ณต๊ฐ์ ์ฌ์ ํ ๋นํ์ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ค ํธ์คํธ๊ฐ ๋์คํฌ ๊ณต๊ฐ์ ๋์ ์ผ๋ก ํ ๋นํ์ง ์๋๋ก ํฉ๋๋ค.
์ฌ์ ํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด, postgresql.conf์์ ์๋ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
wal_recycle๋นํ์ฑํ โ PostgreSQL์ ๊ธฐ๋ณธ์ ์ผ๋ก WAL ํ์ผ์ ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐฉ์์ผ๋ก ์ฌํ์ฉํ์ง๋ง, Copy-On-Write(COW) ํ์ผ ์์คํ ์์๋ ์ WAL ํ์ผ์ ์์ฑํ๋ ํธ์ด ๋ ๋น ๋ฅผ ์ ์์ต๋๋ค. ๋นํ์ฑํํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.wal_init_zero๋นํ์ฑํ โ PostgreSQL์ ๊ธฐ๋ณธ์ ์ผ๋ก WAL ๋ ์ฝ๋ ์ฝ์ ์ ์ WAL ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋๋ฐ, ์ด ๊ณผ์ ์ด COW ํ์ผ ์์คํ ์์ WAL ์์ ์๋๋ฅผ ๋จ์ด๋จ๋ฆฝ๋๋ค.off๋ก ์ค์ ํ๋ฉด ํ์ผ ์์ฑ ์ ์ต์ข ๋ฐ์ดํธ๋ง ๊ธฐ๋กํด ์์ ํฌ๊ธฐ๋ฅผ ๋ณด์ฅํฉ๋๋ค(๋จ, ๋์คํฌ ๊ณต๊ฐ์ด ์ฌ์ ํ ๋น๋ ๊ฒฝ์ฐ์๋ง ํจ๊ณผ์ ).
PostgreSQL ์ฑ๋ฅ์ ์ํ Linux ์ด์์ฒด์ ์ค์
๋ง์ดํธ ํฌ์ธํธ
์ ์ฉ IOPS(Input/Output Operations Per Second)๋ฅผ ๊ฐ์ง ๋ณ๋์ ๋ง์ดํธ ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๊ณ , ์ฑ๋ฅ์ ์ํด SSD๋ฅผ ๊ถ์ฅํฉ๋๋ค.
/pgdata/16โ EPAS/PG ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ์ฉ ๋ง์ดํธ ํฌ์ธํธ (PGDATA ๊ฒฝ๋ก:/pgdata/16/data)/pgwaldata/16โ WAL(Write-Ahead Log)์ฉ ๋ง์ดํธ ํฌ์ธํธ (WAL ๊ฒฝ๋ก:/pgwaldata/16/wal)
์ธ๋ฑ์ค ์ฌ์ฉ๋๊ณผ ์์ ๋ฐ๋ผ, ์ํฌ๋ก๋๋ณ๋ก ์ธ๋ฑ์ค๋ฅผ ์ํ ๋ณ๋ ๋ง์ดํธ ํฌ์ธํธ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ก๊ทธ ๋๋ ํฐ๋ฆฌ(๊ธฐ๋ณธ๊ฐ /PGDATA/log)๋ ๋ค๋ฅธ ํ๋ก์ธ์คยท์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋๋ก ์ฌ๋ฐ๋ฅธ ๊ถํ์ ๋ถ์ฌํ ๋ณ๋ ๋ง์ดํธ ํฌ์ธํธ์ ๋ฐฐ์นํ์ธ์.
ํ์ผ ์์คํ
PG/EPAS ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ, WAL, ๊ธฐํ ๋ฐ์ดํฐ๋ฅผ ํธ์คํ ํ๋ ๋ง์ดํธ ํฌ์ธํธ์๋ XFS ํ์ผ ์์คํ ์ ์ฌ์ฉํ์ธ์.
atime ๋นํ์ฑํ
PostgreSQL์ ๋ฐ์ดํฐ ํ์ผ์ atime(๋ง์ง๋ง ์ก์ธ์ค ์๊ฐ ํ์์คํฌํ)์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก, ์ด๋ฅผ ๋นํ์ฑํํ๋ฉด CPU๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐยทWAL ํ์ผ์ด ์ ์ฅ๋ ๋๋ผ์ด๋ธ์ defaults ์์ noatime์ ์ถ๊ฐํ์ธ์.
/dev/mapper/pgdata-01-data /pgdata xfs defaults,noatime 1 1
๋ค์ ๋ช ๋ น์ผ๋ก ์ฆ์ ํ์ฑํํฉ๋๋ค.
mount -o remount,noatime,nodiratime /pgdata
์ด๋ ์ด๊ธฐ ๋จ๊ณ์ ์ ํฉํ๋ฉฐ, ์ดํ ์ด์์ฒด์ ์ PostgreSQL์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํด ์ธ๋ถ ํ๋์ฉ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ธ์.
Read-ahead ์ต์ ํ
๋์คํฌ Read-ahead ๊ฐ์ ๋๋ฆฌ๋ฉด ๋์คํฌ ์์ฒญ ํ์๋ฅผ ์ค์ฌ I/O ์ฒ๋ฆฌ๋์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋ณดํต 128kB์ด์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์คยทํ
์ด๋ธ์คํ์ด์ค๋ฅผ ํธ์คํ
ํ๋ ๋์คํฌ์์๋ 4,096kB๋ฅผ ๊ถ์ฅํฉ๋๋ค. (์๋ tuned ๋ฐ๋ชฌ ์ค์ ์ผ๋ก ์กฐ์ ํ ์ ์์ต๋๋ค.)
I/O ์ค์ผ์ค๋ฌ
- CentOS/RHEL 7 โ
deadline - Rocky/RHEL 8 โ
mq-deadline - SSD๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์์ฒด ์ฌ์ ๋ ฌ ๋ฉ์ปค๋์ฆ์ด ์๋ ์ ์ฉ I/O ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ โ RHEL 7์
noop, RHEL 8์none
๋ํฐ ๋ฉ๋ชจ๋ฆฌ(Dirty Memory)
๋ํฐ ๋ฉ๋ชจ๋ฆฌ(์์ ๋์ง๋ง ์์ง ๋์คํฌ์ ์ปค๋ฐ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ)๋ ์ต์ ์์คํ ์์ RAM ๋๋น ๋น์จ๋ก ์ ์๋ฉ๋๋ค. ์ผ์ ๋น์จ ์ด์ ์์ ๋๋ฉด ์์คํ ์ด ์์ฐจ ์ ๊ทผ ๋ชจ๋๋ก ์ ํ๋๊ณ , ๋ํฐ ๋ฉ๋ชจ๋ฆฌ ํ๋ฌ์์ ๋ฌด๊ดํ ๋ชจ๋ I/O ์์ฒญ์ด ์ฐจ๋จ๋์ด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ค๋๋ค. ์ฐ๊ธฐ ํจํด์ด ๊ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๊ฐ ๋์๋ก ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
์ต์ ํ๋์จ์ดยท์ผ๋ถ VM์์๋ RAM์ 1%๋ง์ผ๋ก๋ ์คํ ๋ฆฌ์ง๊ฐ ๊ฐ๋นํ๊ธฐ ์ด๋ ค์ด ๋ฐ์ดํฐ๊ฐ ์๊ฒจ ์ฌ๊ฐํ I/O ๋๊ธฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ต์ Linux ์ปค๋์ ๋ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น์จ์ด ์๋ ๋ฐ์ดํธ ๋จ์๋ก ์ค์ ํ ์ ์์ต๋๋ค.
vm.dirty_bytesโ ๊ถ์ฅ๊ฐ์ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง ์ฅ์นยท์ปจํธ๋กค๋ฌ์ ์บ์ ํฌ๊ธฐ ์์ค์ ๋๋ค. ๊ฐ์ ์ ์ ์๋ค๋ฉด 1GB๊ฐ ์ ์ ํฉ๋๋ค.vm.dirty_background_bytesโ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฐ๊ธฐ ์๊ณ๊ฐ์ผ๋ก, ๋ณดํตvm.dirty_bytes์ 1/4 ์์ค์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๊ณ๊ฐ์ ๋๋ฌํ๊ธฐ ํจ์ฌ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ธ์ฉ ๋ฏธ๋ฆฌ ๋์คํฌ๋ก ๋ด๋ณด๋ด, ๊ฐ์ด ๋๋ฌด ์์ ๋ ์๊ธฐ๋ ๊ณผ๋ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฐ๊ธฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
๋๋ถ๋ถ์ ์คํ ๋ฆฌ์ง ์บ์๋ ์ฝ 1~4GB๋ก ํฌ์ง ์์ผ๋ฏ๋ก, ์คํ ๋ฆฌ์ง ๋ถํ๋ฅผ ํผํ๋ฉด์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฐ๊ธฐ๋ฅผ ์ด์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์บ์๊ฐ ๋ ํฌ๋ค๋ฉด vm.dirty_background_bytes๋ฅผ vm.dirty_bytes ๋๋น ๋ ์์ ๋น์จ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
๊ถ์ฅ tuned ํ๋กํ์ผ
์๋๋ EPAS/PostgreSQL์ ์ํ EDB์ Linux ํ๋ ๊ถ์ฅ ์ค์ ์ ๋๋ค.
mkdir /etc/tuned/edb
export DIRTY_BYTES=$((1024*1024*1024))
export DIRTY_BG=$((${DIRTY_BYTES}/4))
export MEM_TOTAL=$(grep MemTotal /proc/meminfo | awk '{print $2}')
cat</etc/tuned/edb/tuned.conf
[main]
summary=Tuned profiles for EnterpriseDB Postgres Advanced Server
[cpu]
governor=performance
energy_perf_bias=performance
min_perf_pct=100
[disk]
readahead=4096
[sysctl]
vm.overcommit_memory=2
vm.overcommit_ratio=80
vm.swappiness=1
vm.dirty_bytes=${DIRTY_BYTES}
vm.dirty_background_bytes=${DIRTY_BG}
[vm]
transparent_hugepages=never
EOF
systemctl enable --now
tuned-adm profile edbEPAS/PG ํด๋ฌ์คํฐ ์ด๊ธฐํ
๋ค์ initdb ๋ช
๋ น์ผ๋ก EPAS PGDATA ํด๋๋ฅผ ๋ถํธ์คํธ๋ฉํฉ๋๋ค.
PGSETUP_INITDB_OPTIONS="-X /pgwaldata/16/wal --pgdata=/pgdata/16/data"
/usr/edb/as16/bin/edb-as16-setup initdb
systemctl๋ก ์๋น์ค ํ์ผ์ ํ์ฅํฉ๋๋ค.
systemctl edit edb-as-16
ํธ์ง ์ฐฝ์ ์๋ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
[Service]
Environment=PGDATA=/pgdata/16/data
์ ์ฅ ํ ์ข ๋ฃํ๊ณ ์๋น์ค๋ฅผ ํ์ฑํยท์์ํฉ๋๋ค.
systemctl enable --now edb-as-16
systemd ์๋น์ค ํ์ผ์ ์์ ํ์ง ์๊ณ , ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ ์์น์ PGDATA ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๋ ๊ถ์ฅ๋ฉ๋๋ค.
sudo -u enterprisedb rmdir /var/lib/edb/as16/data
sudo -u enterprisedb ln -s /pgdata/16/data /var/lib/edb/as16/data
systemctl enable --now edb-as-16
PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ์ค์ ๋ฐ ์ธ์ฆ
max_connections โ ์ต์ ๊ฐ์ CPU ์ฝ์ด ์์ 4๋ฐฐ์ด์ง๋ง, ํ์ค์ ์ผ๋ก๋ ๋๋ฌด ์์ ์ ์์ต๋๋ค. ๋ค์ ๊ณต์์ ๊ถ์ฅํฉ๋๋ค.
GREATEST(4 ร CPU ์ฝ์ด ์, 100)
์ด ๊ฐ์ ์ด๊ณผํด์ผ ํ๋ค๋ฉด pgbouncer ๊ฐ์ ์ฐ๊ฒฐ ํ๋ฌ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. ๋ฐ๋๋ก ๊ทธ๋ ๊ฒ ๋ง์ ์ฐ๊ฒฐ์ด ํ์ ์๋ค๋ฉด ๊ฐ์ ๋ฎ์ถ์ธ์.
password_encryption โ scram-sha-256์ผ๋ก ์ค์ ํ์ธ์.
PostgreSQL ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋ฆฌ์์ค ์ค์
shared_buffers โ ์ํฌ๋ก๋์ ๋ฐ๋ผ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด๋ ๋งค๊ฐ๋ณ์์
๋๋ค. ์ด๋ค ์ํฌ๋ก๋๋ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ด ๋งค์ฐ ์ปค๋ 1~2GB ๊ฐ์ ์์ ๊ฐ์์ ์ต์์ ์ฑ๋ฅ์ ๋ด๊ณ , ์ด๋ค ์ํฌ๋ก๋๋ ํฐ ๊ฐ์ด ํ์ํฉ๋๋ค. ํฉ๋ฆฌ์ ์ธ ์์์ ์ ์ ์ฒด RAM / 4์ด๋ฉฐ, RAM ๊ท๋ชจ๋ฅผ ๋ฐ์ํ ์ธ๋ถ ์ค์ ์ ์๋ ์์ฌ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
base = RAM / 4
if RAM < 3 GB:
base = base * 0.5
else if RAM < 8 GB:
base = base * 0.75
else if RAM > 64 GB:
base = greatest(16 GB, RAM / 6)
shared_buffers = least(base, 64 GB)
๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ ์์คํ ์ ๋ถ๋ด์ ์ค์ด๋ฉด์๋ ์ฌ์ฉ์ ์ธ์ ์ ์ฒ๋ฆฌํ๋๋ก ์กฐ์ ํ ๊ฐ์ ๋๋ค. RAM์ด ํจ์ฌ ๋ง์ ์๋ฒ๋ ๋น๋ก ์กฐ์ ๋ ์ค์ ์ ์ถฉ๋ถํ ํก์ํ์ง๋ง, 64GB๋ฅผ ๋์ด์๋ฉด ํฐ ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ์ง์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๋ก ์ฑ๋ฅ ํฅ์์ด ํ๊ณ์ ๋ถ๋ชํ ์ ์์ต๋๋ค.
work_mem โ ๊ถ์ฅ ์์์ :
(์ ์ฒด RAM โ shared_buffers) / (16 ร CPU ์ฝ์ด ์)
maintenance_work_mem โ VACUUM, CREATE INDEX, ALTER TABLE, ADD FOREIGN KEY, ๋ฐ์ดํฐ ๋ก๋ ๊ฐ์ ์ ์ง ๊ด๋ฆฌ ์์
์ ์ธ ์ต๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ํฉ๋๋ค. ์ด๋ฐ ์์
์ I/O๋ฅผ ๋๋ฆฌ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฃผ๋ฉด ๋ ๋นจ๋ฆฌ ๋๋ฉ๋๋ค. ๊ถ์ฅ ์์๊ฐ:
15% ร (์ ์ฒด RAM โ shared_buffers) / autovacuum_max_workers (์ต๋ 1GB)
effective_io_concurrency โ Read-ahead์ ์ฌ์ฉ๋๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋์คํฌ ๊ฐ์๋ก ์ค์ ํฉ๋๋ค. ๋์คํฌ ๊ฐ์์ ๋ฐฐ์๊ฐ ๋ ๋์ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. SSD๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ 200์ ๊ถ์ฅํฉ๋๋ค.
PostgreSQL WAL ์ค์ ๋ฐ ์ต์ ํ
wal_compression โ full_page_writes๊ฐ ์ผ์ ธ ์๊ฑฐ๋ ๋ฒ ์ด์ค ๋ฐฑ์
์ค์ผ ๋ WAL์ ๊ธฐ๋ก๋๋ ์ ์ฒด ํ์ด์ง ์ด๋ฏธ์ง๋ฅผ ์์ถํฉ๋๋ค. ์ค์ : on
wal_log_hints โ pg_rewind์ ํ์ํฉ๋๋ค. ์ค์ : on (์ฒดํฌ์ฌ์ด ํ์ฑํ๋ ์ธ์คํด์ค์์๋ ํญ์ ํ์ฑ์ผ๋ก ๊ฐ์ฃผ)
wal_buffers โ ๋๊ธฐํ ์ ๋ฐฑ์๋์ WAL ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ดํฉ๋๋ค. ๊ธฐ๋ณธ WAL ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ๋ 16MB์ด๋ฉฐ ๋ฒํผ๋ง์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ต๋๋ค. ๋ ํฐ ๋ฒํผ๋ ์ฑ๋ฅ์ ๊ธ์ ์ ์ผ ์ ์์ต๋๋ค. ์ค์ : 64MB
checkpoint_timeout โ ํ์์์์ด ๊ธธ์๋ก WAL ๋ณผ๋ฅจ์ ์ค์ง๋ง ์ฅ์ ๋ณต๊ตฌ๋ ๋๋ ค์ง๋๋ค. ๊ถ์ฅ: ์ต์ 15๋ถ (๋จ, ๋น์ฆ๋์ค์ RPO์ ๋ฐ๋ผ ์กฐ์ ).
checkpoint_completion_target โ ์ฒดํฌํฌ์ธํธ๋ฅผ ์๋ฃํ๋ ค๋ ๋ชฉํ ์๊ฐ์ผ๋ก, I/O ์คํ์ดํฌ ์์ด ์ฐ๊ธฐ๋ฅผ ๋ถ์ฐ์ํต๋๋ค. ๊ถ์ฅ: 0.9 (PostgreSQL 13 ์ด์์ ๊ธฐ๋ณธ๊ฐ 0.9)
max_wal_size โ ์ค์ ์ด ๊น๋ค๋ก์ด ๋งค๊ฐ๋ณ์์
๋๋ค. ์ต์ ๊ฐ์ checkpoint_timeout๊ณผ ์์คํ
์ต๋ WAL ์ฒ๋ฆฌ๋์ ํจ์์
๋๋ค. ๋๋ฌด ์์ผ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋๊ณ , ๋๋ฌด ํฌ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ด ์์ผ๋ ๋์คํฌ ๋ถ์กฑ ์ํ์ด ์์ต๋๋ค(์ํํธ ์ ํ).
- ๋์คํฌ ๊ณต๊ฐ์ด ์ถฉ๋ถํ๋ฉด(WAL์ฉ ์๋ฐฑ GB ์ด์) ๊ฐ์ ๋๊ฒ ์ค์ ํ์ธ์. ๊ณ ์ฑ๋ฅ ์์คํ ์์๋ 200GB ์ด์๋ ์ ์ ํฉ๋๋ค.
- ๋์คํฌ ๊ณต๊ฐ์ด ์ ํ์ ์ด๋ฉด ๊ฐ๋ฅํ ํ ๋๊ฒ ์ค์ ํด ์ฌ์ ๋ฅผ ํ๋ณดํ๋ ๋ถ์กฑ์ ๋ฐฉ์งํ์ธ์.
- ์ ์ฉ ๋์คํฌ ํํฐ์ ์ฌ์ฉ ์(๊ถ์ฅ) ํํฐ์ ํฌ๊ธฐ์ 50~75%๊ฐ ์ ํฉํฉ๋๋ค.
์ธ๋ถ ์กฐ์ : pg_stat_bgwriter ๋ทฐ์์ checkpoints_timed์ checkpoints_req๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์. max_wal_size๊ฐ ๋๋ฌด ์์ผ๋ฉด ์์ฒญ๋ ์ฒดํฌํฌ์ธํธ(requested checkpoints) ๋น์จ์ด ์ฌ๋ผ๊ฐ๋๋ฐ, ์ด๋ ๋ค์ ํ์๋ ์ฒดํฌํฌ์ธํธ๊น์ง ํ์ํ WAL ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๊ดํ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ค๋ ์ ํธ์
๋๋ค. ์ผ์์ ๊ธ์ฆ์ ๊ด์ฐฎ์ง๋ง ์์ํ๋๋ฉด ์ ๋๋ฉฐ, ๋์คํฌ๊ฐ ํ์ฉํ๋ ๋ฒ์์์ ๊ฐ์ ๋๋ ค ์์ฒญ๋ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ต์ํํ์ธ์.
archive_mode โ ๋ณ๊ฒฝ ์ ์๋ฒ ์ฌ์์์ด ํ์ํ๋ฏ๋ก on์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
archive_command โ archive_mode๊ฐ ์ผ์ ธ ์์ผ๋ฉด ์ ํจํ ๋ช
๋ น์ ์ง์ ํด์ผ ํฉ๋๋ค. ์์ง ์ค๋น๋์ง ์์๋ค๋ฉด POSIX ์์คํ
์์ ๊ธฐ๋ณธ๊ฐ : to be configured๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
PostgreSQL ์ฟผ๋ฆฌ ํ๋
random_page_cost โ SSD ๋์คํฌ ์ฌ์ฉ ์ 1.1์ ๊ถ์ฅํฉ๋๋ค.
effective_cache_size โ shared_buffers + Linux ๋ฒํผ ์บ์(์: free ๋ช
๋ น์ buff/cache ์ด)์ ํฉ์ผ๋ก ์ค์ ํ์ธ์.
cpu_tuple_cost โ ์ฟผ๋ฆฌ ์ค ๊ฐ ํ ์ฒ๋ฆฌ์ ์๋ ๋น์ฉ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ 0.01์ ์ต์ ๊ฐ๋ณด๋ค ๋ฎ์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ, ๋ณด๋ค ํ์ค์ ์ธ ๋น์ฉ ๊ณ์ฐ์ ์ํด 0.03์ผ๋ก ์กฐ์ ํ๋ฉด ์คํ ๊ณํ ์ ํ๋๊ฐ ๊ฐ์ ๋ฉ๋๋ค.
PostgreSQL ๋ก๊น ๋ฐ ๋ฌธ์ ๋ณด๊ณ
logging_collector โ log_destination์ stderr ๋๋ csvlog๊ฐ ํฌํจ๋๋ฉด on์ผ๋ก ์ค์ ํฉ๋๋ค.
log_directory โ logging_collector๊ฐ on์ด๋ฉด ๋ก๊ทธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ ์ธ๋ถ์ ๋์ธ์. ๋ก๊ทธ๊ฐ ๋ฒ ์ด์ค ๋ฐฑ์
์ ํฌํจ๋์ง ์๋๋ก ํ๊ธฐ ์ํจ์
๋๋ค.
log_checkpoints โ ์ฒดํฌํฌ์ธํธ ๋ก๊น
์ ์ํด on์ผ๋ก ์ค์ ํฉ๋๋ค.
log_min_duration_statement โ ์ ์ฑ๋ฅ ์ฟผ๋ฆฌ๋ฅผ ์กฐ๊ธฐ์ ์๋ณํ๊ธฐ ์ํด 1์ด๋ก ์ค์ ํด 1์ด ์ด์ ์คํ๋๋ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์ด๊ธฐ๊ฐ์ผ๋ก ์ ํฉํ๋ฉฐ, ๋๋ฌด ๊ธธ๋ฉด ๊ฐ์ ๋์ธ ๋ค ๋๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ๊ณ ์น๊ณ ๋ค์ ์ค์ด๋ ๋ฐฉ์์ด ์ข์ต๋๋ค. ํธ๋์ญ์
์์
์์๋ 250ms ์ด์์ด ๋๋ฆฐ ํธ์ด์ง๋ง, ๋ถ์ ์ํฌ๋ก๋์์๋ 5์ด ์ด์๋ ๋๋ฆฌ์ง ์์ ์ ์์ต๋๋ค.
log_line_prefix โ ์ต์ํ ์๊ฐ, ํ๋ก์ธ์ค ID, ํ ๋ฒํธ, ์ฌ์ฉ์ยท๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ์ ํฌํจํด์ผ ํฉ๋๋ค. ๊ถ์ฅ๊ฐ(๋์ ๊ณต๋ฐฑ ํฌํจ์ ์ฃผ์):
%m [%p]: u=[%u] db=[%d] app=[%a] c=[%h] s=[%c:%l] tx=[%v:%x]
log_lock_waits โ on์ผ๋ก ์ค์ ํ์ธ์. ๋๋ฆฐ ์ฟผ๋ฆฌ ์ง๋จ์ ํ์์
๋๋ค.
log_statement โ ddl๋ก ์ค์ ํ์ธ์. ๊ธฐ๋ณธ ๊ฐ์ฌ ๊ธฐ๋ก์ ๋ฌผ๋ก , ์๋ชป๋ ํ
์ด๋ธ ์ญ์ ๊ฐ์ ์น๋ช
์ ์ค์ ํ์
์ ๋์์ด ๋ฉ๋๋ค.
log_temp_files โ 0์ผ๋ก ์ค์ ํด ์์ฑ๋๋ ๋ชจ๋ ์์ ํ์ผ์ ๊ธฐ๋กํฉ๋๋ค. ์ค๋ฒํ๋ก ๋๋ฒ๊น
์ ์ ์ฉํ๋ฉฐ, work_mem ์ค์ ์ด ์๋ชป๋์์ ๋๋ฌ๋ผ ์ ์์ต๋๋ค.
log_connections โ on์ผ๋ก ์ค์ ํ์ธ์. ๋ชจ๋ ์ฐ๊ฒฐ์ ๊ธฐ๋กํ๋ฉฐ, ๋ณด์ ๋ชฉ์ ๊ณผ ์ฐ๊ฒฐ ํ๋ฌ ํ์์ฑยท์ค์ ํ์ธ์ ์ ์ฉํฉ๋๋ค.
log_disconnections โ on์ผ๋ก ์ค์ ํ์ธ์. ๋ชจ๋ ์ฐ๊ฒฐ ์ข
๋ฃ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
timed_statistics (EPAS) โ DRITA(๋์ ๋ฐํ์ ๋๊ตฌ ์ํคํ
์ฒ)์ ํ์ด๋ฐ ๋ฐ์ดํฐ ์์ง์ ์ ์ดํ๋ ํ๋ผ๋ฏธํฐ์
๋๋ค. ๋ฒ์ ์ ๋ฐ๋ผ ๋์์ด ๋ค๋ฅด๋ฏ๋ก ์ฃผ์ํ์ธ์.
- 16 ์ดํ: ๋ฐ์ดํฐ ์์ง์ ์์ํ๋ ค๋ฉด
on์ผ๋ก ์ค์ ํฉ๋๋ค. - 17: DRITA ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋์์ผ๋ ํ๋ผ๋ฏธํฐ๋ง ๋จ์ ์์ผ๋ฏ๋ก
off๋ก ๋ก๋๋ค. - 18: ํ๋ผ๋ฏธํฐ ์์ฒด๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
PostgreSQL Autovacuum ๋ชจ๋ํฐ๋ง ๋ฐ ์ค์
log_autovacuum_min_duration โ Autovacuum ํ๋์ ์์ ํ ๋ชจ๋ํฐ๋งํ๋ ค๋ฉด 0(๋ชจ๋ ํ๋ ๊ธฐ๋ก)์ผ๋ก ์ค์ ํ์ธ์.
autovacuum_max_workers โ Autovacuum ์์
์ ์์
๋๋ค(๊ธฐ๋ณธ 3, ๋ณ๊ฒฝ ์ ์ฌ์์ ํ์). ๊ฐ ํ
์ด๋ธ์ ์์
์ ํ๋๋ง ์ฌ์ฉํ๋ฏ๋ก, ์๋ฅผ ๋๋ฆฌ๋ฉด ํ
์ด๋ธ ๊ฐ ๋ณ๋ ฌ ์์
๊ณผ ๋ ๋น๋ฒํ Vacuum์ ์ ์ฉํฉ๋๋ค. ๊ถ์ฅ: 5
autovacuum_vacuum_cost_limit โ ๊ณผ๋ถํ๋ฅผ ๋ง๊ธฐ ์ํด PostgreSQL์ Autovacuum์ I/O ํ ๋น๋์ ์ ํํฉ๋๋ค. ์ฝ๊ธฐ/์ฐ๊ธฐ๋ง๋ค ํ ๋น๋์ด ์๋ชจ๋๊ณ , ์์ง๋๋ฉด ๊ณ ์ ์๊ฐ ๋์ ๋๊ธฐํฉ๋๋ค. ์ด ํ๋๋ฅผ ๋๋ฆฌ๋ฉด Vacuum์ด ์ํํ ์ ์๋ I/O๊ฐ ๋์ด๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ด ๋ฎ์ ํธ์ด๋ฏ๋ก 5,000์ ๊ถ์ฅํฉ๋๋ค.
PostgreSQL ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ต์ ํ
idle_in_transaction_session_timeout โ ํธ๋์ญ์
์์ ์ ํด ์ํ๋ก ๋จ์ ์ธ์
์ ์ ๊ธ์ ์ ์งํ๊ณ Vacuum์ ๋ฐฉํดํ ์ ์์ต๋๋ค. ๊ถ์ฅ: 10๋ถ (์ ๊ธ ๊ฒฝํฉ ๋ฐฉ์ง์ ํจ๊ณผ์ )
lc_messages โ ๋ก๊ทธ ๋ถ์๊ธฐ๋ ๋ฒ์ญ๋์ง ์์ ๋ฉ์์ง๋ง ์ดํดํฉ๋๋ค. ์ค์ : C (๋ก๊ทธ ๋ถ์์ ์ฉ์ดํ๊ฒ ํจ)
shared_preload_libraries โ ์ฑ๋ฅ ๋ถ์์ ์ํด pg_stat_statements๋ฅผ ์ถ๊ฐํ๋ฉด ์ค๋ฒํค๋๋ ์ ๊ณ ๊ฐ์น๊ฐ ๋์ต๋๋ค. ์ ํ ์ฌํญ์ด์ง๋ง ํ์ฑํ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
PostgreSQL on Linux: ์์ฃผ ๋ฌป๋ ์ง๋ฌธ(FAQ)
PostgreSQL์ Linux์์ ์ธ ์ ์๋์?
๋ค. Linux๋ PostgreSQL์ด ๊ฐ๋ฐยทํ ์คํธ๋๋ ๋ํ์ ์ธ ํ๋ซํผ ์ค ํ๋์ ๋๋ค. Ubuntu, CentOS, Fedora, Debian ๋ฑ ๋ค์ํ ๋ฐฐํฌํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ PostgreSQL์ Linux๋ฅผ ์ฐ๋์?
๋ง์ ์กฐ์ง๊ณผ ๊ฐ๋ฐ์๊ฐ PostgreSQL ์ด์์ฒด์ ๋ก Linux๋ฅผ ์ ํธํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋ฒ ํ๊ฒฝ์์ ํนํ ์ฑ๋ฅ์ด ๋ฐ์ด๋, PostgreSQL์ด ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ฎ์ ์ง์ฐ์ ๋ผ ์ ์์ต๋๋ค.
- ์๋ฒ ๋ฐฐํฌ์์ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ด ๋์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์์์ ์ค๋จ์ด๋ ํฌ๋์๋ฅผ ํผํ๋ ๊ฒ์ด ํต์ฌ์ด๋ฏ๋ก ์ค์ํฉ๋๋ค.
- ์ฌ์ฉ์ ๊ถํ, ์ ๊ทผ ์ ์ด, ๋ณด์ ํจ์น, ํ์ผ ์์คํ ์ํธํ ๋ฑ ๋ฐ์ด๋ ๋ณด์ ๊ธฐ๋ฅ์ ๊ฐ์ท์ต๋๋ค.
- Linux์ PostgreSQL ๋ชจ๋ ์คํ์์ค ์ฒ ํ์ ๊ณต์ ํ๋ฉฐ, ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ์ ํฌ๋ช ํ ํ๋ก์ธ์ค๋ฅผ ์งํฅํฉ๋๋ค.
- ์์ ๋กญ๊ฒ ์ฌ์ฉยท๊ณต์ ํ ์ ์์ด ๋น์ฉ์ ์ ๊ฐํฉ๋๋ค.
- ๋คํธ์ํฌ ์ค์ , ์์คํ ๋ฆฌ์์ค ์ต์ ํ ๋ฑ PostgreSQL ์ฑ๋ฅ์ ์ํ ์ปค์คํฐ๋ง์ด์ง์ด ์ ์ฐํฉ๋๋ค.
- ํด๋ผ์ฐ๋ ํธํ์ฑ์ด ๋์ ๋ฌผ๋ฆฌ ์ธํ๋ผ ์์ด๋ PostgreSQL์ ์ฝ๊ฒ ์ธ ์ ์์ต๋๋ค.
PostgreSQL์ ๊ฐ์ฅ ์ข์ Linux ๋ฐฐํฌํ์?
ํ์์ ์ทจํฅ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
- Ubuntu: ๋๋ฆฌ ์ฐ์ด๋ฉฐ ์ปค๋ฎค๋ํฐ๊ฐ ํฌ๊ณ ๋ฌธ์๊ฐ ์ถฉ์คํฉ๋๋ค.
- RHEL / CentOS: ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ผ๋ก ์ ๋ช ํ๋ฉฐ, ์ฅ๊ธฐ ์ง์๊ณผ ๋ณด์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๋ ์ ํฉํฉ๋๋ค.
- Debian: ์์ ์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ด ํ์ํ๋ค๋ฉด ๊ฒฌ๊ณ ํ ํจํค์ง ๊ด๋ฆฌ ์์คํ ์ด ์ข์ ์ ํ์ ๋๋ค.
- Fedora: ์ต์ ๊ธฐ๋ฅ๊ณผ ์ ๋ฐ์ดํธ๋ฅผ ์งํฅํ๋ค๋ฉด ๋ ํ์ ์ ์ธ ์ ํ์ง์ ๋๋ค.
- openSUSE: ์ ์ฐ์ฑ๊ณผ ์ฌ์ฉ์ฑ์ผ๋ก ์๋ ค์ ธ ์๊ณ , ์๋ฒยท๋ฐ์คํฌํฑ ํ๊ฒฝ ๋ชจ๋์์ ๋์ํฉ๋๋ค.
- Arch Linux: ์ต์ ๊ธฐ๋ฅ์ ์ํ๋ ์ฌ์ฉ์๋ฅผ ์ํ ๋กค๋ง ๋ฆด๋ฆฌ์ค ๋ชจ๋ธ๋ก, ์ต์ ์ํํธ์จ์ด ๋ฒ์ ์ ์ ๊ณตํฉ๋๋ค.
Linux์์ Postgres๋ ์ด๋์ ์ค์น๋๋์?
์ค์ ํ์ผ์ ๋ณดํต /etc/postgresql/<version>/main ๋๋ ํฐ๋ฆฌ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด PostgreSQL 14๋ฅผ ์ค์นํ๋ค๋ฉด ์ค์ ํ์ผ์ /etc/postgresql/14/main์ ์์ต๋๋ค.
Linux์์ Postgres์ ์ด๋ป๊ฒ ์ ์ํ๋์?
- ํฐ๋ฏธ๋์ ์ฝ๋๋ค.
psql๋ช ๋ น์ ์ฐ๊ฒฐ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ถ์ฌ ์คํํฉ๋๋ค. ๊ธฐ๋ณธ ๊ตฌ๋ฌธ:psql -U username -d database_name -h hostname- ํ์ํ๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
mydatabase=#๊ฐ์ ํ๋กฌํํธ๊ฐ ๋ณด์ด๋ฉด SQL ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค.
Linux์์ Postgres ๋ฐ์ดํฐ๋ ์ด๋์ ์ ์ฅ๋๋์?
๋ฐ์ดํฐ๋ฒ ์ด์คยทํ
์ด๋ธยท์ธ๋ฑ์ค ํ์ผ์ด ์ ์ฅ๋๋ ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ๋ ๋ณดํต /var/lib/postgresql/{version}/main/์ ์์ต๋๋ค. ๋ค๋ง ์ค์นยท์ค์ ๋ฐฉ์์ ๋ฐ๋ผ ์์น๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
Linux PostgreSQL ์ด์ ์ฐธ๊ณ ์ฌํญ
Linux์์ MySQL๊ณผ PostgreSQL์ ์ฐจ์ด๋?
MySQL์ ๋จ์ํจ๊ณผ ๊ณ ์ฑ๋ฅ์ ๋ ์ง์คํ๋ ๋ฐ๋ฉด, PostgreSQL์ ๋ณต์กํ ์ฟผ๋ฆฌ, ํธ๋์ญ์ ๋ฌด๊ฒฐ์ฑ, SQL ํ์ค ์ค์์ ๊ฐํฉ๋๋ค. MySQL์ integerยทvarcharยทtext ๋ฑ ๋น๊ต์ ๋จ์ํ ๋ฐ์ดํฐ ํ์ ์ ์ง์ํ๊ณ , PostgreSQL์ ๋ฐฐ์ดยทJSONยทXMLยท๊ธฐํ ํ์ ๋ฑ ๋ ํญ๋๊ณ ๊ณ ๊ธํ ํ์ ์ ์ง์ํฉ๋๋ค. MySQL์ SQL ํ์ค์ ๋ถ๋ถ์ ์ผ๋ก๋ง ๋ฐ๋ฅด์ง๋ง PostgreSQL์ ํ์ค์ ์๊ฒฉํ ์ค์ํฉ๋๋ค.
Linux์์ Postgres ์ฌ์ฉ์๋ฅผ ์ด๋ป๊ฒ ์กฐํํ๋์?
- ํฐ๋ฏธ๋์ ์ฝ๋๋ค.
psql๋ช ๋ น์ผ๋ก PostgreSQL์ ์ ์ํฉ๋๋ค(์ฌ์ฉ์ยท๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์ ์ด ํ์ํ ์ ์์).pg_rolesํ ์ด๋ธ์ ์กฐํํฉ๋๋ค. ์:SELECT rolname FROM pg_roles;
Linux์์ Postgres ๋ฒ์ ์ ์ด๋ป๊ฒ ํ์ธํ๋์?
์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
psql์ ์ ์ํ ๋คSELECT version();์กฐํ.- ์ธํฐ๋ํฐ๋ธ ์
ธ ์์ด, ํฐ๋ฏธ๋์์
sudo -u postgres postgres --version์คํ. - ํจํค์ง ๊ด๋ฆฌ์๋ก ํ์ธ. Ubuntu/Debian์
dpkg -l | grep postgresql, CentOS/Red Hat์yum list installed | grep postgresql.
Linux์์ Postgres ์๋ฒ๊ฐ ์คํ ์ค์ธ์ง ์ด๋ป๊ฒ ํ์ธํ๋์?
๋ค์ฏ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- systemd ์ฌ์ฉ ์:
systemctl status postgresql - ์๋ฒ ์ํ๋ง ํ์ธ:
pg_isready - ํ๋ก์ธ์ค ํํฐ๋ง:
ps aux | grep postgres pg_ctl status -D /var/lib/postgresql/{version}/main(๋ฒ์ ๋ฒํธ๋ก ๊ต์ฒด)- ๊ธฐ๋ณธ ํฌํธ ๋ฆฌ์ค๋ ํ์ธ:
sudo netstat -plnt | grep postgres๋๋sudo ss -ltn | grep postgres
Linux์์ Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๋ป๊ฒ ์ข ๋ฃํ๋์?
๋ค ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ํจํค์ง ๊ด๋ฆฌ์(apt/yum)๋ก ์ค์นํ ๊ฒฝ์ฐ:
sudo systemctl stop postgresql(์์คํ ์ ๋ชจ๋ ํด๋ฌ์คํฐ ์ค์ง) - ์ฌ๋ฌ ํด๋ฌ์คํฐ ์คํ ์:
sudo pg_ctlcluster {version} {cluster_name} stop - ๊ตฌํ SysV-init:
sudo service postgresql stop sudo -u postgres pg_ctl -D /var/lib/postgresql/{version}/main stop(๋ฒ์ ยท๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก ์กฐ์ )
EDB Postgres AI ๋ฐ EPAS ํ๋, ๋ ์์๋ณด๊ธฐ
ํ๋ก๋์ ํ๊ฒฝ์ ์์ธ ํ๋์ด๋ PoC๊ฐ ๊ถ๊ธํ์๋ค๋ฉด EDB Korea๋ก ๋ฌธ์ํด ์ฃผ์ธ์.
์ด๋ฉ์ผ: salesinquiry@enterprisedb.com
์ ํ: 02-501-5113
๋ณธ๋ฌธ: Configure and Tune EPAS and PostgreSQL Database Servers on Linux
์ด๋ฉ์ผ: salesinquiry@enterprisedb.com