병합 요청 차이점 저장소
병합 요청 차이점은 병합 요청과 관련된 차이점의 크기 제한된 복사본입니다. 병합 요청을 보는 경우 성능 최적화를 위해 가능한 경우 이러한 복사본에서 변경 내용이 가져옵니다.
기본적으로 병합 요청 차이점은 데이터베이스의 merge_request_diff_files
테이블에 저장됩니다. 그러나 대형 설치에서는 이 테이블이 너무 커진다고 느낄 수 있으며, 이 경우 외부 저장소로 전환하는 것이 권장됩니다.
병합 요청 차이점은 디스크에 또는 객체 저장소에 저장할 수 있습니다. 일반적으로 디스크보다 데이터베이스에 차이점을 저장하는 것이 좋습니다. 데이터베이스 바깥쪽에만 오래된 차이점을 저장하는 대신에 이러한 정책을 조정할 수 있습니다.
외부 저장소 사용하기
-
/etc/gitlab/gitlab.rb
파일을 편집하고 다음 라인을 추가합니다:gitlab_rails['external_diffs_enabled'] = true
-
외부 차이점은
/var/opt/gitlab/gitlab-rails/shared/external-diffs
에 저장됩니다. 경로를 변경하려면 예를 들어/mnt/storage/external-diffs
로 변경하려면/etc/gitlab/gitlab.rb
파일을 편집하고 다음 라인을 추가합니다:gitlab_rails['external_diffs_storage_path'] = "/mnt/storage/external-diffs"
-
파일을 저장하고 변경 사항이 적용되게 하려면 GitLab 재구성을 실행합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이전합니다.
-
/home/git/gitlab/config/gitlab.yml
파일을 편집하고 다음 라인을 추가하거나 수정합니다:external_diffs: enabled: true
-
외부 차이점은
/home/git/gitlab/shared/external-diffs
에 저장됩니다. 경로를 변경하려면 예를 들어/mnt/storage/external-diffs
로 변경하려면/home/git/gitlab/config/gitlab.yml
파일을 편집하고 다음 라인을 추가하거나 수정합니다:external_diffs: enabled: true storage_path: /mnt/storage/external-diffs
-
파일을 저장하고 변경 사항이 적용되게 하려면 GitLab 재시작을 실행합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이전합니다.
객체 저장소 사용하기
경고: 객체 저장소로 이동하는 것은 되돌릴 수 없습니다.
외부 차이점을 디스크에 저장하는 대신 AWS S3와 같은 객체 저장소의 사용을 권장합니다. 이 구성은 이미 유효한 AWS 자격 증명에 의존합니다.
-
/etc/gitlab/gitlab.rb
파일을 편집하고 다음 라인을 추가합니다:gitlab_rails['external_diffs_enabled'] = true
- 객체 저장소 설정을 합니다.
- 파일을 저장하고 변경 사항이 적용되게 하려면 GitLab 재구성을 실행합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이전합니다.
-
/home/git/gitlab/config/gitlab.yml
파일을 편집하고 다음 라인을 추가하거나 수정합니다:external_diffs: enabled: true
- 객체 저장소 설정을 합니다.
- 파일을 저장하고 변경 사항이 적용되게 하려면 GitLab 재시작을 실행합니다. 그러면 GitLab이 기존의 병합 요청 차이점을 외부 저장소로 이전합니다.
GitLab과 객체 저장소를 함께 사용하는 방법에 대해 더 알아보기.
객체 저장소 설정
객체 유형에 대한 단일 저장소 연결 설정을 사용해야 합니다.
대체 데이터베이스 저장
외부 차이점을 활성화하면 병합 요청의 성능이 저하될 수 있으며, 이는 다른 데이터와 별도로 검색해야 하기 때문입니다. 현재의 차이점을 데이터베이스에 유지하면서 오래된 차이점만 외부에 저장하는 방안을 고려할 수 있습니다.
이 기능을 활성화하려면 다음 단계를 수행합니다:
-
/etc/gitlab/gitlab.rb
파일을 편집하고 다음 라인을 추가합니다:gitlab_rails['external_diffs_when'] = 'outdated'
-
파일을 저장하고 변경 사항이 적용되게 하려면 GitLab 재구성을 실행합니다.
-
/home/git/gitlab/config/gitlab.yml
파일을 편집하고 다음 라인을 추가하거나 수정합니다:external_diffs: enabled: true when: outdated
-
파일을 저장하고 변경 사항이 적용되게 하려면 GitLab 재시작을 실행합니다.
이 기능을 활성화하면 차이점은 처음에는 데이터베이스에 저장되며, 다음 조건 중 어느 것이든 충족되면 외부 저장소로 이동됩니다:
- 병합 요청의 더 새로운 버전이 있음
- 병합 요청이 7일 이상 전에 병합됨
- 병합 요청이 7일 이상 전에 닫힘
이러한 규칙은 데이터베이스에 자주 액세스되는 차이점만 저장함으로써 공간과 성능 사이의 균형을 유지합니다. 자주 액세스되지 않을 것으로 보이는 차이점은 대신 외부 저장소로 이동됩니다.
외부 저장소에서 객체 저장소로 전환
자동으로 이동됩니다. 그러나 스토리지 유형 사이의 차이점은 이동되지 않습니다.
외부 저장소에서 객체 저장소로 전환하려면:
- 로컬 또는 NFS 저장소에 저장된 파일을 수동으로 객체 저장소로 이동합니다.
-
데이터베이스에서 이들의 위치를 변경하려면 다음 Rake 작업을 실행합니다.
Linux 패키지 설치의 경우:
sudo gitlab-rake gitlab:external_diffs:force_object_storage
직접 컴파일 설치의 경우:
sudo -u git -H bundle exec rake gitlab:external_diffs:force_object_storage RAILS_ENV=production
기본적으로
sudo
는 기존 환경 변수를 유지하지 않습니다. 기존 환경 변수를 대체하고 아래와 같이 접두사가 아닌 접미사로 추가해야 합니다:sudo gitlab-rake gitlab:external_diffs:force_object_storage START_ID=59946109 END_ID=59946109 UPDATE_DELAY=5
이 환경 변수는 Rake 작업의 동작을 수정합니다:
이름 기본값 목적 ANSI
true
출력 내용을 이해하기 쉽게 만들기 위해 ANSI 이스케이프 코드를 사용합니다. BATCH_SIZE
1000
이 크기의 일괄처리로 테이블을 반복합니다. START_ID
nil
설정하면 이 ID에서 스캔을 시작합니다. END_ID
nil
설정하면 이 ID에서 스캔을 중단합니다. UPDATE_DELAY
1
갱신 사이에 잠들 시간(초)입니다. -
START_ID
및END_ID
는 표를 병렬로 실행하여 병렬로 실행할 수 있습니다. -BATCH
및UPDATE_DELAY
는 테이블에 대한 동시 액세스와의 속도를 교환할 수 있습니다. - ANSI는 터미널이 ANSI 이스케이프 코드를 지원하지 않는 경우에는false
로 설정해야 합니다.
-
::EndTabs