Skip to content

Latest commit

ย 

History

History
156 lines (93 loc) ยท 5.15 KB

Postgresql.md

File metadata and controls

156 lines (93 loc) ยท 5.15 KB

PostgreSQL

PostgreSQL?

PostgreSQL์€ ๊ฐ์ฒด-๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(ORDBMS)์ค‘ ํ•˜๋‚˜๋กœ ๋ฒ„ํด๋ฆฌ ๋Œ€ํ•™์—์„œ ๊ฐœ๋ฐœํ•œ Postgres(ver 4.2)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.
Postgres๋ฅผ ๊ณ„์Šนํ•˜๋ฉฐ SQL์„ ์ง€์›ํ•œ๋‹ค๋Š” ์ด์œ ๋กœ ์ด๋ฆ„์„ PostgreSQL๋กœ ์ด๋ฆ„์„ ์ง“๊ฒŒ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
์ด๋Ÿฌํ•œ Postgres๋Š” BSD(Berkeley Software Distribution) ๋ผ์ด์„ผ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์•„๋ฌด๋‚˜ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ˆ˜์ •ํŒ์˜ ๊ฒฝ์šฐ ๊ฐœ๋ฐœํ•œ ์‚ฌ๋žŒ์ด ๊ณต๊ฐœ ์—ฌ๋ถ€๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


PostgreSQL ๊ตฌ์กฐ

์ถœ์ฒ˜ : Understanding the PostgreSQL Architecture

Postgres์˜ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ๋Š” ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๋‹ค.
์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด Shared Memory, 4๊ฐœ ์œ ํ˜•์˜ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฆฌ๊ณ  Data files๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.


Shared Memory

Shared Memory๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์บ์‹ฑ ๋ฐ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ์บ์‹ฑ์„ ์œ„ํ•ด ์˜ˆ์•ฝ๋œ ๋ฉ”๋ชจ๋ฆฌ์ด๋ฉฐ, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ๋Š” Shared Buffer์™€ WAL Buffer์ด๋‹ค.

  • ๊ณต์œ  ๋ฒ„ํผ(Shared Buffer)

    ๊ณต์œ  ๋ฒ„ํผ์˜ ๋ชฉ์ ์€ DISK I/O๋ฅผ ์ตœ์†Œํ™” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    ์ด๋Ÿฌํ•œ ๊ณต์œ  ๋ฒ„ํผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์›์น™์„ ์ถฉ์กฑํ•ด์•ผ๋œ๋‹ค.

    • ๋งค์šฐ ํฐ ๋ฒ„ํผ์— ๋น ๋ฅด๊ฒŒ ์•ก์„ธ์Šค ๊ฐ€๋Šฅ
    • ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์•ก์„ธ์Šค ํ•  ๋•Œ ๊ฒฝํ•ฉ์„ ์ตœ์†Œํ™”
    • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ธ”๋ก์€ ๊ฐ€๋Šฅํ•œ ์˜ค๋žซ๋™์•ˆ ๋ฒ„ํผ์— ์กด์žฌ
  • WAL ๋ฒ„ํผ(Write Ahead Log Buffer)

    WAL ๋ฒ„ํผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๋ฒ„ํผ์ด๋‹ค.
    WAL ๋ฒ„ํผ์— ์ €์žฅ๋œ ๋‚ด์šฉ์€ ์ž„์˜์˜ ์‹œ์ ์— WAL ํŒŒ์ผ์— ๊ธฐ๋ก์ด ๋˜๋ฉฐ, ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.


ํ”„๋กœ์„ธ์Šค ์œ ํ˜•

Postgres์—๋Š” 4๊ฐ€์ง€์˜ ํ”„๋กœ์„ธ์Šค ์œ ํ˜•์ด ์กด์žฌํ•œ๋‹ค.

  1. Postmaster (Daemon) Process
  2. Background Process
  3. Backend Process
  4. Client Process
  • Postmaster Process

    ํฌ์ŠคํŠธ ๋งˆ์Šคํ„ฐ ํ”„๋กœ์„ธ์Šค๋Š” PostgreSQL์„ ์‹œ์ž‘ํ•  ๋•Œ ์ฒซ ๋ฒˆ์งธ๋กœ ์‹œ์ž‘๋˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค.
    ์‹œ์ž‘์‹œ ๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌ๊ธฐํ™”ํ•˜๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
    ๋˜ํ•œ, ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ ์š”์ฒญ์ด ์žˆ์„๋•Œ ๋ฐฑ์—”๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

    ์ถœ์ฒ˜ : Understanding the PostgreSQL Architecture

  • 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์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    1. ํ…Œ์ด๋ธ” ๋ฐ ์ธ๋ฑ์Šค ํ†ต๊ณ„ ์ˆ˜์ง‘

    2. ํ…Œ์ด๋ธ” ์žฌ๊ตฌ์„ฑ

    3. ํ…Œ์ด๋ธ” ๋ฐ ๋ฐ๋“œ ๋ธ”๋ก ์ธ๋ฑ์Šค ์ •๋ฆฌ

    4. 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๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


ํ”„๋กœ์„ธ์Šค ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(libpg, JDBC, ODBC...)๋ฅผ ํ†ตํ•ด ๋ฐฑ์—”๋“œ ํ”„๋กœ์„ธ์Šค์™€ ์—ฐ๊ฒฐ ์š”์ฒญ
  2. Postmaster ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ด๋‹น ์—ฐ๊ฒฐ์„ ์ค‘๊ณ„
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ํ• ๋‹น๋œ ํ”„๋กœ์„ธ์Šค์™€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰



Reference