[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 ๋กœ๊น… ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠน์ • ์‹œ์ ์œผ๋กœ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ...

[PostgreSQL] ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ธ์„œํŠธ ์‹œ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐ ์ฃผ์˜ ์‚ฌํ•ญ

[PostgreSQL] ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ธ์„œํŠธ ์‹œ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐ ์ฃผ์˜ ์‚ฌํ•ญ

๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ธ์„œํŠธ ์‹œ ์„ฑ๋Šฅ ๊ฐœ์„  ์ตœ์ดˆ ์„œ๋น„์Šค ๋ฐฐํฌ๋‚˜ ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํ•  ๋•Œ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ธ์„œํŠธ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. PostgreSQL ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” ๋Œ€๋Ÿ‰ ์ธ์„œํŠธ ์‹œ์— ํšจ์œจ์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ด ์ค€๋‹ค. (๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์„œํŠธ ํ•  ๋•Œ ํšจ์œจ์ ์ธ ์„ค์ •์ด์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ๋‚˜ ์—…๋ฐ์ดํŠธ ๋“ฑ์‹ค์ œ ์šด์˜ ์‹œ์— ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.) 1. Autocommit ์˜ต์…˜ ํ•ด์ œ ๋Œ€๋Ÿ‰์˜ ์ธ์„œํŠธ ์‹คํ–‰ ์‹œ, Autocommit ์˜ต์…˜์„ ํ•ด์ œํ•˜๊ณ  ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์ž‘์—… ํ›„์— ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ SQL๋ฅผ ์‹คํ–‰ ์‹œ์— ์ž๋™์œผ๋กœ ์‹œ์ž‘ ์‹œ BEGIN, ๋๋‚  ๋•Œ COMMIT์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€๋งŒ, ํ™•์‹คํžˆ ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•„์š”ํ•˜๋‹ค.). ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ธ์„œํŠธ์˜ ๊ฐ๊ฐ์„ ๋ณ„๋„๋กœ commit ํ•œ๋‹ค๋ฉด, PostgreSQL์€ ์ธ์„œํŠธ ๋˜๋Š” ๊ฐ ์—ด์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ์ธ์„œํŠธ๋ฅผ ํ•œ ํŠธ๋žœ์žญ์…˜์— ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ์—๋Š” ํ•œ INSERT๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ ๊ทธ ์‹œ์ ๊นŒ์ง€ ์ธ์„œํŠธ ๋œ ๋ชจ๋“  ์ž‘์—…์ด ์ทจ์†Œ๋˜๊ธฐ์— ์‹คํŒจ ์ž‘์—…์— ๋Œ€ํ•œ ๋ถ€๋ถ„ ๋ณด์™„ ๋ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ...