[PostgreSQL] Lock
lock์ ๋์์ฑ ์ ์ด์์, ๋์์ ์ด๋ค ํญ๋ชฉ์ ์ ๊ทผ์ ์๋ํ ๋ ์ด๋ป๊ฒ ์ถฉ๋์ ๋ฐฉ์งํ๊ฑฐ๋ ํ์ฉํ ๊ฒ์ธ์ง์ ๋ํ ๊ธฐ๋ฅ์ด๋ค.
ํ ์ด๋ธ Lock ๊ฑธ๊ธฐ
์ด๊ฒ ์ ํ์ํ๊ณ , ์ด๋จ๋ ์ฌ์ฉํ๋์ง๋ถํฐ ์ฌ์ฉ์ฌ๋ก๋ฅผ ํ๋ฒ ๊ฐ๋ตํ๊ฒ ๋ณด๊ฒ ๋ค.
๋ง์ฝ ๋ฐ์ดํฐ ํ์ ๊ด๋ฆฌํ๋ ํ ์ด๋ธ์ด ํ๋ ์๊ณ ,
์ด๋ค ์๋ฒ์์ ์ด๊ฑธ ์์๋๋ก ํ๋์ฉ ๊บผ๋ด์ด๋ค๊ณ ์๊ฐํด๋ณด์.
๊บผ๋ด์ฐ๊ณ ๋์๋ used์ true๊ฐ์ ์๊ฒจ์ฃผ๊ณ , ํ๋ฒ์ ์ฌ๋ฌ ์์ฒญ์์ ๋์ผํ ๊ฐ์ ๊ฐ์ ธ์์๋ ์ ๋๋ค.
์๋ฌด ์๊ฐ์์ด ์ด๋ฐ์์ผ๋ก ํ๋์ฉ ๊บผ๋ด์ฐ๋ ๊ฒ์ ๋ฌธ์ ์ ์์ง๊ฐ ๋ง๋ค.
๋ฌด์์ used๊ฐ false์ธ ๊ฒ๋ค์ ๊ฐ์ ธ์ค๋ค๋ณด๋, ์ฌ๋ฌ๊ฐ์ ์์ฒญ์์ ๋์์ ๋์ผํ pool ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , ๋์ผํ pool ๋ฐ์ดํฐ์ used true๋ฅผ ์๊ธธ ์๊ฐ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ ๋ฌ๋ฉด ๊ทธ๋ฅ..

9๊ฐ๊ฐ ๋ฐ์ดํฐ ํ ํ๋๋ง ์ฐ๊ณ ๋ง๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์ ํ์ํ ๊ฒ์ด Lock์ด๋ค.
table lock์ ์ฌ์ฉํ๋ฉด ํ์ฌ ํธ๋์ญ์
์ด ์ข
๋ฃ๋๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ํธ๋์ญ์
์์ ์ ๊ทผ์ ํ ์๊ฐ ์๋ค.
lock table ํ
์ด๋ธ๋ช
;
ํญ์ ํธ๋๋ฐฑ์
๊ตฌ๋ฌธ ์์์ ์ฌ์ฉ๋์ด์ผ ํ๋ค๋์ ์์ง ๋ง์.
์ด๋ ๊ฒ ํ๋ค๋ฉด ์ด์

