InfoGrab DocsInfoGrab Docs

데이터베이스 마이그레이션 파이프라인

요약

자동화된 마이그레이션 테스트 파이프라인을 사용하면 (Database Lab을 활용해) 프로덕션에 가까운 환경에서 마이그레이션을 자동으로 테스트할 수 있습니다. 마이그레이션 테스트는 새 데이터베이스 마이그레이션을 추가하는 변경 사항에 대해 GitLab 프로젝트에서 활성화되어 있습니다.

자동화된 마이그레이션 테스트 파이프라인을 사용하면 (Database Lab을 활용해) 프로덕션에 가까운 환경에서 마이그레이션을 자동으로 테스트할 수 있습니다. 이 파이프라인은 아키텍처 설계 문서를 기반으로 합니다.

마이그레이션 테스트는 새 데이터베이스 마이그레이션을 추가하는 변경 사항에 대해 GitLab 프로젝트에서 활성화되어 있습니다. test Stage의 db:gitlabcom-database-testing job을 실행하여 이 job을 수동으로 트리거합니다. 리소스 낭비를 막기 위해 MR 이 리뷰 준비가 되었을 때만 이 job을 실행합니다. 또한 파이프라인이 test Stage에 나타나려면 MR에 "database" 레이블이 있어야 합니다.

이 job은 ops GitLab 인스턴스에서 파이프라인을 시작합니다. 보안상의 이유로 이 파이프라인에는 데이터베이스 유지 관리자만 접근할 수 있습니다.

파이프라인이 시작되면 봇이 머지 리퀘스트에 코멘트로 알립니다. 파이프라인이 끝나면 해당 코멘트가 테스트 결과로 업데이트됩니다.

이 코멘트에는 main 데이터베이스와 ci 데이터베이스 모두에 대한 테스트 정보가 담깁니다. 테스트한 각 데이터베이스마다 네 개의 섹션이 있으며, 아래에서 설명합니다.

요약#

코멘트의 첫 번째 섹션에는 테스트 결과 요약이 담기며 다음을 포함합니다.

  • Warnings - 예외나 장시간 실행 쿼리 같은 중대한 문제를 표시합니다.
  • Migrations - 각 마이그레이션에 걸린 시간, 성공 여부, 데이터베이스 크기 증가량을 보여 줍니다.
  • Runtime histogram - 이 섹션을 확장하면 모든 마이그레이션에 걸친 쿼리 실행 시간 히스토그램을 볼 수 있습니다.

마이그레이션 세부 정보#

코멘트의 다음 섹션에는 각 마이그레이션에 대한 상세 정보가 담기며 다음을 포함합니다.

  • Details - 마이그레이션 유형, 총 소요 시간, 데이터베이스 크기 변화입니다.
  • Queries - 마이그레이션 중 실행된 모든 쿼리와 호출 횟수, 소요 시간, 변경된 행 수입니다.
  • Runtime histogram - 해당 마이그레이션의 쿼리 시간 분포를 보여 줍니다.

데이터베이스 크기 증가#

크기가 늘어날 것으로 예상되지 않는 마이그레이션에서도 이따금 +8.00 KiB 증가가 표시됩니다. 마이그레이션이 완료되면 schema_migrations 테이블에 행이 추가되는데, 이때 새 디스크 페이지가 생성되어야 할 수 있습니다. 새 디스크 페이지가 생성되면 데이터베이스 크기가 정확히 8 KiB 늘어납니다.

백그라운드 마이그레이션 세부 정보#

