InfoGrab DocsInfoGrab Docs

Database Lab과 Postgres.ai

요약

GitLab 내부 사용자는 복제된 프로덕션 데이터에서 데이터베이스 쿼리 성능을 테스트하기 위해 Database Lab Engine(DLE)과 postgres.ai에 접근할 수 있습니다. Google로 로그인을 선택합니다.

GitLab 내부 사용자는 복제된 프로덕션 데이터에서 데이터베이스 쿼리 성능을 테스트하기 위해 Database Lab Engine(DLE)과 postgres.ai에 접근할 수 있습니다. 일반적인 읽기 전용 프로덕션 복제본과 달리, DLE에서는 행을 생성, 업데이트, 삭제할 수도 있습니다. 또한 프로덕션 데이터의 격리된 복사본에서 추가 인덱스나 칼럼과 같은 스키마 변경 사항의 성능을 테스트할 수 있습니다. 데이터베이스의 새 스냅샷은 일반적으로 4시간마다 생성됩니다.

Database Lab 빠른 시작#

  • 콘솔 방문.

  • Google로 로그인을 선택합니다. (GitLab이 아닌 Google SSO를 사용하여 프로젝트에 연결해야 합니다.)

  • 로그인 후 GitLab 조직을 선택하고 사이드바에서 "Joe Bot"을 선택한 다음 "Ask Joe"를 방문합니다.

  • 테스트할 데이터베이스를 선택합니다:

GitLab 프로젝트의 대부분의 쿼리는 gitlab-production-main에 대해 실행됩니다.

  • CI 테이블에 대한 쿼리인 경우 gitlab-production-ci를 선택합니다.

  • 컨테이너 레지스트리에 대한 쿼리인 경우 gitlab-production-registry를 선택합니다.

  • 채팅 박스에 explain <쿼리 텍스트>를 입력하여 플랜을 가져옵니다.

Database Lab Engine 접근#

DLE 접근은 다음의 경우에 유용합니다:

  • 데이터베이스 리뷰어 및 유지보수 담당자.

  • 데이터베이스에 큰 영향을 주는 머지 리퀘스트를 작업하는 엔지니어.

DLE의 서비스에 접근하려면 다음을 수행할 수 있습니다:

  • Postgres.ai 웹 콘솔에서 쿼리 테스트를 수행합니다. 직원들은 GitLab Google 계정으로 두 서비스 모두에 접근합니다. 쿼리 테스트는 거기서 실행된 쿼리에 대한 EXPLAIN (analyze, buffers) 플랜을 제공합니다.

  • 머지 리퀘스트의 일부로 job을 트리거하여 마이그레이션 테스트를 수행합니다.

  • 프로덕션 복제본 대신 DLE에 직접 psql 접근을 합니다. 승인된 사용자만 사용 가능합니다. psql 접근을 요청하려면 접근 요청을 제출하세요.

추가 도움이 필요하면 #database Slack 채널을 이용하세요.

Database Lab 클론 대신 프로덕션 복제본에 임시로만 접근이 필요한 경우, Teleport를 통한 데이터베이스 콘솔 연결을 위한 런북 절차를 따르세요. 이 절차는 Teleport를 통한 Rails 콘솔 접근과 유사합니다.

쿼리 테스트#

Database Lab의 쿼리 분석 기능에 다음 방법으로 접근할 수 있습니다:

쿼리 플랜 생성#

쿼리 플랜은 데이터베이스 리뷰 프로세스의 필수적인 부분입니다. 이 플랜을 통해 주어진 쿼리가 GitLab.com에서 성능을 발휘할 수 있는지 빠르게 판단할 수 있습니다. explain 명령을 실행하면 explain 플랜과 추가 쿼리 분석이 포함된 Postgres.ai 콘솔 링크가 생성됩니다. 예를 들어 EXPLAIN SELECT * FROM application_settings를 실행하면 다음을 수행합니다:

스키마 변경하기#

