데이터베이스 이전 파이프라인

자동 이관 테스트 파이프라인을 통해 Database Lab을 사용하여 프로덕션과 유사한 환경에서 이관을 자동으로 테스트할 수 있습니다. 이는 아키텍처 청사진에 기반을 두고 있습니다.

새로운 데이터베이스 이전을 추가하는 변경 내용에 대해 GitLab 프로젝트에서 이관 테스트가 활성화됩니다. MR(병합 요청)이 검토를 위해 준비된 경우 수동으로 test 단계 내에서 db:gitlabcom-database-testing 작업을 실행하여 이 작업을 트리거합니다. 자원을 낭비하지 않기 위해 MR이 검토를 위해 준비된 경우에만 이 작업을 실행하세요. 또한, 파이프라인이 테스트 단계에 표시되려면 MR에 “database” 라벨이 있는지 확인하세요.

작업은 ops GitLab 인스턴스에서 파이프라인을 시작합니다. 보안 상의 이유로 파이프라인에 대한 액세스 권한은 데이터베이스 유지 보수 담당자로 제한됩니다.

파이프라인이 시작되면 봇이 MR에 대한 코멘트로 알립니다. 완료되면 테스트 결과가 업데이트된 코멘트로 바뀝니다.

코멘트에는 mainci 데이터베이스에 대한 테스트 정보가 포함되어 있습니다. 각 테스트된 데이터베이스에는 아래에서 설명하는 네 가지 섹션이 있습니다.

요약

코멘트의 첫 번째 섹션에는 다음을 포함하여 테스트 결과에 대한 요약이 포함되어 있습니다:

  • 경고 - 예외 또는 실행 시간이 긴 쿼리와 같은 중요한 문제를 강조합니다.
  • 이관 작업 - 각 이전 작업이 완료된 데 걸린 시간, 성공 여부 및 데이터베이스 크기 증가량을 표시합니다.
  • 런타임 히스토그램 - 이 섹션을 확장하여 모든 마이그레이션을 통해 실행된 쿼리 실행시간의 히스토그램을 볼 수 있습니다.

이전 작업 세부정보

코멘트의 다음 섹션에는 각 이관 작업에 대한 상세 정보가 포함되어 있습니다. 이 정보에는 다음이 포함됩니다:

  • 세부 사항 - 이전 작업의 유형, 총 기간 및 데이터베이스 크기 변화가 포함됩니다.
  • 쿼리 - 이전 작업 중에 실행된 모든 쿼리와 호출 횟수, 실행 시간 및 변경된 행 수가 함께 표시됩니다.
  • 런타임 히스토그램 - 이전 작업에 대한 쿼리 실행 시간의 분포를 보여줍니다.

데이터베이스 크기 증가

가끔씩 이관 작업이 예상하지 않은 데이터베이스 크기 증가로 인해 +8.00 KiB의 크기 증가를 보일 수 있습니다. 이관이 완료되면 schema_migrations 테이블에 하나의 행이 추가되는데, 이로 인해 새로운 디스크 페이지가 생성될 수 있습니다. 새로운 디스크 페이지가 생성된 경우 데이터베이스 크기는 정확히 8 KiB 증가합니다.

배경 이전 작업 세부정보

코멘트의 다음 섹션에는 각 배치된 배경 이전 작업에 대한 상세 정보가 포함되어 있습니다. 이 정보에는 다음이 포함됩니다:

  • 샘플링 정보 - 테스트 실행 중에 샘플링된 배치 수량입니다. 샘플링된 배치는 테이블 ID 범위 전체에서 균일하게 선택됩니다. 샘플링은 각 배경 이전 작업의 테스트에 30분 동안 분할되어 진행됩니다.
  • 집계된 쿼리 정보 - 샘플링된 배치 전체에서 실행된 각 쿼리에 대한 집계 데이터 및 호출 횟수, 실행 시간 및 변경된 행 수가 함께 표시됩니다.
  • 배치 런타임 히스토그램 - 배경 이전 작업의 각 샘플링된 배치에 대한 실행 시간의 히스토그램입니다.
  • 쿼리 런타임 히스토그램 - 이 배경 이전 작업의 임의 배치에서 실행된 모든 쿼리에 대한 실행 시간의 히스토그램입니다.