์์ฐจ์ ์ผ๋ก ์ ์ ๊ทผ์ด ๋์์ ๊ฒ์ด๋ค.
ํ ๋จ์ lock
๊ทธ๋ฐ๋ฐ ์ฌ์ค, ์ ํ ํ๋์ฉ ์จ๋จน๋๋ฐ ํ ์ฟผ๋ฆฌ ๋๋๋ง๋ค ํ
์ด๋ธ ์ ์ฒด๋ฅผ lockํด๋ฒ๋ฆฌ๋๊ฑด ๋ค์ ๋ญ๋น์ผ ์๋ ์๋ค.
์ฌ์ค, ๊ฐ์ ํ์ ๋์์ ๊ทผ๋ง ํ์ง ์๊ณ , ๋ค๋ฅธ ํ์ ์ ๊ทผํด๋ ๋๋๊ฒ ์๋๊ฐ?
๊ทธ๋์ ์ด๋ฐ ์ผ์ด์ค์๋ ํ ๋จ์ lock์ ๊ฑฐ๋ ํธ์ด ๋ณด๋ค ์์ฐ์ค๋ฝ๋ค.
๋๋ต์ ์ธ ์ฌ์ฉ๋ฒ์ ์ด๋ ๋ค.
... ์ฟผ๋ฆฌ ... for update
์ด๋ฌ๋ฉด ์ ์กฐ๊ฑด์ ์ํด ๊ฐ์ ธ์จ ํญ๋ชฉ๋ค์ ํ์ฌ ํธ๋์ญ์
์ด ๋๋ ๋๊น์ง lock์ด ๊ฑธ๋ ค์ ์ ๊ทผํ์ง ๋ชปํ๋ค.
์ด ์ผ์ด์ค์์๋ ์ฌ์ค ์ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฆด๋๋ ์ ๋ถ ์ฒซ๋ฒ์งธ ํ์ ๊ฐ๋ฆฌ์ผ์ ์ค์ ๋์์ ๋ค๋ฅด์ง ์๊ฒ ์ง๋ง, ๋ค๋ฅธ ์ธ๋ถ์์คํ ์์ ๋ค๋ฅธ ํ๋ค์ ๋ํด์๋ ์ ๊ทผ์ ํ ์ ์๋ค๋ ๊ฒ์ด ๋ฌ๋ผ์ก๋ค.
Lock์ ์ข ๋ฅ
๋ฝ ์์ค์๋ ๊ฝค๋ ๋ค์ํ ์ต์ ์ด ์๋ค.
lock table ํ
์ด๋ธ๋ช
[ IN lockmode MODE ];
์ด๊ฒ๋ ๊ฝค ์ข ๋ฅ๊ฐ ๋ง๋ค.
1. ACCESS SHARE
๊ฐ์ฅ ์ฌ์ด ์์ค์ ๋ฝ์ด๋ค.
ACCESS EXCLUSIVE์๋ง ์ถฉ๋ํ๊ณ , ๊ทธ๊ฒ ์๋๋ผ๋ฉด ์ธ์ ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ
์ด๋ธ์ ์ฝ๊ธฐ๋ง ํ๊ณ ํ
์ด๋ธ์ ์์ ํ์ง ์๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ ์ด ๋ฝ์ผ๋ก ๋์ํ๋ค.
2. ROW SHARE
EXCLUSIVE, ACCESS EXCLUSIVE ๋ฝ๊ณผ ์ถฉ๋ํ๋ค.
for update ๊ฐ์ ํ ๋จ์ lock์ ๊ฑธ ๊ฒฝ์ฐ์ ์ด๊ฒ ๋ถ๋๋ค.
3. ROW EXCLUSIVE
SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE์ ์ถฉ๋ํ๋ค.
UPDATE, DELETE, INSERT ๋ฑ์ ์์ ์ฟผ๋ฆฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ฑธ๋ก ๋์ํ๋ค.
4. SHARE UPDATE EXCLUSIVE
SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE ๋ฝ๊ณผ ์ถฉ๋ํ๋ค.
VACUUM, ANALYZE, CREATE INDEX CONCURRENTLY, CREATE STATISTICS, COMMENT ON, REINDEX CONCURRENTLY, ์ผ๋ถ ALTER INDEX์ ์ํด ํ๋๋๋ค.
5. SHARE
ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE์ ์ถฉ๋ ํ๋ค.
์ด ๋ชจ๋๋ ๋์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ํ
์ด๋ธ์ ๋ณดํธํ๋ค.
CREATE INDEX ๋ฑ์ ์ํด ๋์ํ๋ค.
6. SHARE ROW EXCLUSIVE
ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE์ ์ถฉ๋ํ๋ค.
CREATE TRIGGER๋ ์ผ๋ถ ALTER TABLE ์ฟผ๋ฆฌ์ ๋ถ๋๋ค.
7. EXCLUSIVE
์ด๊ฒ ๋ฝ์ ์ก๊ณ ์๋ ๊ฒฝ์ฐ์๋ ACCESS SHARE lock์ ๋ค๊ณ ์๋ ํธ๋์ญ์ ๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ , ๊ทธ ์ธ์ ์ ๊ทผ์ด ๋งํ๋ค.
8. ACCESS EXCLUSIVE
๊ฐ์ฅ ๊ฐํ ์์ค์ lock์ผ๋ก, ๋ชจ๋ ์ฝ๊ธฐ๋ ์ฐ๊ธฐ๋ ๊ฐ์ ๋์์ ์ง๊ธ ๋๊ณ ์๋ ํ๋์ ํธ๋์ญ์
๋ง ํด๋น ํ
์ด๋ธ์ ์ ์์ด ๊ฐ๋ฅํ๋ค.
๋ฝ ์์ค์ ์ง์ ํ์ง ์๊ณ lock ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค๋ฉด ์ด๊ฒ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ค์ด๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ํ
์ด๋ธ ์ ์ฒด์ ๋ง์ ์ํฅ์ ์ฃผ๋ alter index๋ alter table ์ฟผ๋ฆฌ์ ๊ธฐ๋ณธ ๋ฝ ์ค์ ์ด ์ด๊ฑฐ๋ค.
์ข๋ ์ดํด๋ฅผ ๋๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด๋์ ํ๋ค.
์ด๋ค lock์ด ์ด๋ค lock์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ฅผ ํํํด๋จ๋ค.
์ฐธ์กฐ
https://stackoverflow.com/questions/47441027/pessimistic-locking-vs-serializable-transaction-isolation-level
https://stackoverflow.com/questions/22646226/how-are-locking-mechanisms-pessimistic-optimistic-related-to-database-transact
https://www.postgresql.org/docs/current/explicit-locking.html
https://www.postgresql.org/docs/current/sql-lock.html
https://brownbears.tistory.com/543