[PostgreSQL] MVCC (Multi-Version Concurrency Control)

[PostgreSQL] MVCC (Multi-Version Concurrency Control)

1.ย MVCC๋ž€? ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•ด lock์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ Postgres๋Š” ๋‹ค์ค‘ ๋ฒ„์ „ ๋ชจ๋ธ(multiversion model)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ๊ฐ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌ ํ•˜๋Š” ๋™์•ˆ ๋ฐ์ดํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ์— ๊ด€๊ณ„์—†์ด ์–ผ๋งˆ ์ „์˜ ๋ฐ์ดํ„ฐ ์Šค๋ƒ…์ƒท์„ ๋ณผ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ํ•ด๋‹น Transaction์€ ๋ฐ์ดํ„ฐ์˜ ์Šค๋ƒ…์ƒท์„ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋™์ผํ•œ ํ–‰์— ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ๋„ํ•  ๋•Œ, ์ผ๊ด€์„ฑ ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋˜์ง€ ์•Š๋„๋ก ํŠธ๋žœ์žญ์…˜์„ ๋ณดํ˜ธํ•˜์—ฌ ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ์…˜์— ๋Œ€ํ•œ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. Multiversion๊ณผ Lock model์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ MVCC์—์„œ ๋ฐ์ดํ„ฐ read๋ฅผ ์œ„ํ•ด ํš๋“ํ•œ lock๊ณผ ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•ด ํš๋“ํ•œ lock์ด ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (๋”ฐ๋ผ์„œ read์™€ write๋Š” ์„œ๋กœ block ํ•˜์ง€ ์•Š๋Š”๋‹ค.) ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ํ†ตํ•ด์„œ Reading ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด์„œ Lock์„ ๊ฑธ์ง€ ์•Š๊ธฐ์— ๋†’์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ...

[PostgreSQL] ๋ฏธ์‚ฌ์šฉ ์ธ๋ฑ์Šค(INDEX) ์ฐพ๊ธฐ ๋ฐ ์‚ญ์ œ, ์„ฑ๋Šฅํ–ฅ์ƒ

[PostgreSQL] ๋ฏธ์‚ฌ์šฉ ์ธ๋ฑ์Šค(INDEX) ์ฐพ๊ธฐ ๋ฐ ์‚ญ์ œ, ์„ฑ๋Šฅํ–ฅ์ƒ

1. ์ธ๋ฑ์Šค(INDEX) ์ƒ์„ธ ๊ฐœ๋… Postgresql ์ธ๋ฑ์Šค(INDEX)๊ฐœ๋… ๋ฐ ์ƒ์„ฑ, ์‚ญ์ œ, ๋ถ„์„, ์„ค๊ณ„ ๋ฐฉ๋ฒ• 2. ๋ฏธ์‚ฌ์šฉ ์ธ๋ฑ์Šค ๊ฐ„๋‹จํžˆ ๋งํ•ด, ์ธ๋ฑ์Šค๋Š” ์ง€์ • ์ปฌ๋Ÿผ์— ๋งคํ•‘๋œ ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. ๋ณดํ†ต ํ”Œ๋žœ ํ™•์ธ์„ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ค๋ž˜๋˜๊ณ  ๋ณ€๊ฒฝ์ด ์žฆ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ผ์ˆ˜๋ก ๋ฏธ์‚ฌ์šฉ ์ธ๋ฑ์Šค๋Š” ๋Š˜์–ด๋‚˜๊ณ , ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งค๋ฒˆ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ํž˜๋“  ์ผ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ถˆํ•„์š” ์ธ๋ฑ์Šค๋Š” ๋””๋น„ ์„ฑ๋Šฅ์ €ํ•˜ ๋ฐ vacuum ์ฝ”์ŠคํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ์—, ์ตœ์ ํ™”๋œ ์ธ๋ฑ์Šค ์ƒ์„ฑ๋งŒํผ ์ตœ์ ํ™”๋œ ์ธ๋ฑ์Šค ์‚ญ์ œ๋„ ์ค‘์š”ํ•˜๋‹ค. ...

ERROR: text search configuration name \"english\" must be schema-qualified

ERROR: text search configuration name \"english\" must be schema-qualified

