[PostgreSQL] Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)๋ž€? Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)์˜ ๊ฐœ๋…๊ณผ ์ž‘๋™๋ฐฉ์‹

[PostgreSQL] Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)๋ž€? Planner, Optimizer (ํ”Œ๋ž˜๋„ˆ, ์˜ตํ‹ฐ๋งˆ์ด์ €)์˜ ๊ฐœ๋…๊ณผ ์ž‘๋™๋ฐฉ์‹

1. Planner / Optimizer (ํ”Œ๋ž˜๋„ˆ / ์˜ตํ‹ฐ๋งˆ์ด์ €) ๋ž€? Planner / Optimizer๋Š” ์ฟผ๋ฆฌ์˜ ์ตœ์ ํ™”๋œ ์‹คํ–‰ ๊ณ„ํš์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ํ•œ ๊ฐœ์˜ SQL ์ฟผ๋ฆฌ๋„ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์ง€๋งŒ,ย ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๊ณผ ์ˆœ์„œ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. Planner / Optimizer (์ดํ›„๋Š” Planner๋กœ ๋ช…์นญ)๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฐ๊ฐ์˜ ํ”Œ๋žœ์„ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ถ๊ทน์ ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ "๊ธฐ๋Œ€"๋˜๋Š” ํ”Œ๋žœ์„ ์„ ํƒํ•œ๋‹ค.ย 1-1. Genetic Query Optimize ๊ฐ€๋” ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹๋“ค์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ๋งŒ๋„ ๊ต‰์žฅํžˆ ํฐ ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค. (ํŠนํžˆ, ๋งŽ์€ ์–‘์˜ join์„ ํฌํ•จํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒ) ํ•ฉ๋ฆฌ์ ์ธ ์ฟผ๋ฆฌ ํ”Œ๋žœ(์ตœ๊ณ ์ผ ํ•„์š”๋Š” ์—†๋‹ค)์„ ํ•ฉ๋ฆฌ์ ์ธ ์‹œ๊ฐ„ ๋‚ด์— ์ฐพ๊ธฐ ์œ„ํ•ด, PostgreSQL์€ join์ˆ˜๋Ÿ‰์ด ์ž„๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด Genetic Query Optimizer๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Genetic Query Optimize๋Š” ์ตœ์ ์˜ ์กฐ์ธ ์ˆœ์„œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด, ์ผ๋ถ€ ์กฐ์ธ ์ˆœ์„œ๋ฅผ ์‹œ๋„ ํ›„ ์ ํ•ฉ์„ฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์กฐ์ธ ์ˆœ์„œ์˜ ์ ํ•ฉ์„ฑ์„ ํ‰๊ฐ€ํ•˜์—ฌ ์ตœ์ ์˜ plan์„ ์„ ํƒํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ญ์ƒ ์ตœ์„ ์˜ ๋‹ต์„ ์ฐพ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ์— ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค. ...

[PostgreSQL] Index-Only ์Šค์บ”๊ณผ Covering ์ธ๋ฑ์Šค, Index-only์Šค์บ”์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ

[PostgreSQL] Index-Only ์Šค์บ”๊ณผ Covering ์ธ๋ฑ์Šค, Index-only์Šค์บ”์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ

1. Index-Only Scans PostgreSQL์˜ ๋ชจ๋“  ์ธ๋ฑ์Šค๋Š” "๋ณด์กฐ(Secondary)" ์ธ๋ฑ์Šค์ด๋‹ค. ๊ฐ ์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฉ”์ธ ๋ฐ์ดํ„ฐ ์˜์—ญ(ํ…Œ์ด๋ธ”์˜ heap ์˜์—ญ)๊ณผ ๋ถ„๋ฆฌ๋˜์–ด์„œ ์ €์žฅ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์Šค ์Šค์บ”์—์„œ ๊ฐ ROW๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š”, index์™€ heap ์˜์—ญ ๋ชจ๋‘์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค. ๋ณดํ†ต WHERE ์ ˆ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ธ๋ฑ์Šค ์˜์—ญ - ์„œ๋กœ ๊ฐ€๊นŒ์ด ์กด์žฌํ•˜์—ฌ ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ƒ์„ฑ) heap ์˜์—ญ -ย ํŠน๋ณ„ํ•œ ๊ทœ์น™ ์—†์ด ์–ด๋””์—์„œ๋“  ๋ถ„ํฌํ•  ์ˆ˜ ์žˆ๊ธฐ์— heap ์˜์—ญ์„ ์Šค์บ”ํ•  ๋•Œ๋Š” ๋ฌด์ž‘์œ„๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜์–ด ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. ์ด ํผํฌ๋จผ์Šค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PostgreSQL์€ ํž™ ์˜์—ญ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์—†์ด ์ธ๋ฑ์Šค ๋‚ด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” Index-only ์Šค์บ”์„ ์ง€์›ํ•œ๋‹ค. ๊ธฐ๋ณธ ๊ฐœ๋…์€ ๋ง ๊ทธ๋Œ€๋กœ heap ์˜์—ญ์˜ ์ฐธ์กฐ ์—†์ด index ํ•ญ๋ชฉ์—์„œ ๋ฐ”๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ๋‹ค. ...

[PostgreSQL] ์ธ๋ฑ์Šค(INDEX)์™€ ์˜ค๋”๋ฐ”์ด(ORDER BY), ORDER BY ์„ฑ๋Šฅ๊ฐœ์„ , ํšจ์œจ์ ์ธ ์ธ๋ฑ์Šค ์ ์šฉ

