마지날리아를 사용한 데이터베이스 쿼리 댓글
마지날리아 젬은 ActiveRecord에 의해 생성된 PostgreSQL 쿼리에 애플리케이션 관련 컨텍스트 정보를 포함하는 쿼리 주석을 추가하는 데 사용됩니다.
문제 있는 쿼리를 애플리케이션 소스로 되돌리는 데 매우 유용합니다.
온콜 사고 중 엔지니어는 주석을 통해 쿼리와 해당 애플리케이션 소스의 전체 컨텍스트를 가집니다.
주석의 메타데이터 정보
Rails에서 생성된 쿼리는 다음 메타데이터를 주석에 포함합니다:
application
correlation_id
endpoint_id
db_config_database
line
Sidekiq 작업자에서 생성된 쿼리는 다음 메타데이터를 주석에 포함합니다:
application
jid
correlation_id
endpoint_id
db_config_database
line
endpoint_id
는 애플리케이션의 모든 엔드포인트를 나타낼 수 있는 단일 필드입니다:
- Rails 컨트롤러의 경우, 컨트롤러 및 액션을 나타냅니다. 예:
Projects::BlobController#show
. - Grape API 엔드포인트의 경우, 라우트를 나타냅니다. 예:
/api/:version/users/:id
. - Sidekiq 작업자의 경우, 작업자 클래스 이름을 나타냅니다. 예:
UserStatusCleanup::BatchWorker
.
db_config_database
는 database.yml
에 있는 데이터베이스 구성 해시의 database
필드를 나타내는 단일 필드입니다.
line
은 추가 오버헤드 때문에 프로덕션 로그에 표시되지 않습니다.
주석이 포함된 쿼리의 예:
-
Rails:
/*application:web,controller:blob,action:show,correlation_id:01EZVMR923313VV44ZJDJ7PMEZ,endpoint_id:Projects::BlobController#show,db_config_database:gitlabhq_production*/ SELECT "routes".* FROM "routes" WHERE "routes"."source_id" = 75 AND "routes"."source_type" = 'Namespace' LIMIT 1
-
Grape:
/*application:web,correlation_id:01EZVN0DAYGJF5XHG9N4VX8FAH,endpoint_id:/api/:version/users/:id,db_config_database:gitlabhq_production*/ SELECT COUNT(*) FROM "users" INNER JOIN "user_follow_users" ON "users"."id" = "user_follow_users"."followee_id" WHERE "user_follow_users"."follower_id" = 1
-
Sidekiq:
/*application:sidekiq,correlation_id:df643992563683313bc0a0288fb55e23,jid:15fbc506590c625d7664b074,endpoint_id:UserStatusCleanup::BatchWorker,db_config_database:gitlabhq_production,line:/app/workers/user_status_cleanup/batch_worker.rb:19:in `perform'*/ SELECT $1 AS one FROM "user_statuses" WHERE "user_statuses"."clear_status_at" <= $2 LIMIT $3