코멘트의 다음 섹션에는 배치 백그라운드 마이그레이션 각각에 대한 상세 정보가 담기며 다음을 포함합니다.

  • Sampling information - 이번 테스트 실행에서 샘플링한 배치 수입니다. 샘플링된 배치는 테이블의 ID 범위 전체에서 고르게 선택됩니다. 샘플링은 30 분 동안 실행되며, 테스트할 각 백그라운드 마이그레이션에 균등하게 배분됩니다.
  • Aggregated query information - 샘플링된 모든 배치에서 실행된 각 쿼리에 대한 집계 데이터와 호출 횟수, 소요 시간, 변경된 행 수입니다.
  • Batch runtime histogram - 해당 백그라운드 마이그레이션에서 샘플링된 각 배치의 소요 시간 히스토그램입니다.
  • Query runtime histogram - 해당 백그라운드 마이그레이션의 모든 배치에서 실행된 전체 쿼리의 소요 시간 히스토그램입니다.

클론 세부 정보 및 아티팩트#

코멘트 하단에는 다음과 같은 추가 정보가 포함됩니다.

  • Migrations pending on GitLab.com - 아직 GitLab.com에 배포되지 않은 마이그레이션 요약입니다. 병합되었지만 아직 배포되지 않은 마이그레이션을 테스트할 때 유용합니다.
  • Clone details - 이 테스트 파이프라인을 위해 생성된 Postgres.ai 씬 클론 링크와 만료 정보입니다. 마이그레이션 실행 결과를 더 살펴보는 데 사용할 수 있습니다. 데이터베이스 유지 관리자이거나 접근 요청을 거친 경우에만 접근할 수 있습니다.
  • Artifacts - 파이프라인 아티팩트 링크입니다. 각 마이그레이션의 전체 쿼리 로그(.log로 끝나는 파일)를 여기에서 볼 수 있으며, 데이터베이스 유지 관리자이거나 접근 요청을 거친 경우에만 접근할 수 있습니다. 샘플링된 배치 백그라운드 마이그레이션 배치의 세부 정보도 함께 제공됩니다.

커밋 상태 확인#

트리거 job은 머지 리퀘스트 커밋 SHA에 database-testing 커밋 상태도 게시합니다. 이 상태는 머지 리퀘스트 파이프라인 화면의 별도 external Stage에 표시됩니다.

이 상태는 세 단계를 거칩니다.

  • pending: db:gitlabcom-database-testing job 이 ops.gitlab.net의 다운스트림 파이프라인을 트리거할 때 게시합니다.
  • success: 모든 job 이 성공하면 다운스트림 파이프라인이 게시합니다.
  • failed: 하나 이상의 job 이 실패하면 다운스트림 파이프라인이 게시합니다.

상태가 success로 정리되기 전에는 머지 리퀘스트를 병합할 수 없습니다.

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

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

  1. GitLab Org에 대한 머지 리퀘스트.
  2. 테스트할 변경 사항이 GitLab Ops의 브랜치에 있어야 합니다.

GitLab Ops의 임의 브랜치를 대상으로 GitLab Org의 머지 리퀘스트를 테스트하려면 다음의 자체 설명형 스크립트를 사용합니다.

#! /usr/bin/env bash

# The following must be set on a per-invocation basis:
TESTING_TRIGGER_TOKEN='[REDACTED]'              # Testing trigger token created in the CI section of the project
CI_COMMIT_REF_NAME='55-post-notice-on-failure'  # The branch on ops that you want to run against
CI_MERGE_REQUEST_IID='117901'                   # Merge request ID of the MR on gitlab.com that you want to test
SHA="fed6dd8a58d75a0e053a4972765b4fc08c5814a3"  # The commit SHA of the HEAD of the branch you want to test on gitlab-org/gitlab

# The following should not be changed between invocations:
CI_JOB_URL='https://gitlab.com/gitlab-org/database-team/gitlab-com-database-testing/-/jobs/1590162939'
# It doesn't appear that CI_JOB_URL has to be set to anything in particular for the pipeline to run
# successfully, but this would usually be the URL to the upstream job that invokes the DB testing pipeline.
CI_MERGE_REQUEST_PROJECT_ID='278964'    # gitlab-org/gitlab numeric ID. Shouldn't change.
CI_PROJECT_ID="gitlab-org/gitlab"       # The slug identifying 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"

데이터베이스 마이그레이션 파이프라인

GitLab v19.4
원문 보기

요약

자동화된 마이그레이션 테스트 파이프라인을 사용하면 (Database Lab을 활용해) 프로덕션에 가까운 환경에서 마이그레이션을 자동으로 테스트할 수 있습니다. 마이그레이션 테스트는 새 데이터베이스 마이그레이션을 추가하는 변경 사항에 대해 GitLab 프로젝트에서 활성화되어 있습니다.

자동화된 마이그레이션 테스트 파이프라인을 사용하면 (Database Lab을 활용해) 프로덕션에 가까운 환경에서 마이그레이션을 자동으로 테스트할 수 있습니다. 이 파이프라인은 아키텍처 설계 문서를 기반으로 합니다.

마이그레이션 테스트는 새 데이터베이스 마이그레이션을 추가하는 변경 사항에 대해 GitLab 프로젝트에서 활성화되어 있습니다. test Stage의 db:gitlabcom-database-testing job을 실행하여 이 job을 수동으로 트리거합니다. 리소스 낭비를 막기 위해 MR 이 리뷰 준비가 되었을 때만 이 job을 실행합니다. 또한 파이프라인이 test Stage에 나타나려면 MR에 "database" 레이블이 있어야 합니다.

이 job은 ops GitLab 인스턴스에서 파이프라인을 시작합니다. 보안상의 이유로 이 파이프라인에는 데이터베이스 유지 관리자만 접근할 수 있습니다.

파이프라인이 시작되면 봇이 머지 리퀘스트에 코멘트로 알립니다. 파이프라인이 끝나면 해당 코멘트가 테스트 결과로 업데이트됩니다.

이 코멘트에는 main 데이터베이스와 ci 데이터베이스 모두에 대한 테스트 정보가 담깁니다. 테스트한 각 데이터베이스마다 네 개의 섹션이 있으며, 아래에서 설명합니다.

요약#

코멘트의 첫 번째 섹션에는 테스트 결과 요약이 담기며 다음을 포함합니다.

  • Warnings - 예외나 장시간 실행 쿼리 같은 중대한 문제를 표시합니다.
  • Migrations - 각 마이그레이션에 걸린 시간, 성공 여부, 데이터베이스 크기 증가량을 보여 줍니다.
  • Runtime histogram - 이 섹션을 확장하면 모든 마이그레이션에 걸친 쿼리 실행 시간 히스토그램을 볼 수 있습니다.

마이그레이션 세부 정보#

코멘트의 다음 섹션에는 각 마이그레이션에 대한 상세 정보가 담기며 다음을 포함합니다.

  • Details - 마이그레이션 유형, 총 소요 시간, 데이터베이스 크기 변화입니다.
  • Queries - 마이그레이션 중 실행된 모든 쿼리와 호출 횟수, 소요 시간, 변경된 행 수입니다.
  • Runtime histogram - 해당 마이그레이션의 쿼리 시간 분포를 보여 줍니다.

데이터베이스 크기 증가#

크기가 늘어날 것으로 예상되지 않는 마이그레이션에서도 이따금 +8.00 KiB 증가가 표시됩니다. 마이그레이션이 완료되면 schema_migrations 테이블에 행이 추가되는데, 이때 새 디스크 페이지가 생성되어야 할 수 있습니다. 새 디스크 페이지가 생성되면 데이터베이스 크기가 정확히 8 KiB 늘어납니다.

백그라운드 마이그레이션 세부 정보#

