[PostgreSQL] ํ”Œ๋ž˜๋„ˆ๋Š” ํ†ต๊ณ„๋ฅผ ๋ณด๊ณ  ๊ฒฐ์ •ํ•œ๋‹ค โ€” ๊ทธ ํ†ต๊ณ„๋Š” ์–ธ์ œ ํ‹€๋ฆฌ๋‚˜

EXPLAIN ANALYZE๋ฅผ ๋ณด๋ฉด ๋‘ ์ˆซ์ž๊ฐ€ ๋‚˜๋ž€ํžˆ ์žˆ๋‹ค. rows=100๊ณผ actual rows=1500000. ํ”Œ๋ž˜๋„ˆ๋Š” ๋ฐฑ ํ–‰์ด ๋‚˜์˜ฌ ์ค„ ์•Œ๊ณ  ๊ณ„ํš์„ ์งฐ๋Š”๋ฐ ์‹ค์ œ๋กœ๋Š” ๋ฐฑ์˜ค์‹ญ๋งŒ ํ–‰์ด ๋‚˜์™”๋‹ค. ๊ทธ ๊ณ„ํš์€ ๋ฐฑ ํ–‰์— ๋งž๋Š” ๊ณ„ํš์ด์—ˆ์„ ํ…Œ๋‹ˆ, ๊ฒฐ๊ณผ๋Š” ๋А๋ฆฐ ์ฟผ๋ฆฌ๋‹ค. ํ”Œ๋ž˜๋„ˆ๊ฐ€ ์™œ ๋ฐฑ ํ–‰์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”์ง€๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด ํ†ต๊ณ„์— ๋‹ฟ๋Š”๋‹ค. ์ด ์‹œ๋ฆฌ์ฆˆ๋Š” ๊ทธ ํ†ต๊ณ„ ์ด์•ผ๊ธฐ๋‹ค. ํ†ต๊ณ„๋Š” ํ‘œ๋ณธ์ด๋‹ค ํ”Œ๋ž˜๋„ˆ๋Š” ์‹คํ–‰ ์ „์— ํ…Œ์ด๋ธ”์„ ์ฝ์ง€ ์•Š๋Š”๋‹ค. ANALYZE๊ฐ€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ์š”์•ฝ์„ ๋ณธ๋‹ค. ANALYZE๋Š” ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์ฝ์ง€ ์•Š๋Š”๋‹ค. ํ‘œ๋ณธ์„ ๋ฝ‘๋Š”๋‹ค. ํ‘œ๋ณธ ํฌ๊ธฐ๋Š” default_statistics_target ร— 300์ด๊ณ , ๊ธฐ๋ณธ๊ฐ’์ด 100์ด๋ผ 3๋งŒ ํ–‰์ด๋‹ค. ํ…Œ์ด๋ธ”์ด ์ฒœ ํ–‰์ด๋“  ์‹ญ์–ต ํ–‰์ด๋“  3๋งŒ ํ–‰์ด๋‹ค. ...

[PostgreSQL] SKIP LOCKED๋กœ ์ž‘์—… ํ ๋งŒ๋“ค๊ธฐ