[PostgreSQL] ์ธ๋ฑ์Šค(INDEX)์™€ ์˜ค๋”๋ฐ”์ด(ORDER BY), ORDER BY ์„ฑ๋Šฅ๊ฐœ์„ , ํšจ์œจ์ ์ธ ์ธ๋ฑ์Šค ์ ์šฉ

1. ์ธ๋ฑ์Šค(INDEX)์™€ ์˜ค๋”๋ฐ”์ด(ORDER BY) ์ธ๋ฑ์Šค๋Š” ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋กœ ํŠน์ • row๋ฅผ ์ฐพ๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํŠน์ • ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ๋„ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ORDER BY์™€ ์ธ๋ฑ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ ์ •๋ ฌ ๊ณผ์ • ์—†์ด ORDER BY๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. PostgreSQL์—์„œ ํ˜„์žฌ ์ง€์›ํ•˜๋Š” ์ธ๋ฑ์Šค ํƒ€์ž… ์ค‘์—์„œ๋Š” B-tree ์ธ๋ฑ์Šค๋งŒ์ด ์ •๋ ฌ ๊ฒฐ๊ณผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ์ธ๋ฑ์Šค ์œ ํ˜•์€ ํŠน์ •๋˜์ง€ ์•Š์€ ์ˆœ์„œ๋กœ, ์‹คํ–‰ ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ˆœ์„œ๋กœ ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. * ์ƒ์„ธํ•œ B-tree ์ธ๋ฑ์Šค์˜ ๊ฐœ๋…์€ ๋‹ค์Œ ๊ธ€์„ ์ฐธ๊ณ  -ย [Postgresql] - [PostgreSQL] B-tree ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง• ...

[PostgreSQL] 2๋‹จ๊ณ„ ์ปค๋ฐ‹ ํ”„๋กœํ† ์ฝœ(Two-Phase Commit Protocol), Prepare transaction

[PostgreSQL] 2๋‹จ๊ณ„ ์ปค๋ฐ‹ ํ”„๋กœํ† ์ฝœ(Two-Phase Commit Protocol), Prepare transaction

1. 2๋‹จ๊ณ„ ์ปค๋ฐ‹ ํ”„๋กœํ† ์ฝœ([two-phase commit (2PC)) PostgreSQL์€ two-phase commit (2PC) ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•œ๋‹ค. ๋‹ค์ˆ˜์˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•˜๋Š” ๋‘ ๋‹จ๊ณ„ ์ปค๋ฐ‹ ํ”„๋กœํ† ์ฝœ๋กœ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์— ์ฐธ์—ฌํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ชจ๋‘ ํ•จ๊ป˜ ์ปค๋ฐ‹๋˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค. PostgreSQL์˜ 2๋‹จ๊ณ„ ํŠธ๋žœ์žญ์…˜์€ ์™ธ๋ถ€ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋ฉฐ X/Open XA ํ‘œ์ค€์—์„œ ์ œ์•ˆ๋œ ํŠน์ง•๊ณผ ๋ชจ๋ธ์„ ๋”ฐ๋ฅธ๋‹ค. (์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ์ผ๋ถ€ ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๋‹ค.) 2๋‹จ๊ณ„ ์ปค๋ฐ‹์€ ๋‹ค์Œ ์Šคํƒญ์— ๋”ฐ๋ผ ์ž‘๋™๋œ๋‹ค. Coordinator Cohort QUERY TO COMMIT --------------------------------> VOTE YES/NO prepare*/abort* <------------------------------- commit*/abort* COMMIT/ROLLBACK --------------------------------> ACKNOWLEDGMENT commit*/abort* <-------------------------------- end ...

[PostgreSQL] ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ์ž‘๋™์›๋ฆฌ

[PostgreSQL] ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ์ž‘๋™์›๋ฆฌ

1. ๊ธฐ๋ณธ ํŠธ๋žœ์žญ์…˜์˜ ๊ฐœ๋… ๋ฐ ์›๋ฆฌ ํŠธ๋žœ์žญ์…˜์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. [Postgresql] - [PostgreSQL] ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€, COMMIT, ROLLBACK๋„ ์ต์ˆ™ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, PostgreSQL ๋‚ด๋ถ€์˜ ํŠธ๋žœ์žญ์…˜์ด ์–ด๋–ค ๊ตฌ์กฐ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ์„ธ๋ถ€ ๋‹จ๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ํ™•์ธ ๊ฐ€๋Šฅํ•œ์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž. 2. ํŠธ๋žœ์žญ์…˜๊ณผ ์‹๋ณ„์ž (Transactions and Identifiers) ๊ธฐ๋ณธ ๊ฐœ๋…์—์„œ ํ™•์ธํ–ˆ๋“ฏ์ด ํŠธ๋žœ์žญ์…˜์€ ๋ช…์‹œ์ ์œผ๋กœ ์‹คํ–‰(BEGIN, START TRANSACTION), ์ข…๋ฃŒ (COMMIT, ROLLBACK) ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ช…์‹œ์  ํŠธ๋žœ์žญ์…˜ ์™ธ์˜ SQL ๊ตฌ๋ฌธ๋“ค์€ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์ด ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„๋˜๋Š”์ง€ ๋จผ์ € ์‚ดํŽด๋ณด์ž. ...