외부 PostgreSQL 데이터베이스 업그레이드
GitLab v19.5요약
PostgreSQL 데이터베이스 엔진을 업그레이드할 때는 PostgreSQL 커뮤니티와 클라우드 공급자가 권장하는 모든 단계를 따르는 것이 중요합니다. 마이너 버전 업그레이드: 버그 수정과 보안 수정만 포함합니다. 마이너 버전 업그레이드 과정은 PostgreSQL 바이너리를 교체하고 데이터베이스 서비스를 재시작하는 것으로 끝납니다.
PostgreSQL 데이터베이스 엔진을 업그레이드할 때는 PostgreSQL 커뮤니티와 클라우드 공급자가 권장하는 모든 단계를 따르는 것이 중요합니다. PostgreSQL 데이터베이스 업그레이드는 두 종류로 나뉩니다.
-
마이너 버전 업그레이드: 버그 수정과 보안 수정만 포함합니다. 기존 애플리케이션 데이터베이스 모델과 항상 하위 호환됩니다.
마이너 버전 업그레이드 과정은 PostgreSQL 바이너리를 교체하고 데이터베이스 서비스를 재시작하는 것으로 끝납니다. 데이터 디렉터리는 그대로 유지됩니다.
-
메이저 버전 업그레이드: 내부 저장 형식과 데이터베이스 카탈로그가 바뀝니다. 그 결과 쿼리 옵티마이저가 사용하는 오브젝트 통계가 새 버전으로 이전되지 않으며
ANALYZE로 다시 만들어야 합니다.문서화된 메이저 버전 업그레이드 절차를 따르지 않으면 데이터베이스 성능이 떨어지고 데이터베이스 서버의 CPU 사용량이 높아지는 경우가 많습니다.
주요 클라우드 공급자는 모두 pg_upgrade 유틸리티를 사용한 데이터베이스 인스턴스의
인플레이스 메이저 버전 업그레이드를 지원합니다. 다만 성능 저하나 데이터베이스 중단 위험을
줄이려면 업그레이드 전후 단계를 반드시 따라야 합니다.
사용 중인 외부 데이터베이스 플랫폼의 메이저 버전 업그레이드 절차를 꼼꼼히 읽습니다.
- Amazon RDS for PostgreSQL
- Azure Database for PostgreSQL Flexible Server
- Google Cloud SQL for PostgreSQL
- PostgreSQL 커뮤니티
pg_upgrade
Amazon RDS Blue/Green Deployments처럼 논리적 복제를 사용하는 PostgreSQL 업그레이드에서는 시작하기 전에 GitLab에서 런타임 DDL을 비활성화합니다.
sudo gitlab-rails runner "Feature.enable(:disallow_database_ddl_feature_flags)"
업그레이드가 끝나면 즉시 다시 활성화합니다.
sudo gitlab-rails runner "Feature.disable(:disallow_database_ddl_feature_flags)"
DDL을 며칠 넘게 비활성화한 채 두면 성능이 저하될 수 있습니다. 이 플래그를 켜면 백그라운드 마이그레이션도 중단되므로, 플래그가 켜져 있는 동안에는 GitLab 업그레이드가 실패합니다.
메이저 버전 업그레이드 후 PostgreSQL 확장 확인#
메이저 버전 업그레이드는 PostgreSQL 서버 바이너리를 교체하지만 데이터베이스에 설치된 확장은 업데이트하지 않습니다. 업그레이드 후에는 다음과 같습니다.
- 설치한 적 없는 확장은 더 새로운 GitLab 버전이 필요로 하더라도 설치되지 않은 상태로 남습니다.
- 설치된 확장은 업데이트하기 전까지 이전 서버 릴리스의 버전으로 유지됩니다.
메이저 버전 업그레이드를 완료한 후:
-
슈퍼유저로 GitLab 데이터베이스에 연결합니다.
-
모든 필수 확장이 있는지 확인합니다.
SELECT extname, extversion FROM pg_extension ORDER BY extname;확장이 없으면 설치합니다. 방법은 PostgreSQL 확장 관리를 참고합니다.
-
새 서버에서 사용할 수 있는 버전보다 뒤처진 확장을 나열합니다.
SELECT extname, extversion AS installed, default_version AS available FROM pg_extension JOIN pg_available_extensions ON name = extname WHERE extversion <> default_version; -
앞의 쿼리가 반환한 각 확장을 업데이트합니다.
ALTER EXTENSION <extension_name> UPDATE;
업그레이드한 인스턴스의 모든 GitLab 데이터베이스에 대해 이 단계를 반복합니다. 컨테이너 레지스트리 데이터베이스를 사용한다면 이 데이터베이스도 포함합니다.
메이저 버전 업그레이드 후 항상 데이터베이스에서 ANALYZE 실행#
옵티마이저 통계는 pg_upgrade로 이전되지 않으므로,
메이저 버전 업그레이드 후에는 ANALYZE 작업을 실행해
pg_statistic 테이블을 갱신해야 합니다.
업그레이드한 PostgreSQL 서비스·인스턴스·클러스터의 모든 데이터베이스에 대해 수행합니다.
이 작업은 GitLab 성능을 크게 떨어뜨릴 수 있으므로, 유지 보수 시간을 계획할 때
ANALYZE 소요 시간을 포함합니다.
데이터베이스 업그레이드 후 GitLab 재시작#
데이터베이스 서비스를 재시작하면 기존 연결이 무효화되고 일부 구성 요소는 다시 연결하기 위해 재시작이 필요할 수 있으므로, 마이너든 메이저든 PostgreSQL 엔진을 업그레이드한 뒤에는 GitLab(해당하는 경우 Sidekiq, Puma, PgBouncer, Praefect)을 반드시 재시작해야 합니다.
유지 보수 시간을 계획할 때는 업그레이드가 끝난 직후 GitLab을 재시작할 시간을 포함합니다.