์ž ๊ธˆ ์‹œ๋ฆฌ์ฆˆ ๋งˆ์ง€๋ง‰ ํŽธ์ด๋‹ค. ์•ž์˜ ๋‘ ํŽธ์ด ์ž ๊ธˆ ๋•Œ๋ฌธ์— ๋ฉˆ์ถ”๋Š” ์ด์•ผ๊ธฐ์˜€๋‹ค๋ฉด, ์ด๋ฒˆ์—” ์ž ๊ธˆ์„ ์ด์šฉํ•ด์„œ ์ผ์„ ๋‚˜๋ˆ„๋Š” ์ด์•ผ๊ธฐ๋‹ค. ๋ฌธ์ œ ์ž‘์—… ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค. ์›Œ์ปค ์—ฌ๋Ÿฌ ๋Œ€๊ฐ€ ์—ฌ๊ธฐ์„œ ํ•˜๋‚˜์”ฉ ์ง‘์–ด๊ฐ€์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. CREATE TABLE jobs ( id bigserial PRIMARY KEY, status text NOT NULL DEFAULT 'pending', payload jsonb, created_at timestamptz NOT NULL DEFAULT now() ); ์ˆœ์ง„ํ•˜๊ฒŒ ์งœ๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค. SELECT * FROM jobs WHERE status = 'pending' ORDER BY id LIMIT 1; UPDATE jobs SET status = 'running' WHERE id = ?; ์›Œ์ปค ๋‘˜์ด ๋™์‹œ์— SELECTํ•˜๋ฉด ๊ฐ™์€ ํ–‰์„ ๋ณธ๋‹ค. ๋‘˜ ๋‹ค UPDATEํ•˜๊ณ  ๋‘˜ ๋‹ค ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ค‘๋ณต์ด๋‹ค. ...

[PostgreSQL] ๋ฐ๋“œ๋ฝ์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ธฐ๊ณ  ์–ด๋–ป๊ฒŒ ์ฝ๋‚˜

์ง€๋‚œ ํŽธ์ด ํ•œ ์ค„๋กœ ๋Š˜์–ด์„  ๋Œ€๊ธฐ์˜€๋‹ค๋ฉด, ์ด๋ฒˆ ํŽธ์€ ๋Œ€๊ธฐ๊ฐ€ ์›์„ ๊ทธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋‹ค. ์„œ๋กœ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ํ–‰ 1์„ ์ž ๊ทธ๊ณ  ํ–‰ 2๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ํŠธ๋žœ์žญ์…˜ B๋Š” ํ–‰ 2๋ฅผ ์ž ๊ทธ๊ณ  ํ–‰ 1์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ๋‘˜ ๋‹ค ์ƒ๋Œ€๊ฐ€ ๋๋‚˜์•ผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ์ƒ๋Œ€๋Š” ๋‚ด๊ฐ€ ๋๋‚˜์•ผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. A: UPDATE accounts SET ... WHERE id = 1; -- ํ–‰ 1 ์ž ๊ธˆ B: UPDATE accounts SET ... WHERE id = 2; -- ํ–‰ 2 ์ž ๊ธˆ A: UPDATE accounts SET ... WHERE id = 2; -- B๊ฐ€ ๋๋‚˜๊ธธ ๋Œ€๊ธฐ B: UPDATE accounts SET ... WHERE id = 1; -- A๊ฐ€ ๋๋‚˜๊ธธ ๋Œ€๊ธฐ โ†’ ๋ฐ๋“œ๋ฝ PostgreSQL์€ ์ด๊ฑธ ๋ง‰์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ๊ฐ์ง€ํ•œ๋‹ค. ์ž ๊ธˆ ๋Œ€๊ธฐ๊ฐ€ deadlock_timeout(๊ธฐ๋ณธ 1์ดˆ)์„ ๋„˜์œผ๋ฉด ๋Œ€๊ธฐ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ , ์ˆœํ™˜์ด ์žˆ์œผ๋ฉด ๊ทธ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š๋Š”๋‹ค. ...

[PostgreSQL] ALTER TABLE ํ•˜๋‚˜๊ฐ€ ์„œ๋น„์Šค๋ฅผ ๋ฉˆ์ถ”๋Š” ๊ตฌ์กฐ