복제 세부정보 및 아티팩트

코멘트의 하단에는 몇 가지 추가 정보가 포함되어 있습니다:

  • GitLab.com에 대기 중인 이전 작업 - 아직 GitLab.com에 배포되지 않은 이전 작업에 대한 요약이 포함됩니다. 병합된 이전 작업을 테스트하는 경우 이 정보가 유용합니다.
  • 복제 세부정보 - 이 테스트 파이프라인을 위해 생성된 Postgres.ai 씬 클론에 대한 링크 및 만료 정보가 포함되어 있습니다. 이를 통해 이전 작업 실행 결과를 자세히 살펴볼 수 있습니다. 데이터베이스 유지 보수 담당자만이나 액세스 요청으로만 이용 가능합니다.
  • 아티팩트 - 파이프라인의 아티팩트에 대한 링크입니다. 각 이전 작업에 대한 전체 쿼리 로그(확장자 .log)는 여기에서 사용 가능하며, 데이터베이스 유지 보수 담당자만이나 액세스 요청으로만 이용 가능합니다. 특정 배치된 배경 이전 작업의 샘플링된 배치에 대한 세부 정보도 여기에서 사용 가능합니다.

데이터베이스 테스트 파이프라인의 변경 사항 테스트

데이터베이스 테스트 파이프라인의 변경 사항을 테스트하려면 다음이 필요합니다:

  1. GitLab Org에 대한 병합 요청.
  2. 테스트할 변경 사항은 GitLab Ops의 브랜치에 있어야 합니다.

GitLab Org의 병합 요청에 대한 GitLab Ops의 임의의 브랜치에서 테스트를 실행하려면 다음과 같은 자체 설명된 스크립트를 사용하세요:

#! /usr/bin/env bash

# 다음은 각 호출에 대해 설정해야 합니다:
TESTING_TRIGGER_TOKEN='[REDACTED]'              # 프로젝트의 CI 섹션에서 생성된 테스트 트리거 토큰
CI_COMMIT_REF_NAME='55-post-notice-on-failure'  # 실행 대상인 ops의 브랜치
CI_MERGE_REQUEST_IID='117901'                   # 테스트하려는 gitlab.com의 MR(병합 요청) ID
SHA="fed6dd8a58d75a0e053a4972765b4fc08c5814a3"  # gitlab-org/gitlab의 테스트하려는 브랜치 HEAD의 커밋 SHA

# 다음의 경우는 각 호출 사이에서 변경되어서는 안 됩니다:
CI_JOB_URL='https://gitlab.com/gitlab-org/database-team/gitlab-com-database-testing/-/jobs/1590162939'
# 이 URL을 특정하게 설정해야만 파이프라인이 성공적으로 실행되는 것으로 보이지는 않지만, 일반적으로 DB 테스트 파이프라인을 호출하는 상위 작업의 URL일 것입니다.
CI_MERGE_REQUEST_PROJECT_ID='278964'    # gitlab-org/gitlab의 숫자 ID. 변경되어서는 안 됩니다.
CI_PROJECT_ID="gitlab-org/gitlab"       # gitlab-org/gitlab을 식별하는 슬러그. 변경되어서는 안 됩니다.

curl --verbose --request POST \
     --form "token=$TESTING_TRIGGER_TOKEN" \
     --form "ref=$CI_COMMIT_REF_NAME" \
     --form "variables[TOP_UPSTREAM_MERGE_REQUEST_IID]=$CI_MERGE_REQUEST_IID" \
     --form "variables[TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID]=$CI_MERGE_REQUEST_PROJECT_ID" \
     --form "variables[TOP_UPSTREAM_SOURCE_JOB]=$CI_JOB_URL" \
     --form "variables[TOP_UPSTREAM_SOURCE_PROJECT]=$CI_PROJECT_ID" \
     --form "variables[VALIDATION_PIPELINE]=true" \
     --form "variables[GITLAB_COMMIT_SHA]=$SHA" \
     --form "variables[TRIGGER_SOURCE]=$CI_JOB_URL" \
     "https://ops.gitlab.net/api/v4/projects/429/trigger/pipeline"