[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 ๊ตฌ๋ฌธ๋“ค์€ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์ด ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„๋˜๋Š”์ง€ ๋จผ์ € ์‚ดํŽด๋ณด์ž. ...

[PostgreSQL] WAL (Write-Ahead Logging) / ์•„์นด์ด๋ธŒ ๋ชจ๋“œ ๋ฐฑ์—…(Archive mode backup)์˜ ๊ฐœ๋… ๋ฐ ์žฅ๋‹จ์ 

[PostgreSQL] WAL (Write-Ahead Logging) / ์•„์นด์ด๋ธŒ ๋ชจ๋“œ ๋ฐฑ์—…(Archive mode backup)์˜ ๊ฐœ๋… ๋ฐ ์žฅ๋‹จ์ 

1. WAL (Write-Ahead Logging) / ์•„์นด์ด๋ธŒ ๋ชจ๋“œ ๋ฐฑ์—…(Archive mode backup)์ด๋ž€? ์•„์นด์ด๋ธŒ ๋ชจ๋“œ ๋ฐฑ์—…์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด WAL์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋จผ์ € ์‚ดํŽด๋ณด์ž. WAL์€ PostgreSQL์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ธฐ๋ณธ ์ฝ˜์…‰ํŠธ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ๋กœ๊น… ์™„๋ฃŒ ํ›„์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. WAL ๊ธฐ๋ก์„ ์˜๊ตฌ์ ์ธ ์ €์žฅ์†Œ์— ๋จผ์ € ๊ธฐ๋กํ•œ ํ›„์— ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ์ถฉ๋Œ ํ˜น์€ ๋ฐ์ดํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ WAL ๋กœ๊น… ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠน์ • ์‹œ์ ์œผ๋กœ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ...