데이터베이스 개발 가이드라인
GitLab v19.5요약
작업 중인 기능을 설계하는 단계에서 데이터베이스 관련 변경을 추가하는지 늘 살핍니다. 쿼리 최적화나 explain 플랜 해석에 도움이 필요하면 언제든 #database에 요청합니다. 리뷰를 받을 데이터베이스 MR을 만든다면 데이터베이스 리뷰 가이드라인을 확인합니다.
데이터베이스 리뷰#
-
작업 중인 기능을 설계하는 단계에서 데이터베이스 관련 변경을 추가하는지 늘 살핍니다. 쿼리를 추가하거나 수정한다면, 리뷰 후반에 예상치 못한 문제를 만나지 않도록
explain플랜을 일찍 확인합니다. -
쿼리 최적화나
explain플랜 해석에 도움이 필요하면 언제든#database에 요청합니다. -
리뷰를 받을 데이터베이스 MR을 만든다면 데이터베이스 리뷰 가이드라인을 확인합니다.
이 문서는 데이터베이스 관련 변경, 마이그레이션, 복잡한 SQL 쿼리를 소개합니다.
-
데이터베이스 리뷰어이거나 리뷰어가 되고 싶다면 데이터베이스 변경 리뷰 입문을 확인합니다.
업그레이드#
도구#
- EXPLAIN 플랜 이해
EXPLAIN출력을 시각화하는 explain.depesz.com 또는 explain.dalibo.com- PostgreSQL SQL 구문 정리 도구 pgFormatter
db:check-migrationsjob- 데이터베이스 마이그레이션 파이프라인
마이그레이션#
- 필수 중간 정차 버전 추가
- 마이그레이션에서 다운타임 피하기
- 배치 백그라운드 마이그레이션 가이드라인
- 백그라운드 작업
- 새 모델 생성을 포함한 일반 마이그레이션 생성
- 마이그레이션 삭제
- 마이그레이션의 유형
- 다중 데이터베이스 마이그레이션
- 안전한 SQL 마이그레이션 작성을 위한 마이그레이션 스타일 가이드
- 테이블 파티셔닝
- 배포 후 마이그레이션 가이드라인과 작성 방법
- 데이터베이스 마이그레이션 실행
- SQL 쿼리 작업을 위한 SQL 가이드라인
- 테이블 교체
- Rails 마이그레이션 테스트 가이드
- Rails 마이그레이션 테스트를 작성할 시점과 방법
- 데이터베이스 레코드 중복 제거
테이블 파티셔닝#
데이터베이스 증가 관리#
디버깅#
- 데이터베이스 액세스
- 데이터베이스 초기화
- 데이터베이스 문제 해결과 디버깅
- SQL 쿼리의 출처 추적:
- Rails 콘솔에서 Verbose Query Logs 사용
- 데이터베이스 쿼리 주석 사용
모범 사례#
- 데이터베이스 인덱스 추가
- 다운타임 없이 외래 키 제약 추가
- Cells와의 호환성
CHECK제약- 업그레이드 전 백그라운드 마이그레이션 확인
- 클라이언트 측 연결 풀
- 제약 이름 규칙
- enum 생성
- 데이터 레이아웃과 액세스 패턴
- 효율적인
IN연산자 쿼리 - 고정 항목 모델
- LATERAL 조인으로 인덱스 탐색 강제
- 외래 키와 연관
- 해시 인덱스
- 테이블에 배치로 삽입
- 배치 처리 가이드라인
- 테이블을 배치로 순회
- 로드 밸런싱
NOT NULL제약- 테이블 칼럼 순서
- 페이지네이션 가이드라인
- 다형성 연관
- 쿼리 수 제한
- 쿼리 성능 가이드라인
- 데이터 직렬화
- 단일 테이블 상속
- SHA1 해시를 바이너리로 저장
- 문자열과 Text 데이터 유형
- 여러 값 업데이트
- 데이터베이스 기능 확인
사례 연구#
GitLab 관리자를 위한 PostgreSQL 정보#
- 외부 PostgreSQL 서비스로 GitLab 구성
- 확장을 위한 PostgreSQL 구성
- 데이터베이스 로드 밸런싱
- GitLab 데이터베이스를 다른 PostgreSQL 인스턴스로 이전
- Omnibus GitLab 에서의 복제와 장애 조치
- Omnibus GitLab을 사용한 독립형 PostgreSQL
- PostgreSQL 문제 해결
- 번들 PgBouncer 서비스 사용
확장을 위한 사용자 정보#
GitLab 관리자를 위해 확장을 위한 PostgreSQL 구성 정보를 제공하며, 다음과 같은 주요 방식을 다룹니다.
ClickHouse#
- 소개
- Siphon을 사용한 테이블 설계
- GitLab 내부의 ClickHouse
- 쿼리 실행 최적화
- ClickHouse로 GitLab 기능 재구축 1: 활동 데이터
- ClickHouse로 GitLab 기능 재구축 2: 머지 리퀘스트 분석
- ClickHouse의 계층형 스토리지
- 리뷰어 가이드라인