PostgreSQL 12 ๋ฆด๋ฆฌ์Šค

XNUMX๋…„์˜ ๊ฐœ๋ฐœ ๋์— ์ถœํŒ์‚ฌ : PostgreSQL 12 DBMS์˜ ์ƒˆ๋กœ์šด ์•ˆ์ • ๋ถ„๊ธฐ ์ƒˆ ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค 2024๋…„ XNUMX์›”๊นŒ์ง€ XNUMX๋…„๊ฐ„.

์ฃผ์š” ํ˜์‹ :

  • '์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.์ƒ์„ฑ๋œ ์—ด"๋ผ๋Š” ๊ฐ’์€ ๋™์ผํ•œ ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ์—ด ๊ฐ’์„ ํฌ๊ด„ํ•˜๋Š” ํ‘œํ˜„์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค(๋ทฐ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ฐœ๋ณ„ ์—ด์— ํ•ด๋‹น). ์ƒ์„ฑ๋œ ์—ด์€ ์ €์žฅ๋œ ์—ด๊ณผ ๊ฐ€์ƒ ์—ด์˜ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜๋Š” ์‹œ์ ์— ๊ฐ’์ด ๊ณ„์‚ฐ๋˜๊ณ , ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ์—ด์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฝ์„ ๋•Œ๋งˆ๋‹ค ๊ฐ’์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ PostgreSQL์€ ์ €์žฅ๋œ ์ƒ์„ฑ ์—ด๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋ฌธ์„œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๋กœ ํ‘œํ˜„, ์—ฐ์ƒ์‹œํ‚ค๋‹ค xpath SQL/JSON ํ‘œ์ค€์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ธ๋ฑ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ JSONB ํ˜•์‹์œผ๋กœ ์ €์žฅ๋œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ํ‘œํ˜„์‹ ์ฒ˜๋ฆฌ์˜ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋œ ๊ฒƒ์€ SQL ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์ค‘ ์ผ๋ถ€ ํ‘œํ˜„์‹์˜ ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด LLVM ๊ฐœ๋ฐœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” JIT(Just-in-Time) ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด JIT๋Š” WHERE ๋ธ”๋ก, ๋Œ€์ƒ ๋ชฉ๋ก, ์ง‘๊ณ„ ํ‘œํ˜„์‹ ๋ฐ ์ผ๋ถ€ ๋‚ด๋ถ€ ์ž‘์—… ๋‚ด์˜ ํ‘œํ˜„์‹ ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ธ๋ฑ์‹ฑ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. B-ํŠธ๋ฆฌ ์ธ๋ฑ์Šค๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. TPC-C ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๊ณ  ๋””์Šคํฌ ๊ณต๊ฐ„ ์†Œ๋น„๊ฐ€ ํ‰๊ท  40% ๊ฐ์†Œํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. GiST, GIN ๋ฐ SP-GiST ์ธ๋ฑ์Šค ์œ ํ˜•์— ๋Œ€ํ•œ WAL(๋ฏธ๋ฆฌ ์“ฐ๊ธฐ ๋กœ๊ทธ) ์ƒ์„ฑ ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฐ์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GiST์˜ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์—ด์„ ํฌํ•จํ•˜๋Š” ๋ž˜ํผ ์ธ๋ฑ์Šค(INCLUDE ํ‘œํ˜„์‹์„ ํ†ตํ•ด)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šด์˜ ์ค‘ ํ†ต๊ณ„ ์ƒ์„ฑ ๊ณ ๋ฅด์ง€ ์•Š๊ฒŒ ๋ถ„์‚ฐ๋œ ์—ด์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ณด๋‹ค ์ตœ์ ์˜ ์ฟผ๋ฆฌ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก MCV(๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฐ’) ํ†ต๊ณ„์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๋ถ„ํ•  ๊ตฌํ˜„์€ ์ˆ˜์ฒœ ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์— ๊ฑธ์ณ ์žˆ๋Š” ์ฟผ๋ฆฌ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์ง€๋งŒ ์ œํ•œ๋œ ๋ฐ์ดํ„ฐ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. INSERT, COPY ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ถ„ํ• ๋œ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ, ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  โ€œALTER TABLE ATTACH PARTITIONโ€์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ผ๋ฐ˜ํ™”๋œ ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹์˜ ์ž๋™ ์ธ๋ผ์ธ ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹, CTE)์€ WITH ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ์ž„์‹œ ๋ช…๋ช…๋œ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ๋ฐฐํฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜„์žฌ๋Š” ๋น„์žฌ๊ท€์  CTE์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ์ง€์› ๋น„๊ฒฐ์ •์  ๋ฌธ์ž์˜ ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ •๋ ฌ ๊ทœ์น™๊ณผ ์ผ์น˜ ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” "์กฐํ•ฉ" ๋กœ์ผ€์ผ์˜ ์†์„ฑ(์˜ˆ: ๋””์ง€ํ„ธ ๊ฐ’์„ ์ •๋ ฌํ•  ๋•Œ ์ˆซ์ž ์•ž์— ๋งˆ์ด๋„ˆ์Šค์™€ ์ ์ด ์žˆ๋Š”์ง€, ๋‹ค์–‘ํ•œ ์œ ํ˜•์ด ์žˆ๋Š”์ง€) ์ฒ ์ž๋ฒ•์ด ๊ณ ๋ ค๋˜๋ฉฐ ๋น„๊ตํ•  ๋•Œ ๋ฌธ์ž์˜ ๋Œ€์†Œ ๋ฌธ์ž์™€ ์•…์„ผํŠธ ํ‘œ์‹œ์˜ ์กด์žฌ๋Š” ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค) ;
  • pg_hba.conf์—์„œ ์ธ์ฆ์„ ์œ„ํ•ด SSL ์ธ์ฆ์„œ ์ธ์ฆ(clientcert=verify-full)๊ณผ scram-sha-256๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์ค‘ ์š”์†Œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์Œ์„ ํ†ตํ•ด ์ธ์ฆํ•  ๋•Œ ํ†ต์‹  ์ฑ„๋„ ์•”ํ˜ธํ™”์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GSSAPI, ํด๋ผ์ด์–ธํŠธ ์ธก๊ณผ ์„œ๋ฒ„ ์ธก ๋ชจ๋‘์—์„œ;
  • PostgreSQL์ด OpenLDAP๋กœ ๊ตฌ์ถ•๋œ ๊ฒฝ์šฐ "DNS SRV" ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ LDAP ์„œ๋ฒ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€๋œ ์ž‘์—… "๋™์‹œ์— ์žฌ์ƒ‰์ธยป ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์ž‘์—…์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์žฌ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒ€์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค pg_checksums, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์˜ ์ฒดํฌ์„ฌ ํ™•์ธ์„ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” ์ด ์ž‘์—…์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” ์ค‘์—๋งŒ ์ง€์›๋˜์—ˆ์Šต๋‹ˆ๋‹ค).
  • CREATE INDEX, REINDEX, CLUSTER, VACUUM FULL ๋ฐ pg_checksums ์ž‘์—…์— ๋Œ€ํ•œ ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ๊ธฐ ์ถœ๋ ฅ ์ œ๊ณต;
  • "๋ผ๋Š” ๋ช…๋ น์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.์•ก์„ธ์Šค ๋ฐฉ๋ฒ• ์ƒ์„ฑยป ๋‹ค์–‘ํ•œ ํŠน์ • ์ž‘์—…์— ์ตœ์ ํ™”๋œ ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ” ์ €์žฅ ๋ฐฉ๋ฒ•์„ ์œ„ํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‚ด์žฅ๋œ ์œ ์ผํ•œ ํ…Œ์ด๋ธ” ์•ก์„ธ์Šค ๋ฐฉ๋ฒ•์€ "ํž™"์ž…๋‹ˆ๋‹ค.
  • Recovery.conf ๊ตฌ์„ฑ ํŒŒ์ผ์ด postgresql.conf์™€ ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฅ์•  ํ›„ ๋ณต๊ตฌ ์ƒํƒœ๋กœ์˜ ์ „ํ™˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ๋กœ์„œ ์ด์ œ ํ•ด์•ผ Recovery.signal ๋ฐ Standby.signal ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€