쿼리를 테스트하다 보면 추가된 쿼리를 더 효율적으로 만들기 위해 인덱스나 다른 스키마 변경이 필요하다는 것을 깨달을 수 있습니다. 쿼리를 테스트하려면 exec 명령을 실행합니다. 예를 들어 다음 명령을 실행하면:

exec CREATE INDEX on application_settings USING btree (restricted_visibility_levels)

테이블에 지정된 인덱스를 생성합니다. 새 인덱스를 활용하여 쿼리를 테스트할 수 있습니다. exec는 어떤 결과도 반환하지 않으며, 쿼리를 실행하는 데 걸린 시간만 반환합니다.

클론 초기화#

파괴적인 쿼리나 비효율적인 인덱스와 같이 많은 변경을 수행한 후에는 처음부터 다시 시작해야 합니다. 지정된 클론을 초기화하려면 reset을 실행합니다.

인덱스 확인#

Database Lab을 사용하여 메타 명령 \d <index_name>으로 인덱스 상태를 확인합니다.

주의 사항:

  • 인덱스는 mainci 데이터베이스 모두에 생성되므로 테이블의 gitlab_schema에 맞는 인스턴스를 사용해야 합니다. 예를 들어 ci_builds에 인덱스가 추가된 경우 gitlab-production-ci를 사용합니다.

  • Database Lab은 일반적으로 몇 시간의 소폭 지연이 있습니다. 더 최신 정보가 필요한 경우 Teleport를 통해 복제본 접근을 요청할 수 있습니다.

예를 들어 \d index_design_management_designs_on_project_id를 실행하면 다음이 출력됩니다:

Index "public.index_design_management_designs_on_project_id"
   Column   |  Type   | Key? | Definition
------------+---------+------+------------
 project_id | integer | yes  | project_id
btree, for table "public.design_management_designs"

유효하지 않은 인덱스의 경우 출력 끝에 invalid가 붙습니다:

Index "public.index_design_management_designs_on_project_id"
   Column   |  Type   | Key? | Definition
------------+---------+------+------------
 project_id | integer | yes  | project_id
btree, for table "public.design_management_designs", invalid

인덱스가 존재하지 않으면 JoeBot은 다음과 같은 오류를 반환합니다:

ERROR: psql error: psql:/tmp/psql-query-932227396:1: error: Did not find any relation named "no_index".

마이그레이션 테스트#

마이그레이션 테스트에 대한 자세한 내용은 데이터베이스 마이그레이션 테스트 문서를 참조하세요.

psql로 콘솔 접근#

psql로 콘솔에 접근하려면 AllFeaturesUser psql 접근 권한이 있어야 합니다.

데이터베이스 lab 인스턴스에 접근하려면 다음이 필요합니다:

  • SSH 키와 db-lab 권한이 포함된 chef-repo의 사용자 데이터 백 항목이 있어야 합니다. 예시: MR.

  • AllFeaturesUserpostgres.ai에서 부여되는 기본 권한입니다. 아직 없다면 #g_database_frameworks Slack 채널에 게시하고 @db-team을 태그하여 권한을 추가해 달라고 요청하세요.

  • 다음과 같이 ssh를 구성합니다:

Host lb-bastion.db-lab.gitlab.com
  # Typically, the username is `name` in `name@gitlab.com`
  # or your GitLab's username.
  # Check with the access provisioner if it is not working.
  # If not provided, defaults to your system username.
  User YOUR_USERNAME_HERE

  # Path to your SSH key. Adjust or remove if using a different key or SSH agent.
  IdentityFile ~/.ssh/id_ed25519

Host *.gitlab-db-lab.internal
  User YOUR_USERNAME_HERE  # Same as above.
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_ed25519  # Same as above.
  ProxyCommand ssh lb-bastion.db-lab.gitlab.com -W %h:%p

Postgres.ai 인스턴스 페이지를 통한 수동 접근#

psql 접근 권한이 있는 팀원은 psql을 통해 클론에 직접 접근할 수 있습니다. psql 접근을 통해 메타데이터뿐만 아니라 실제 데이터를 볼 수 있습니다.

psql을 사용하여 클론에 연결하려면:

Clone ID를 제공합니다: yourname-testing-gitlabissue와 같이 클론을 고유하게 식별하는 이름을 지정합니다.

  • Database usernameDatabase password를 제공합니다: psql을 클론에 연결합니다.

  • 클론을 유지해야 하는 경우 Enable deletion protection을 선택합니다. 이 옵션 선택은 피하세요. 클론은 12시간 후에 삭제됩니다.

  • Postgres.ai 웹 인터페이스의 Clone details 페이지에서 클론에 대한 SSH 포트 포워딩을 시작하는 명령을 복사하여 실행합니다.

-N 플래그와 함께 명령을 실행하도록 제안될 수 있으며, 이는 셸이 시작되지 않음을 의미하므로 성공적으로 실행되면 어떤 출력도 예상하지 않아야 합니다.

  • 선택적으로 ~/.ssh/configLogLevel DEBUG3을 추가하여 상세한 디버깅 정보를 출력할 수 있습니다.

  • 명령을 실행한 후 포트 포워딩을 활성 상태로 유지하기 위해 실행 중인 상태로 두고, 새 터미널 탭을 열어 다음 단계를 진행합니다.

  • Postgres.ai 웹 인터페이스의 Clone details 페이지에서 psql 연결 문자열을 복사하여 실행합니다. 설정 시 제공한 비밀번호를 사용하고 dbnamegitlabhq_dblab으로 설정합니다(또는 동일한 쿼리 문자열에 dbname=postgres를 사용하여 psql -l로 어떤 데이터베이스가 사용 가능한지 확인합니다).

연결 후에는 격리된 쓰기 가능한 환경의 추가 이점과 안전성을 갖추면서 프로덕션의 psql 콘솔처럼 클론을 사용합니다.

pgai Ruby gem을 통한 간편 접근#

pgai Ruby gem 사용 방법에 대한 안내는 pgai Ruby gem을 사용한 Database Lab 접근을 참조하세요.

Database Lab과 Postgres.ai

GitLab v19.1
원문 보기
요약

GitLab 내부 사용자는 복제된 프로덕션 데이터에서 데이터베이스 쿼리 성능을 테스트하기 위해 Database Lab Engine(DLE)과 postgres.ai에 접근할 수 있습니다. Google로 로그인을 선택합니다.

GitLab 내부 사용자는 복제된 프로덕션 데이터에서 데이터베이스 쿼리 성능을 테스트하기 위해 Database Lab Engine(DLE)과 postgres.ai에 접근할 수 있습니다. 일반적인 읽기 전용 프로덕션 복제본과 달리, DLE에서는 행을 생성, 업데이트, 삭제할 수도 있습니다. 또한 프로덕션 데이터의 격리된 복사본에서 추가 인덱스나 칼럼과 같은 스키마 변경 사항의 성능을 테스트할 수 있습니다. 데이터베이스의 새 스냅샷은 일반적으로 4시간마다 생성됩니다.

Database Lab 빠른 시작#

  • 콘솔 방문.

  • Google로 로그인을 선택합니다. (GitLab이 아닌 Google SSO를 사용하여 프로젝트에 연결해야 합니다.)

  • 로그인 후 GitLab 조직을 선택하고 사이드바에서 "Joe Bot"을 선택한 다음 "Ask Joe"를 방문합니다.

  • 테스트할 데이터베이스를 선택합니다:

GitLab 프로젝트의 대부분의 쿼리는 gitlab-production-main에 대해 실행됩니다.

  • CI 테이블에 대한 쿼리인 경우 gitlab-production-ci를 선택합니다.

  • 컨테이너 레지스트리에 대한 쿼리인 경우 gitlab-production-registry를 선택합니다.

  • 채팅 박스에 explain <쿼리 텍스트>를 입력하여 플랜을 가져옵니다.

Database Lab Engine 접근#

DLE 접근은 다음의 경우에 유용합니다:

  • 데이터베이스 리뷰어 및 유지보수 담당자.

  • 데이터베이스에 큰 영향을 주는 머지 리퀘스트를 작업하는 엔지니어.

DLE의 서비스에 접근하려면 다음을 수행할 수 있습니다:

  • Postgres.ai 웹 콘솔에서 쿼리 테스트를 수행합니다. 직원들은 GitLab Google 계정으로 두 서비스 모두에 접근합니다. 쿼리 테스트는 거기서 실행된 쿼리에 대한 EXPLAIN (analyze, buffers) 플랜을 제공합니다.

  • 머지 리퀘스트의 일부로 job을 트리거하여 마이그레이션 테스트를 수행합니다.

  • 프로덕션 복제본 대신 DLE에 직접 psql 접근을 합니다. 승인된 사용자만 사용 가능합니다. psql 접근을 요청하려면 접근 요청을 제출하세요.

추가 도움이 필요하면 #database Slack 채널을 이용하세요.

Database Lab 클론 대신 프로덕션 복제본에 임시로만 접근이 필요한 경우, Teleport를 통한 데이터베이스 콘솔 연결을 위한 런북 절차를 따르세요. 이 절차는 Teleport를 통한 Rails 콘솔 접근과 유사합니다.

쿼리 테스트#

Database Lab의 쿼리 분석 기능에 다음 방법으로 접근할 수 있습니다:

쿼리 플랜 생성#

쿼리 플랜은 데이터베이스 리뷰 프로세스의 필수적인 부분입니다. 이 플랜을 통해 주어진 쿼리가 GitLab.com에서 성능을 발휘할 수 있는지 빠르게 판단할 수 있습니다. explain 명령을 실행하면 explain 플랜과 추가 쿼리 분석이 포함된 Postgres.ai 콘솔 링크가 생성됩니다. 예를 들어 EXPLAIN SELECT * FROM application_settings를 실행하면 다음을 수행합니다:

스키마 변경하기#

쿼리를 테스트하다 보면 추가된 쿼리를 더 효율적으로 만들기 위해 인덱스나 다른 스키마 변경이 필요하다는 것을 깨달을 수 있습니다. 쿼리를 테스트하려면 exec 명령을 실행합니다. 예를 들어 다음 명령을 실행하면:

exec CREATE INDEX on application_settings USING btree (restricted_visibility_levels)

테이블에 지정된 인덱스를 생성합니다. 새 인덱스를 활용하여 쿼리를 테스트할 수 있습니다. exec는 어떤 결과도 반환하지 않으며, 쿼리를 실행하는 데 걸린 시간만 반환합니다.

클론 초기화#

파괴적인 쿼리나 비효율적인 인덱스와 같이 많은 변경을 수행한 후에는 처음부터 다시 시작해야 합니다. 지정된 클론을 초기화하려면 reset을 실행합니다.

인덱스 확인#

Database Lab을 사용하여 메타 명령 \d <index_name>으로 인덱스 상태를 확인합니다.

주의 사항:

  • 인덱스는 mainci 데이터베이스 모두에 생성되므로 테이블의 gitlab_schema에 맞는 인스턴스를 사용해야 합니다. 예를 들어 ci_builds에 인덱스가 추가된 경우 gitlab-production-ci를 사용합니다.

  • Database Lab은 일반적으로 몇 시간의 소폭 지연이 있습니다. 더 최신 정보가 필요한 경우 Teleport를 통해 복제본 접근을 요청할 수 있습니다.

예를 들어 \d index_design_management_designs_on_project_id를 실행하면 다음이 출력됩니다:

Index "public.index_design_management_designs_on_project_id"
   Column   |  Type   | Key? | Definition
------------+---------+------+------------
 project_id | integer | yes  | project_id
btree, for table "public.design_management_designs"

유효하지 않은 인덱스의 경우 출력 끝에 invalid가 붙습니다:

Index "public.index_design_management_designs_on_project_id"
   Column   |  Type   | Key? | Definition
------------+---------+------+------------
 project_id | integer | yes  | project_id
