[DB] Lock

https://americanopeople.tistory.com/292

 

(PostgreSQL) DB Lock을 줄이는 7가지 팁

해당 글은 When Postgres blocks: 7 tips for dealing with locks을 보고 정리한 글입니다 1. Default 값이 있는 필드를 추가하면 안된다 PostgreSQL 10버전 이하를 쓰고 있다면, Default 값이 있는 필드를 추가..

americanopeople.tistory.com

 

1. Default 값이 있는 필드를 추가하면 안된다

**do{numRowsUpdated\= executeUpdate("UPDATE items SET updated\_at = ? "+"WHERE ctid IN (SELECT ctid FROM items WHERE updated\_at IS NULL LIMIT 5000)", now); }while(numRowsUpdate >0);  

**

2. Lock 때문에 트랜잭션들이 큐에 쌓이는걸 피하려면, Lock에 TimeOut을 거는게 좋다.

ALTER TABLE items ADD COLUMN updated_at timestamptz DEFAULT now();
SET lock_timeout TO '2s'
ALTER TABLE items ADD COLUMN updated_at timestamptz;

3. 부하가 걸릴만한 Lock은 최대한 늦게 잡는게 좋다

BEGIN; CREATE TABLE items_new (LIKE items INCLUDING ALL);
-- long-running operation: 
\COPY items_new FROM 'newdata.csv' WITH CSV 
-- reads and writes blocked from here: DROP TABLE items; 
ALTER TABLE items_new RENAME TO items; 
COMMIT;

4. 데드락을 발생시킬만한 순서로 쿼리를 쓰지 말자

BEGIN;
UPDATE items SET counter = counter + 1 WHERE key = 'americano'; 
UPDATE items SET counter = counter + 1 WHERE key = 'people'; 
END;

http://www.dbguide.net/db.db?cmd=view&boardUid=148215&boardConfigUid=9&boardIdx=138&boardStep=1

 

데이터 전문가 지식포털 DBGuide.net

Lock 트랜잭션 동시성 제어 1. Lock 기본 가. Lock이란? 고가의 DBMS를 사용하는 이유로는 성능, 관리의 편이성 등 여러 가지 측면이 있지만, 무엇보다 트랜잭션 처리 능력이 가장 기본적이고 핵심적인

www.dbguide.net

 

'DB' 카테고리의 다른 글

Query Optimize ( Where절 순서, join 순서 )  (0) 2022.06.26
[noSql]Redis  (0) 2020.07.30
인덱스란?  (0) 2020.07.29

댓글

Designed by JB FACTORY