코멘트의 다음 섹션에는 배치 백그라운드 마이그레이션 각각에 대한 상세 정보가 담기며 다음을 포함합니다.

  • Sampling information - 이번 테스트 실행에서 샘플링한 배치 수입니다. 샘플링된 배치는 테이블의 ID 범위 전체에서 고르게 선택됩니다. 샘플링은 30 분 동안 실행되며, 테스트할 각 백그라운드 마이그레이션에 균등하게 배분됩니다.
  • Aggregated query information - 샘플링된 모든 배치에서 실행된 각 쿼리에 대한 집계 데이터와 호출 횟수, 소요 시간, 변경된 행 수입니다.
  • Batch runtime histogram - 해당 백그라운드 마이그레이션에서 샘플링된 각 배치의 소요 시간 히스토그램입니다.
  • Query runtime histogram - 해당 백그라운드 마이그레이션의 모든 배치에서 실행된 전체 쿼리의 소요 시간 히스토그램입니다.

클론 세부 정보 및 아티팩트#

코멘트 하단에는 다음과 같은 추가 정보가 포함됩니다.

  • Migrations pending on GitLab.com - 아직 GitLab.com에 배포되지 않은 마이그레이션 요약입니다. 병합되었지만 아직 배포되지 않은 마이그레이션을 테스트할 때 유용합니다.
  • Clone details - 이 테스트 파이프라인을 위해 생성된 Postgres.ai 씬 클론 링크와 만료 정보입니다. 마이그레이션 실행 결과를 더 살펴보는 데 사용할 수 있습니다. 데이터베이스 유지 관리자이거나 접근 요청을 거친 경우에만 접근할 수 있습니다.
  • Artifacts - 파이프라인 아티팩트 링크입니다. 각 마이그레이션의 전체 쿼리 로그(.log로 끝나는 파일)를 여기에서 볼 수 있으며, 데이터베이스 유지 관리자이거나 접근 요청을 거친 경우에만 접근할 수 있습니다. 샘플링된 배치 백그라운드 마이그레이션 배치의 세부 정보도 함께 제공됩니다.

커밋 상태 확인#

트리거 job은 머지 리퀘스트 커밋 SHA에 database-testing 커밋 상태도 게시합니다. 이 상태는 머지 리퀘스트 파이프라인 화면의 별도 external Stage에 표시됩니다.

이 상태는 세 단계를 거칩니다.

  • pending: db:gitlabcom-database-testing job 이 ops.gitlab.net의 다운스트림 파이프라인을 트리거할 때 게시합니다.
  • success: 모든 job 이 성공하면 다운스트림 파이프라인이 게시합니다.
  • failed: 하나 이상의 job 이 실패하면 다운스트림 파이프라인이 게시합니다.

상태가 success로 정리되기 전에는 머지 리퀘스트를 병합할 수 없습니다.

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

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

  1. GitLab Org에 대한 머지 리퀘스트.
  2. 테스트할 변경 사항이 GitLab Ops의 브랜치에 있어야 합니다.

GitLab Ops의 임의 브랜치를 대상으로 GitLab Org의 머지 리퀘스트를 테스트하려면 다음의 자체 설명형 스크립트를 사용합니다.

#! /usr/bin/env bash

# The following must be set on a per-invocation basis:
TESTING_TRIGGER_TOKEN='[REDACTED]'              # Testing trigger token created in the CI section of the project
CI_COMMIT_REF_NAME='55-post-notice-on-failure'  # The branch on ops that you want to run against
CI_MERGE_REQUEST_IID='117901'                   # Merge request ID of the MR on gitlab.com that you want to test
SHA="fed6dd8a58d75a0e053a4972765b4fc08c5814a3"  # The commit SHA of the HEAD of the branch you want to test on gitlab-org/gitlab

# The following should not be changed between invocations:
CI_JOB_URL='https://gitlab.com/gitlab-org/database-team/gitlab-com-database-testing/-/jobs/1590162939'
# It doesn't appear that CI_JOB_URL has to be set to anything in particular for the pipeline to run
# successfully, but this would usually be the URL to the upstream job that invokes the DB testing pipeline.
CI_MERGE_REQUEST_PROJECT_ID='278964'    # gitlab-org/gitlab numeric ID. Shouldn't change.
CI_PROJECT_ID="gitlab-org/gitlab"       # The slug identifying 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"