btree, for table "public.design_management_designs", invalid

인덱스가 존재하지 않으면 JoeBot은 다음과 같은 오류를 반환합니다:

ERROR: psql error: psql:/tmp/psql-query-932227396:1: error: Did not find any relation named "no_index".

마이그레이션 테스트#

마이그레이션 테스트에 대한 자세한 내용은 데이터베이스 마이그레이션 테스트 문서를 참조하세요.

psql로 콘솔 접근#

psql로 콘솔에 접근하려면 AllFeaturesUser psql 접근 권한이 있어야 합니다.

데이터베이스 lab 인스턴스에 접근하려면 다음이 필요합니다:

  • SSH 키와 db-lab 권한이 포함된 chef-repo의 사용자 데이터 백 항목이 있어야 합니다. 예시: MR.

  • AllFeaturesUserpostgres.ai에서 부여되는 기본 권한입니다. 아직 없다면 #g_database_frameworks Slack 채널에 게시하고 @db-team을 태그하여 권한을 추가해 달라고 요청하세요.

  • 다음과 같이 ssh를 구성합니다:

Host lb-bastion.db-lab.gitlab.com
  # Typically, the username is `name` in `name@gitlab.com`
  # or your GitLab's username.
  # Check with the access provisioner if it is not working.
  # If not provided, defaults to your system username.
  User YOUR_USERNAME_HERE

  # Path to your SSH key. Adjust or remove if using a different key or SSH agent.
  IdentityFile ~/.ssh/id_ed25519

Host *.gitlab-db-lab.internal
  User YOUR_USERNAME_HERE  # Same as above.
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_ed25519  # Same as above.
  ProxyCommand ssh lb-bastion.db-lab.gitlab.com -W %h:%p

Postgres.ai 인스턴스 페이지를 통한 수동 접근#

psql 접근 권한이 있는 팀원은 psql을 통해 클론에 직접 접근할 수 있습니다. psql 접근을 통해 메타데이터뿐만 아니라 실제 데이터를 볼 수 있습니다.

psql을 사용하여 클론에 연결하려면:

Clone ID를 제공합니다: yourname-testing-gitlabissue와 같이 클론을 고유하게 식별하는 이름을 지정합니다.

  • Database usernameDatabase password를 제공합니다: psql을 클론에 연결합니다.

  • 클론을 유지해야 하는 경우 Enable deletion protection을 선택합니다. 이 옵션 선택은 피하세요. 클론은 12시간 후에 삭제됩니다.

  • Postgres.ai 웹 인터페이스의 Clone details 페이지에서 클론에 대한 SSH 포트 포워딩을 시작하는 명령을 복사하여 실행합니다.

-N 플래그와 함께 명령을 실행하도록 제안될 수 있으며, 이는 셸이 시작되지 않음을 의미하므로 성공적으로 실행되면 어떤 출력도 예상하지 않아야 합니다.

  • 선택적으로 ~/.ssh/configLogLevel DEBUG3을 추가하여 상세한 디버깅 정보를 출력할 수 있습니다.

  • 명령을 실행한 후 포트 포워딩을 활성 상태로 유지하기 위해 실행 중인 상태로 두고, 새 터미널 탭을 열어 다음 단계를 진행합니다.

  • Postgres.ai 웹 인터페이스의 Clone details 페이지에서 psql 연결 문자열을 복사하여 실행합니다. 설정 시 제공한 비밀번호를 사용하고 dbnamegitlabhq_dblab으로 설정합니다(또는 동일한 쿼리 문자열에 dbname=postgres를 사용하여 psql -l로 어떤 데이터베이스가 사용 가능한지 확인합니다).

연결 후에는 격리된 쓰기 가능한 환경의 추가 이점과 안전성을 갖추면서 프로덕션의 psql 콘솔처럼 클론을 사용합니다.

pgai Ruby gem을 통한 간편 접근#

pgai Ruby gem 사용 방법에 대한 안내는 pgai Ruby gem을 사용한 Database Lab 접근을 참조하세요.