logo

PostgreSQL 11 에서의 add column not null & default 성능 개선

language-logoPostgreSQL
language-logoMySQL

• PostgreSQL에서는 일부 ALTER 작업에 대해 잠금 없는 변경이 가능하며, 이는 MySQL에서 테이블 구조를 변경할 때 전체 테이블의 데이터를 새로운 구조로 복사하는 방식과 달리, PostgreSQL에서는 테이블 구조 변경 작업 시 메타 데이터를 저장하는 시스템 카탈로그에 추가된 정보만 반영한다. 이로 인해 테이블의 크기와 관계 없이 빠른 작업이 가능하다.
• PostgreSQL 11버전부터는 'default value'와 'Not Null' 값을 포함한 컬럼 추가에서도 성능 개선이 있었다. PostgreSQL 10에서는 'alter table' 작업이 5ms로 즉시 적용되었지만, 'not null & default value'를 포함한 작업은 3.5초가 걸렸다. 이는 PostgreSQL이 실제로 전체 테이블을 다시 작성하여 각 row에 열을 추가하고 기본값으로 채우기 때문이다. 반면, PostgreSQL 11에서는 이러한 작업의 성능이 개선되었다.
• PostgreSQL 11에서는 새로운 컬럼을 추가하고 해당 컬럼에 'non-null default'를 설정할 때 전체 테이블을 재작성하는 대신, 새 컬럼이 추가될 때 기본값이 즉시 모든 row에 적용되는 것이 아니라 메타데이터로 저장되며 실제 데이터는 필요에 따라 실시간으로 생성된다.
• 이 방식의 장점은 새로운 컬럼을 추가하는 동작이 즉시 완료되고, 실제 데이터를 채우는 과정이 백그라운드에서 점진적으로 이루어지며, 이로 인해 테이블 잠금 시간을 크게 줄일 수 있다.

thumbnail
북마크
공유하기
신고하기
12분 분량
조회수 269
profile-image향로
2년 전
Copyright © 2025. Codenary All Rights Reserved.