본문 바로가기

RDB

(PostgreSQL) DB Lock을 줄이는 7가지 팁 해당 글은 When Postgres blocks: 7 tips for dealing with locks을 보고 정리한 글입니다 1. Default 값이 있는 필드를 추가하면 안된다 PostgreSQL 10버전 이하를 쓰고 있다면, Default 값이 있는 필드를 추가하면, 테이블 락이 걸릴 수 있다. 그리고 엄청 느리다. 그래서 이런 쿼리를 날리면 안된다. ALTER TABLE items ADD COLUMN updated_at timestamptz DEFAULT now();기본값이 없는 필드를 추가한 후, UPDATE를 날리거나 ALTER TABLE items ADD COLUMN updated_at timestamptz; UPDATE items SET updated_at = now();이렇게 쪼개서, U..
(PotgreSQL) ROW SHARE Lock이란? ROW SHARE Lock이란? Table Level Lock의 일종이다. Row라는 이름이 들어간다고 Row Lock이 아니다. SELECT FOR UPDATE, SELECT FOR SHARE 명령문을 날릴 때, 대상이 되는 테이블에 락을 잡는다. UPDATE, DELETE 명령문을 날릴 때, RowShareLock이 잡히는 경우도 있다. UPDATE / DELETE 명령문을 날릴 때, RowShareLock이 잡히는 케이스는 다음과 같다. aurthor의 id를 참조하고 있는 content 테이블이 있다고 가정해보자. CREATE TABLE authors ( id serial NOT NULL PRIMARY KEY, name text NOT NULL ); CREATE TABLE contents ( id..
(PostgreSQL) Default 값이 있는 새로운 필드 추가하기 Default 값이 있는 새로운 필드 추가하기ALTER TABLE orders ADD COLUMN price bigint NOT NULL DEFAULT 0; PostgreSQL 10 이하 버전에서는 테이블에 Default 값이 있는 필드를 추가할 땐 주의해야한다. Default값이 있는 필드를 추가할 때, 테이블을 다시 만들어내기 때문이다!그러면 시간도 오래걸리고, ACCESS EXCLUSIVE LOCK도 잡게 된다. ( 참고 - Fast Column Creation with Defaults )ACCESS EXCLUSIVE LOCK이 걸려있는 동안, 이 테이블에 대한 모든 트랜잭션은 BLOCK된다! SELECT 쿼리까지 막힌다! ( ACCESS EXCLUSIVE LOCK LEVEL은 LOCK LEVEL ..
[MariaDB]RDB 속에서 NOSQL 사용하기 배경티셔츠의 속성을 저장하는 테이블이 있다고 생각해보자티셔츠의 팔 길이, 색상 등은 항상 저장되어야하는 속성이니 이러한 데이터는 고정 스키마를 사용하면 된다. 그런데 이 중 몇개의 티셔츠는 한정판 티셔츠이거나, 누군가 기증한 티셔츠여서 일반 티셔츠에서는 없는 속성을 갖고 있는 경우가 있다. 이러한 정보들을 RDB에 저장해야한다면, 어떻게 하는게 좋을까? 누가 기증한 티셔츠인지 저장해야하는 경우, 기증자를 의미하는 새로운 필드를 저장하는게 맞을까?전체 데이터 로우 중 5%만 이 필드가 필요한 경우, 새로운 필드를 사용하는게 맞을까? 이러한 경우 필요한 속성만 동적으로 저장할 수 있어야한다. 그러려면 고정된 스키마에 동적 스키마를 적용할 수 있어야한다. 즉 RDB 개념에 NOSQL 개념을 접목시킬 수 있어야..