https://americanopeople.tistory.com/292
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
'DB' 카테고리의 다른 글
Query Optimize ( Where절 순서, join 순서 ) (0) | 2022.06.26 |
---|---|
[noSql]Redis (0) | 2020.07.30 |
인덱스란? (0) | 2020.07.29 |