본문 바로가기
WIKI 기술 지식 베이스

Database Monitoring으로 SQL 쿼리 파라미터 값 캡처하기

원문 보기 위키 갱신

Database Monitoring 통합은 데이터베이스 전반에서 집계된 쿼리 메트릭, 실행 중인 쿼리 실행(in-flight query executions), 쿼리 실행 계획(explain plans)을 수집해요. 기본적으로 쿼리 SQL 텍스트와 실행 계획은 민감한 데이터(쿼리 파라미터에 노출될 수 있음)를 보호하기 위해 Datadog로 보내기 전에 에이전트에서 난독화되고 정규화돼요.

출처: 문서

본문

그러나 실제 파라미터 값이 포함된 쿼리 문장을 노출하면 향상된 관측 가능성과 디버깅 기능을 제공해요. Database Monitoring은 현재 PostgreSQL과 SQL Server 통합에서 파라미터 값이 포함된 쿼리 캡처를 지원해요.

쿼리 파라미터에 접근할 수 있으면 다음이 가능해져요:

  • 성능 분석: 실행 계획을 특정 파라미터 값에 매핑해 특정 실행 계획이 선택되는 이유를 이해하기
  • 근본 원인 식별: 어떤 파라미터 값이나 쿼리 패턴이 성능 회귀를 유발하는지 식별하기
  • 핫스팟 감지: 문제가 되는 파라미터 발견하기(예: 느린 쿼리의 90%가 org_id:12345로 인해 발생)
  • 쿼리 최적화: 실제 파라미터로 실제 실행 계획을 조사해 실행 통계를 얻고 최적화 기회를 식별하기
  • 인덱스 튜닝: 실제 파라미터 값을 기반으로 인덱스를 미세 조정하거나, 쿼리를 다시 쓰거나, 쿼리 힌트를 조정하기

시작하기 전에

경고: 파라미터화된 값이 포함된 쿼리 문장과 실행 계획에는 민감한 정보(예: 쿼리 파라미터의 비밀번호)나 개인 식별 정보가 포함될 수 있어요. 이 옵션을 활성화하면 Datadog가 쿼리 샘플이나 실행 계획에 나타나는 원시 쿼리 문장과 실행 계획을 수집하고 인제스트(ingest)할 수 있게 돼요. 이 옵션은 기본적으로 비활성화되어 있어요.

이 가이드를 계속하기 전에 데이터베이스 인스턴스에 Database Monitoring을 구성해야 해요.

지원되는 데이터베이스: PostgreSQL, SQL Server

지원되는 배포 유형: 모든 배포 유형.

권한 (Permissions)

Database Monitoring UI에서 쿼리 파라미터 값을 보려면 사용자에게 Database Monitoring Parameterized Queries Read 권한이 필요해요. 이 권한은 Roles 페이지의 Database Monitoring 섹션 아래에 있어요. 이 권한은 Datadog Admin Role, Datadog Standard Role, Datadog Read Only Role에서 기본적으로 활성화되어 있어요. 조직이 사용자 정의 역할을 사용한다면 적절한 역할에 이 권한을 추가하세요. 권한 관리에 대한 자세한 내용은 RBAC 문서를 참고하세요.

설정 (Setup)

파라미터 값이 포함된 SQL 쿼리 텍스트와 실행 계획을 캡처하려면 데이터베이스 유형에 따라 해당 통합 conf.yaml 파일을 업데이트하세요:

  • PostgreSQL: postgres.d/conf.yaml 편집
  • SQL Server: sqlserver.d/conf.yaml 편집
  collect_raw_query_statement:
    enabled: true

참고: SQL Server에서 준비된 문장(prepared statements)의 파라미터 값을 캡처하려면 Extended Events를 통한 쿼리 완료 캡처가 필요해요. 데이터베이스 설정을 완료하려면 쿼리 완료를 캡처하도록 SQL Server 인스턴스와 통합 구성하기를 참고하세요.

  collect_xe:
    query_completions:
      enabled: true
    query_errors:
      enabled: true

준비된 문장 지원은 현재 SQL Server에서만 사용할 수 있어요. 자세한 내용은 "준비된 문장 파라미터 값이 제한되는 이유"를 참고하세요.

DBMS 유형별 쿼리 파라미터 값 캡처

PostgreSQL

쿼리 실행 방법 지원 설명 예시 지원되는 Agent 버전
Direct Executions yes 쿼리 텍스트에 리터럴 값을 포함해 직접 실행되는 애드혹(ad-hoc) SQL 문장. SELECT * FROM users WHERE id = 123 7.64.0+
Functions yes SELECT로 호출되는 스칼라 또는 테이블 반환 함수. SELECT get_user_name(123); 7.64.0+
Stored Procedures yes CALL로 호출되는 프로시저. CALL procname(123) 7.64.0+
Prepared Statements 현재 지원되지 않음. "준비된 문장 파라미터 값이 제한되는 이유"를 참고하세요. 준비된 문장을 통해 실행되는 파라미터화된 쿼리. 명시적으로 또는 드라이버를 통해 만들 수 있음. PREPARE stmt AS SELECT * FROM users WHERE id = $1; EXECUTE stmt(123);

SQL Server

쿼리 실행 방법 지원 설명 예시 Agent 버전
Direct Executions yes 쿼리 텍스트에 리터럴 값을 포함해 직접 실행되는 애드혹(ad-hoc) SQL 문장. SELECT * FROM users WHERE id = 123 7.64.0+
Functions yes SELECT로 호출되는 스칼라 또는 테이블 반환 함수. SELECT dbo.GetUserName(123); 7.64.0+
Stored Procedures yes EXEC로 호출되는 프로시저. EXEC GetUser @id = 123; 7.64.0+
Prepared Statements yes 지원하려면 쿼리 완료 구성이 필요해요. 준비된 문장을 통해 실행되는 파라미터화된 쿼리. 명시적으로 또는 드라이버를 통해 만들 수 있음. sp_prepare @handle, N'SELECT * FROM users WHERE id = @id'; sp_execute @handle, @id = 123; 7.67.0+

준비된 문장 파라미터 값이 제한되는 이유

Datadog는 활동 샘플링(activity sampling)을 사용해 현재 실행 중인 SQL 쿼리를 캡처해요. 그러나 준비된 문장의 경우 Database Management System이 실행 시점에 파라미터 값을 플레이스홀더로 대체해요. 그 결과 활동 샘플링이 실제 값을 관찰할 수 없어요.

SQL Server에서 파라미터 값이 포함된 준비된 문장을 캡처하려면 쿼리 완료를 캡처하도록 SQL Server 인스턴스와 통합 구성하기를 해야 해요. 이렇게 하면 Datadog Agent가 준비된 문장 실행에 대한 풍부한 가시성을 확보할 수 있어요.

PostgreSQL 준비된 문장 파라미터 값 캡처 지원은 현재 제공되지 않아요.

더 알아보기 (Learn more)