데이터베이스 개발 지침
데이터베이스 리뷰
- 작업 중인 기능의 설계 단계에서 데이터베이스 관련 변경 사항을 추가하는 경우, 쿼리를 추가하거나 수정하는 경우, 검토 단계에서 늦은 시간에 놀라운 사실을 피하기 위해 빨리
explain
플랜을 살펴봐야 합니다. - 언제든지 쿼리의 최적화나
explain
플랜 이해에 도움이 필요한 경우#database
에서 지원을 요청하세요. -
리뷰를 위해 데이터베이스 MR을 생성하는 경우, 데이터베이스 리뷰 지침을 확인하세요.
이 문서는 데이터베이스 관련 변경, 마이그레이션 및 복잡한 SQL 쿼리에 대한 소개를 제공합니다.
- 데이터베이스 리뷰어이거나 리뷰어가 되고 싶은 경우, 데이터베이스 변경 사항 리뷰 소개를 확인하세요.
도구
- EXPLAIN 플랜 이해하기
-
EXPLAIN
의 결과를 시각화하기 위해 explain.depesz.com 또는 explain.dalibo.com 사용 - PostgreSQL SQL 구문을 깔끔하게 하는 pgFormatter
- db:check-migrations 작업
- 데이터베이스 마이그레이션 파이프라인(database_migration_pipeline.md)
마이그레이션
- 필수 중지점 추가
- 마이그레이션 중 다운타임 피하기(avoiding_downtime_in_migrations.md)
- 일괄 배경 마이그레이션 지침
- 일반 마이그레이션 생성, 새로운 모델 생성 포함
- 마이그레이션 삭제(deleting_migrations.md)
- 다양한 유형의 마이그레이션
- 여러 데이터베이스에 대한 마이그레이션(migrations_for_multiple_databases.md)
- 안전한 SQL 마이그레이션을 생성하기 위한 마이그레이션 스타일 가이드
- 테이블 파티셔닝(partitioning/index.md)
- 배포 후 마이그레이션 지침 및 마이그레이션 생성 방법
- 데이터베이스 마이그레이션 실행(database_debugging.md#migration-wrangling)
- SQL 쿼리 작업을 위한 SQL 지침
- 테이블 교체(swapping_tables.md)
- Rails 마이그레이션 테스트(testing_guide/testing_migrations_guide.md) 가이드
- Rails 마이그레이션 테스트 작성 시기 및 방법에 대한 안내
테이블 파티셔닝
- 개요
- 날짜 범위
- 해시(hash) (partitioning/hash.md)
- 정수 범위(int range) (partitioning/int_range.md)
- 디렉터리(list) (partitioning/list.md)
디버깅
- 데이터베이스 접근(databse_debugging.md#manually-access-the-database)
- 데이터베이스 재설정(database_debugging.md#delete-everything-and-start-over)
- 데이터베이스 문제 해결 및 디버깅(database_debugging.md)
- SQL 쿼리의 출처를 추적하는 방법:
- 다양한 쿼리 로그를 사용하여 Rails 콘솔에서
- Marginalia를 사용하여 쿼리 주석 추가
모범 관행
- 데이터베이스 인덱스 추가(adding_database_indexes.md)
- 기존 열에 외래 키 제약 조건 추가(add_foreign_key_to_existing_column.md)
- 업그레이드 전 배경 마이그레이션 확인(../../update/background_migrations.md)
- 클라이언트 측 연결 풀(client_side_connection_pool.md)
- 제약 조건 명명 규칙(constraint_naming_convention.md)
- enum 생성(creating_enums.md)
- 데이터 레이아웃 및 액세스 패턴(layout_and_access_patterns.md)
- 효율적인
IN
연산자 쿼리(efficient_in_operator_queries.md) - 외래 키 및 연관 관계(foreign_keys.md)
- 해시 인덱스(hash_indexes.md)
- 일괄적으로 테이블에 삽입(insert_into_tables_in_batches.md)
- 일괄적으로 테이블 반복(iterating_tables_in_batches.md)
- 로드 밸런싱(load_balancing.md)
-
NOT NULL
제약 조건(not_null_constraints.md) - 테이블 열 정렬(ordering_table_columns.md)
- 페이지네이션 지침(pagination_guidelines.md)
- 페이지네이션 성능 지침(pagination_performance_guidelines.md)
- 다형 연관 관계(polymorphic_associations.md)
- 쿼리 카운트 제한(query_count_limits.md)
- 쿼리 성능 지침(query_performance.md)
- 데이터 직렬화(serializing_data.md)
- 단일 테이블 상속(single_table_inheritance.md)
- 이진으로 SHA1 해시 저장하기(sha1_as_binary.md)
- 문자열 및 텍스트 데이터 유형(strings_and_the_text_data_type.md)
- 다중 값을 업데이트(setting_multiple_values.md)
- 데이터베이스 기능 확인(verifying_database_capabilities.md)
사례 연구
- 데이터베이스 사례 연구: 라벨별 필터링(filtering_by_label.md)
- 데이터베이스 사례 연구: 네임스페이스 저장 통계(namespaces_storage_statistics.md)
GitLab 관리자용 PostgreSQL 정보
- 외부 PostgreSQL 서비스를 사용하여 GitLab 구성하기(../../administration/postgresql/external.md)
- 확장을 위한 PostgreSQL 구성(../../administration/postgresql/index.md)
- 데이터베이스 로드 밸런싱(../../administration/postgresql/database_load_balancing.md)
- GitLab 데이터베이스를 다른 PostgreSQL 인스턴스로 이동하기(../../administration/postgresql/moving.md)
- Omnibus GitLab을 사용한 복제 및 장애 조치(../../administration/postgresql/replication_and_failover.md)
- Omnibus GitLab을 사용한 독립형 PostgreSQL(../../administration/postgresql/standalone.md)
- PostgreSQL 문제 해결(../../administration/troubleshooting/postgresql.md)
- 번들된 PgBouncer 서비스 사용하기(../../administration/postgresql/pgbouncer.md)
확장을 위한 사용자 정보
GitLab 관리자를 위한 확장을 위한 PostgreSQL 구성에 대한 정보를 볼 수 있으며, 주요 방법으로 다음이 포함됩니다:
- 독립형 PostgreSQL(../../administration/postgresql/standalone.md)
- 외부 PostgreSQL 인스턴스(../../administration/postgresql/external.md)
- 복제 및 장애 조치(../../administration/postgresql/replication_and_failover.md)
ClickHouse
- 소개
- GitLab 내에서의 ClickHouse 사용(clickhouse/clickhouse_within_gitlab.md)
- 쿼리 실행 최적화(clickhouse/optimization.md)
- ClickHouse를 사용한 GitLab 기능 재구성 1: 활동 데이터(clickhouse/gitlab_activity_data.md)
- ClickHouse를 사용한 GitLab 기능 재구성 2: Merge Request 분석(clickhouse/merge_request_analytics.md)
- ClickHouse에서의 Tiered Storage(clickhouse/tiered_storage.md)
기타
- 유지 보수 작업(maintenance_operations.md)
- 다수의 데이터베이스 객체 업데이트(setting_multiple_values.md)
- 트리 계층 구조의 일괄 반복 증명(poc_tree_iterator.md)