Postgresql Lock์ด๋ž€? (์กฐํšŒ ๋ฐ kill, Dead lock)

Postgresql Lock์ด๋ž€? (์กฐํšŒ ๋ฐ kill, Dead lock)

1. Lock ํ™•์ธ๋ฐฉ๋ฒ• SELECT PSAT.RELNAME, PL.LOCKTYPE, PL.PID, PL.MODE, PL.GRANTED FROM PG_LOCKS PL, PG_STAT_ALL_TABLES PSAT WHERE PL.RELATION = PSAT.RELID 2. Lock Kill ๋ฐฉ๋ฒ• SELECT PG_CANCEL_BACKEND([PID]) SELECT PG_TERMINATE_BACKEND([PID]) Lock ๋ฆฌ์ŠคํŠธ์—์„œ ์กฐํšŒ๋œ PID๋ฅผ ๋„ฃ๊ณ  cancel, ํ˜น์€ terminate ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค. cancel์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋งŒ์„, terminate๋Š” ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค๋“ค๊นŒ์ง€ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค. 3. Lock ์ด๋ž€? (Postgresql) Postgresql์€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ lock ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์—์„œ ์ œ์–ด๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„ ๊ธฐ๋ณธ์ ์ธ SQL ์‹คํ–‰ ์‹œ ์ ์ ˆํ•œ ๋ฝ์„ ์ž๋™์‹คํ–‰์‹œ์ผœ ๊ด€๋ จ ํ…Œ์ด๋ธ”์˜ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€ํ•œ๋‹ค. 3-1.ย ํ…Œ์ด๋ธ” ๋‹จ์œ„ Lock ๋‹ค์Œ ๋ฝ ๋“ค์€ ๋ชจ๋‘ ํ…Œ์ด๋ธ” ๋‹จ์œ„์˜ ๋ฝ์ด๋ฉฐ, ๋ช…์นญ๊ณผ ์ƒ๊ด€์—†์ด ํ…Œ์ด๋ธ” ๋‹จ์œ„๋กœ ์ ์šฉ๋œ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ฝ์ด ์ถฉ๋Œํ–ˆ์„๋•Œ์˜ ์ƒ๊ด€๊ด€๊ณ„์— ์˜ํ•ด ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋Œ์ž…ํ•œ๋‹ค. (ํ…Œ์ด๋ธ” ๋‹จ์œ„ ๋ฝ์€ ์œ ํ˜•์— ๋”ฐ๋ผ ์„œ๋กœ ์ถฉ๋Œ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฆ„) ํ•œ ํ…Œ์ด๋ธ”์—๋Š” 2๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๋ฝ ์ ์šฉ ๋  ์ˆ˜ ์—†๋‹ค. (์„œ๋กœ ์ถฉ๋Œ๋˜์ง€ ์•Š๋Š” ๋ฝ์€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์— ๋™์‹œ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.) ํŠน์ • ๋ฝ์€ self-conflicting ๋  ์ˆ˜ ์žˆ๋‹ค. (ex. access exclusive ๋ฝ์€ ์ค‘์ฒฉ๋ถˆ๊ฐ€ access share ๋ฝ์€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์—์„œ ๋‹ค์ค‘์œผ๋กœ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.) ...

[PostgreSQL] Trigger, Procedure, Function (history ๊ด€๋ฆฌํ•˜๊ธฐ)

[PostgreSQL] Trigger, Procedure, Function (history ๊ด€๋ฆฌํ•˜๊ธฐ)

* ๊ฐ€์žฅย ๋ณดํŽธ์ ์œผ๋กœย ์“ฐ์ด๋Š”ย ๊ฐ„๋‹จํ•œย history ์ €์žฅย ํŠธ๋ฆฌ๊ฑฐย ์ƒ์„ฑย ์˜ˆ์ œ ํŠน์ • ํ…Œ์ด๋ธ”์— insert, update๊ฐ€ ์ˆ˜ํ–‰๋  ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด ๋‚ด์—ญ์— โ€œinsertโ€๋ฅผ ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํŠธ๋ฆฌ๊ฑฐ ์ƒ์„ฑ ์˜ˆ์ œ์ด๋‹ค. 1-1. ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ํŠธ๋ฆฌ๊ฑฐ ์ƒ์„ฑ create trigger trigger_save_history after insert or update on A for each row execute procedure trigger_insert(); 1-2. ์‹ค์ œ insert๋ฌธ์ด ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜ย CREATE OR REPLACE FUNCTION trigger_insert() returns trigger AS $$ DECLARE BEGIN insert into B (id, values, date) values (new.id, new.values, current_timestamp()); return NULL; END; $$ LANGUAGE 'plpgsql'; ํ•˜์ง€๋งŒ ํŠน์ • table์— insert, delete, update์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์ด๋ ฅ์„ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด ์ด๋ ฅ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋“ฑ ...

Full Text Search๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ํ–ฅ์ƒ

Full Text Search๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ํ–ฅ์ƒ

1. ๋ฌธ์ œ์ƒํ™ฉ ๊ธด ํ…์ŠคํŠธ์—์„œ ๋‹จ์ˆœ like ์กฐํ•ฉ ์™ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์œ ์‚ฌ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ (Ex. Susan loves hiking ์„ โ€œlove hikeโ€ ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•จ) RDBMS์—์„œ ์ˆ˜์ฒœ๋งŒ ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ๊ธด ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์†๋„ ํ–ฅ์ƒ 2. Full Text Search(์ „๋ฌธ๊ฒ€์ƒ‰)๋ž€? ๊ฒŒ์‹œ๋ฌผ์˜ ๋‚ด์šฉ/์ œ๋ชฉ ๋“ฑ ๋ฌธ์žฅ, ๋ฌธ์„œ ์ „์ฒด์—์„œ ํ‚ค์›Œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๋‹จ์ˆœํ•œ like, ๋น„๊ต์—ฐ์‚ฐ์ž์™€ ๋‹ฌ๋ฆฌ ๊ฐ ๋‹จ์–ด์˜ Tokenํ™” ๋ฐ ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ๊ธด ๋ฌธ์žฅ๋‚ด์—์„œ์˜ ์œ ์‚ฌ ๊ฒ€์ƒ‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. Postgresql ๊ธฐ๋ณธ ์ธ๋ฑ์Šค์ธ b-tree์ธ๋ฑ์Šค๋กœ๋Š” Like ์™€ ๊ฐ™์€ ํŒจํ„ด ๋งค์นญ ๊ฒ€์ƒ‰์‹œ ์–‘์ชฝ์— %%๋ฅผ ๊ฑฐ๋Š” ๊ฒฝ์šฐ๋Š” ์ธ๋ฑ์Šค๋ฅผ ํƒ€์ง€ ์•Š์ง€๋งŒ, gin ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ...