리스트 파티션
GitLab 데이터베이스에서 리스트 파티셔닝을 구현하기 위한 단계별 마이그레이션 방법과 헬퍼 사용법을 설명합니다.
History GitLab 15.4에서 도입됨 . 설명 # 파티셔닝할 테이블에 파티셔닝 키 칼럼을 추가합니다. 파티셔닝 키를 다음 제약 조건에 포함해야 합니다: 기본 키(primary key). 파티셔닝할 테이블을 참조하는 모든 외래 키(foreign key). 모든 유니크 제약 조건. 예시 # Step 1 - 파티션 키 추가 # 파티셔닝 키 칼럼을 추가합니다. 예를 들어, Rails 마이그레이션에서: class AddPartitionNumberForPartitioning < Gitlab::Database::Migration[2.1] TABLE_NAME = :table_name COLUMN_NAME = :partition_id DEFAULT_VALUE = 100 def change add_column(TABLE_NAME, COLUMN_NAME, :bigint, default: 100) end end Step 2 - 필요한 인덱스 생성 # 파티셔닝 키 칼럼을 포함하는 인덱스를 추가합니다. 예를 들어, Rails 마이그레이션에서: class PrepareIndexesForPartitioning < Gitlab::Database::Migration[2.1] disable_ddl_transaction! TABLE_NAME = :table_name INDEX_NAME = :index_name def up add_concurrent_index(TABLE_NAME, [:id, :partition_id], unique: true, name: INDEX_NAME) end def down remove_concurrent_index_by_name(TABLE_NAME, INDEX_NAME) end end Step 3 - 유니크 제약 조건 적용 # 기본 키 인덱스를 포함하여 모든 유니크 인덱스에 파티셔닝 키 칼럼을 포함하도록 변경합니다. [primary_key_column, :partition_id] 에 대한 유니크 인덱스를 먼저 추가하는 것으로 시작할 수 있으며, 이는 다음 두 단계에 필요합니다. 예를 들어, Rails 마이그레이션에서: class PrepareUniqueContraintForPartitioning < Gitlab::Database::Migration[2.1] disable_ddl_transaction! TABLE_NAME = :table_name OLD_UNIQUE_INDEX_NAME = :index_name_unique NEW_UNIQUE_INDEX_NAME = :new_index_name def up add_concurrent_index(TABLE_NAME, [:id, :partition_id], unique: true, name: NEW_UNIQUE_INDEX_NAME) remove_concurrent_index_by_name(TABLE_NAME, OLD_UNIQUE_INDEX_NAME) end def down add_concurrent_index(TABLE_NAME, :id, unique: true, nam