์ปฌ๋Ÿผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ALTER TABLE์„ ๋Œ๋ ธ๋Š”๋ฐ ์„œ๋น„์Šค๊ฐ€ ๋ฉˆ์ท„๋‹ค๋Š” ์ด์•ผ๊ธฐ๋Š” ํ”ํ•˜๋‹ค. ์›์ธ์€ ๋Œ€๊ฐœ ALTER ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค. ALTER๊ฐ€ ์ž ๊ธˆ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๊ทธ ๋’ค๋กœ ์ค„์ด ์ƒ๊ธฐ๋Š” ๊ตฌ์กฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž ๊ธˆ์€ ์ค„์„ ์„ ๋‹ค PostgreSQL์˜ ํ…Œ์ด๋ธ” ์ž ๊ธˆ์€ ์—ฌ๋Ÿ ๋‹จ๊ณ„๊ฐ€ ์žˆ๊ณ , ์„œ๋กœ ์ถฉ๋Œํ•˜๋Š” ์กฐํ•ฉ์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค. ์‹ค๋ฌด์—์„œ ๊ธฐ์–ตํ•  ๊ฑด ๋‘ ๊ฐ€์ง€๋ฉด ๋œ๋‹ค. SELECT๋Š” ACCESS SHARE๋ฅผ ์žก๋Š”๋‹ค. ๊ฑฐ์˜ ์•„๋ฌด๊ฒƒ๊ณผ๋„ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ALTER TABLE์€ ACCESS EXCLUSIVE๋ฅผ ์žก๋Š”๋‹ค. ๋ชจ๋“  ๊ฒƒ๊ณผ ์ถฉ๋Œํ•œ๋‹ค. SELECT์™€๋„. ๋ฌธ์ œ๋Š” ์ž ๊ธˆ ์š”์ฒญ์ด ๋„์ฐฉ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. ์•ž์˜ ์š”์ฒญ์ด ๋ชป ๋ฐ›๊ณ  ์žˆ์œผ๋ฉด ๋’ค์˜ ์š”์ฒญ๋„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ๋’ค์˜ ์š”์ฒญ์ด ์•ž์˜ ๊ฒƒ๊ณผ ์ถฉ๋Œํ•˜๋Š” ์ข…๋ฅ˜๋ผ๋ฉด ๊ทธ๋ ‡๋‹ค. ...

[PostgreSQL] HOT update์™€ fillfactor โ€” ์ฃฝ์€ ํŠœํ”Œ์„ ๋œ ๋งŒ๋“œ๋Š” ์ชฝ

์•ž์„  ์„ธ ํŽธ์€ ์ด๋ฏธ ์ƒ๊ธด ์ฃฝ์€ ํŠœํ”Œ์„ ์–ด๋–ป๊ฒŒ ์น˜์šธ ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์˜€๋‹ค. ์ด๋ฒˆ ํŽธ์€ ๋ฐ˜๋Œ€์ชฝ์ด๋‹ค. ์• ์ดˆ์— ๋œ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•. UPDATE๊ฐ€ ์ธ๋ฑ์Šค๊นŒ์ง€ ๊ฑด๋“œ๋ฆฌ๋Š” ๋ฌธ์ œ PostgreSQL์—์„œ UPDATE๋Š” ์ƒˆ ๋ฒ„์ „์„ ์“ฐ๋Š” ์ผ์ด๋ผ๊ณ  1ํŽธ์—์„œ ์ •๋ฆฌํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ ๋”ธ๋ ค์˜ค๋Š” ๋น„์šฉ์ด ํ•˜๋‚˜ ๋” ์žˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์ด ์ƒ๊ธฐ๋ฉด ๊ทธ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ธ๋ฑ์Šค๋„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ๋‹ค์„ฏ ๊ฐœ์ธ ํ…Œ์ด๋ธ”์—์„œ ํ•œ ํ–‰์„ UPDATEํ•˜๋ฉด, ํž™์— ์ƒˆ ๋ฒ„์ „ ํ•˜๋‚˜๊ฐ€ ์ƒ๊ธฐ๊ณ  ์ธ๋ฑ์Šค ๋‹ค์„ฏ ๊ณณ์— ์—”ํŠธ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐฑ์‹ ์ด ์žฆ์€ ํ…Œ์ด๋ธ”์€ ํž™๋ณด๋‹ค ์ธ๋ฑ์Šค๊ฐ€ ๋จผ์ € ๋ถ€ํ‘ธ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธ๋ฑ์Šค ํŒฝ์ฐฝ์€ ์กฐํšŒ ์„ฑ๋Šฅ์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ค€๋‹ค. ...