InfoGrab Docs

백그라운드 작업(Background operations)

백그라운드 작업(Background operations)에 대해 설명합니다.

백그라운드 작업은 GitLab 데이터베이스에서 대규모 데이터 작업을 수행하기 위한 프레임워크를 제공합니다. 업그레이드 중에 한 번 완료될 때까지 실행되는 일괄 백그라운드 마이그레이션 (BBM)과 달리, 백그라운드 작업은 반복되는 크론 스케줄 실행과 .enqueue API를 통한 온디맨드 프로그래밍 방식 실행을 모두 지원합니다. 릴리스에 연결된 일회성 데이터 마이그레이션의 경우 대신 일괄 백그라운드 마이그레이션 을 사용하세요. 백그라운드 작업을 사용해야 할 때 # 단일 실행 창 내에서 완료할 수 없는 큰 테이블에서 데이터 작업을 수행해야 할 때 백그라운드 작업을 사용합니다. 백그라운드 작업이 적합한 경우: 반복 스케줄로 행을 삭제하거나 업데이트할 때 (예: 오래된 데이터 제거). 업그레이드 중에만이 아닌 지속적으로 실행되어야 하는 지속적인 데이터 정리를 수행할 때. 애플리케이션 코드에서 프로그래밍 방식으로 일회성 대규모 데이터 작업을 트리거할 때. 단일 패스가 안전한 실행 시간을 초과하는 트래픽이 많은 테이블 에서 작업할 때. 스키마 변경이나 일반 마이그레이션 시간 제한 내에 완료될 수 있는 작업에는 백그라운드 작업을 사용하지 마세요 . 백그라운드 작업 작동 방식 # 백그라운드 작업은 perform 메서드를 정의하는 Gitlab::BackgroundOperation::BaseOperationWorker 의 서브클래스입니다. 작업은 두 가지 방법으로 스케줄할 수 있습니다: 크론 기반 : 크론 작업( Database::BackgroundOperation::CronEnqueueWorker )이 구성된 스케줄로 작업을 트리거합니다. 온디맨드 : 애플리케이션 코드가 Worker.enqueue 를 호출하여 프로그래밍 방식으로 작업을 생성하고 실행합니다. 각 호출은 커서 기반 키셋 반복을 사용하여 행의 배치를 처리하고, 마지막 실행이 중단된 위치부터 계속하며, 사용자 정의 로직에 서브배치를 넘겨줍니다. 모든 작업 클래스는 Gitlab::BackgroundOperation 네임스페이스에 정의되어야 합니다. 파일은 lib/gitlab/background_operation/ 디렉토리에 배치합니다. 실행 메커니즘 # 백그라운드 작업은 BBM과 동일한 실행 파이프라인을 따릅니다 (Scheduler → Orchestrator → Runner → Executor). 자세한 내용은 BBM 실행 메커니즘 을 참조하세요. 주요 차이점은 백그라운드 작업이 기본 키 범위 배치 대신 커서 기반 키셋 페이지네이션을 사용한다는 것입니다. 워커 테이블은 잠금 없는 동시 실행을 위해 리스트 파티셔닝됩니다. 완료되지 않은 상태에 대한 부분 고유 인덱스는 동일한 구성으로 중복 작업이 생성되는 것을 방지합니다. 조직 범위 및 셀 로컬 테이블 # 두 가지 테이블 변형이 있습니다: background_operation_workers 는 조직 범위 작업을 저장합니다. 이 레코드는 organization_id 와 user_id 가 필요하며, 사용자가 작업을 트리거할 때 생성됩니다 (예: use