본문 바로가기
DATABASE/PostgreSQL

인덱스 생성 Lock Wait 최소화 하기 - Postgres

by 프즈 2023. 3. 28.
반응형

큰 테이블에 인덱스 생성하기 무서워요. 작은 테이블이라고 하더라도 사용 중인 시스템에 뭔가 해야 한다는 것이 무서운 일인데요. 그래도 해야 하는 일은 언제나 발생합니다. 해야 한다면 Lock을 최소화하면서 작업하고 싶은데요. Postgres에서는 인덱스 생성작업에서 Lock을 최소화할 수 있는 옵션을 제공하고 있어요. 옵션 이름하여 Concurrently입니다. 

보통 인덱스 생성하는 방법은 DB 대부분 비슷해요.

create index 인덱스명 on 테이블명(컬럼1, 컬럼2)

이렇게 만들면 해당 테이블을 사용하는 작업들이 멈출 수 있어요. 서비스 장애로까지 이어질 수 있습니다. 오라클에서는 online을 제공하고 mysql에서는 lock=none과 같은 옵션을 제공해주고 있어요. 일반적인 인덱스 생성 구문은 표준처럼 다 똑같이 사용할 수 있는데 Lock을 최소화 하면서 생성하는 방법은 DB마다 다른 SQL 키워드를 가지고 있네요.

PostgresSQL에서는 아래처럼 Concurrently를 추가하여 만들면 DDL만 사용할 수 없도 데이터 조작은 가능하게 하면서 인덱스를 만들어줍니다.

create index CONCURRENTLY 인덱스명 on 테이블명(컬럼1, 컬럼2)

 

반응형

댓글