병합 요청 차이 저장
병합 요청 차이는 병합 요청과 관련된 차이의 크기 제한된 복사본입니다. 병합 요청을 볼 때, 성능 최적화를 위해 가능한 경우 이러한 복사본에서 차이를 가져옵니다.
기본적으로 병합 요청 차이는 데이터베이스에 저장되며, 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과 함께 객체 저장소 사용에 대해 더 알아보세요.
오브젝트 저장소 설정
통합 오브젝트 저장소 설정을 사용해야 합니다.
대체 데이터베이스 내 저장소
외부 diff를 활성화하면 병합 요청의 성능이 저하될 수 있습니다. 다른 데이터와 별도의 작업으로 검색해야 하기 때문입니다. 오래된 diff만 외부에 저장하고 현재 diff는 데이터베이스에 유지하여 타협을 이룰 수 있습니다.
이 기능을 활성화하려면 다음 단계를 수행하십시오:
-
/etc/gitlab/gitlab.rb
를 편집하고 다음 줄을 추가합니다:gitlab_rails['external_diffs_when'] = 'outdated'
-
파일을 저장하고 변경 사항이 적용되도록 GitLab 재구성을 수행합니다.
-
/home/git/gitlab/config/gitlab.yml
을 편집하고 다음 줄을 추가하거나 수정합니다:external_diffs: enabled: true when: outdated
-
파일을 저장하고 변경 사항이 적용되도록 GitLab 재시작을 수행합니다.
이 기능이 활성화되면, diff는 처음에 데이터베이스에 저장되며, 외부에 저장되지 않습니다. 다음 조건이 true가 되면 외부 저장소로 이동됩니다:
- 더 새로운 버전의 병합 요청 diff가 존재함
- 병합 요청이 7일 이상 전에 병합됨
- 병합 요청이 7일 이상 전에 닫힘
이 규칙은 자주 접근되는 diff만 데이터베이스에 저장함으로써 공간과 성능의 균형을 맞춥니다. 접근 가능성이 낮은 diff는 대신 외부 저장소로 이동됩니다.
외부 저장소에서 오브젝트 저장소로 전환
자동 마이그레이션은 데이터베이스에 저장된 diff를 이동하지만, 저장소 유형 간의 diff는 이동하지 않습니다. 외부 저장소에서 오브젝트 저장소로 전환하려면:
- 로컬 또는 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
로 설정해야 합니다.