1. ๋ฐœ์ƒ ํ•ด๋‹น ์—๋Ÿฌ๋Š” Postgresql์—์„œ Full Text Search๋ฅผ ์œ„ํ•ด tsvector ์ปฌ๋Ÿผ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. -- ํŠน์ • ์ปฌ๋Ÿผ์„ ts_vector๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์—…๋ฐ์ดํŠธ UPDATE TABLE SET tsvec_words = to_tsvector('english',COLUMN); 2. ์›์ธ ํ•ด๋‹น ์ปฌ๋Ÿผ (ํ˜น์€ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ) ์— ํ…Œ์ด๋ธ” row ์—…๋ฐ์ดํŠธ/์ธ์„œํŠธ ์‹œ ts_vector๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” trigger๊ฐ€ ๊ฑธ๋ ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฐ์ดํŠธ ๊ฐ„ ์ถฉ๋Œ์ด ์ƒ๊ฒจ ๋ฐœ์ƒํ•œ๋‹ค. 3. ํ•ด๊ฒฐ ํŠธ๋Ÿฌ๊ฑฐ๋ฅผ ์‚ญ์ œ ํ›„ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ํ›„์— ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค. 3-1. ํŠธ๋ฆฌ๊ฑฐ ์‚ญ์ œ drop trigger TABLE_TRGGER on TABLE; 3-2. ํŠธ๋ฆฌ๊ฑฐ ์ƒ์„ฑ CREATE TRIGGER TABLE_TRIGGER BEFORE INSERT OR UPDATE ON TABLE FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(tsvec_words, 'english',COLUMN); ...

[PostgreSQL] ๋ฌธ์ž์—ด๋‚ด ์ค‘๋ณต ๊ณต๋ฐฑ, ๋‹จ์–ด ์ œ๊ฑฐ

[PostgreSQL] ๋ฌธ์ž์—ด๋‚ด ์ค‘๋ณต ๊ณต๋ฐฑ, ๋‹จ์–ด ์ œ๊ฑฐ

1. ์ค‘๋ณต ๊ณต๋ฐฑ ์ œ๊ฑฐ ํŠน์ • ๋ฌธ์ž์—ด์—ย ๋Œ€ํ•ด์„œย ์ค‘๋ณต ๊ณต๋ฐฑ ์ œ๊ฑฐ๋ฅผย ํ•˜๊ณ ย ์‹ถ๋‹ค๋ฉดย postgresqlย ์ •๊ทœ์‹์„ย ์‚ฌ์šฉํ•ด์„œย ๊ฐ€๋Šฅํ•˜๋‹ค. (๊ณต๋ฐฑ ์™ธ์— ๋‹จ์ผ ๋ฌธ์ž์— ๋Œ€ํ•œ ์ค‘๋ณต์ œ๊ฑฐ๋„ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.) select regexp_replace(name, ' +', ' ', 'g') from TABLE; -- 'g' ์˜ต์…˜์„ ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ ์ตœ์ดˆ ๊ฑด์— ๋Œ€์—์„œ๋งŒ ๋ณ€๊ฒฝ 2. ์ค‘๋ณต ๋‹จ์–ด ์ œ๊ฑฐ ์ปฌ๋Ÿผ ๋‹จ์œ„ ์ค‘๋ณต์ œ๊ฑฐ๋Š” distinct, group by๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ปฌ๋Ÿผ ๋‚ด ๋ฌธ์ž์—ด์˜ ์ค‘๋ณต ๋‹จ์–ด ์ œ๊ฑฐ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (์‰ผํ‘œ ๊ธฐ์ค€์œผ๋กœ ์ปฌ๋Ÿผ์„ ๋ถ„๋ฆฌ, ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ํ›„ ๋‹ค์‹œ ์—ฐ๊ฒฐ) ...

[PostgreSQL] BRIN ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

[PostgreSQL] BRIN ์ธ๋ฑ์Šค์˜ ์›๋ฆฌ ๋ฐ ํŠน์ง•

1. BRIN ์ธ๋ฑ์Šค๋ž€? โ–ช Block range index์˜ ์•ฝ์ž โ–ช Page ๊ฒ€์ƒ‰์— ๋„์›€ ๋˜๋Š” ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„์„œ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑ (ex, ํŠน์ •์ปฌ๋Ÿผ์˜ ์ตœ๋Œ€/์ตœ์†Ÿ๊ฐ’) โ–ช ํŠน์ • ์ปฌ๋Ÿผ์ด ๋ฌผ๋ฆฌ ์ฃผ์†Œ์˜ ์ผ์ •ํ•œ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š” ๋งค์šฐ ํฐ ํ…Œ์ด๋ธ”์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์„ค๊ณ„ (ํƒ€์ž„์‹œ์ฟผ์Šคํ•œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์œ ์šฉ) Block range๋Š” ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ๊ทผ์ ‘ํ•œ ๋ฌผ๋ฆฌ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ page ๊ทธ๋ฃน์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ Block range ์— ๋Œ€ํ•ด ์ผ๋ถ€ ์š”์•ฝ ์ •๋ณด๊ฐ€ ์ธ๋ฑ์Šค๋กœ ์ €์žฅ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ์ ์˜ ํŒ๋งค ์ฃผ๋ฌธ์„ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์—๋Š” ๊ฐ ์ฃผ๋ฌธ์ด ๋ฐฐ์น˜๋œ ๋‚ ์งœ ์—ด์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด์ „ ์ฃผ๋ฌธ์‹œ์ ์— ๋งž๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฃผ๋ฌธ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๊ณ , ZIP ์ฝ”๋“œ ์—ด์„ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์—๋Š” ๋„์‹œ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ทธ๋ฃนํ™”๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ...