Campaign Classic v7 - db 모듈 pg_stat_statements의 용도 및 사용

Adobe Campaign Classic v7의 db(데이터베이스) 모듈 pg_stat_statements의 용도 및 사용에 대해 알아봅니다.

설명 description

환경

Adobe Campaign Classic v7(ACC v7)

문제/증상

  1. DB 모듈 pg_stat_statements이란?

  2. 클라이언트가 활성화하도록 요청한 이유는 무엇입니까?

  3. 활성화 방법

해결 방법 resolution

  1. pg_stat_statements 모듈은 서버에서 실행되는 모든 SQL 문의 실행 통계를 추적하는 수단을 제공합니다.

    모듈은 추가 공유 메모리가 필요하므로 postgresql.confshared_preload_librariespg_stat_statements을(를) 추가하여 로드해야 합니다.

    즉, 모듈을 추가하거나 제거하려면 서버를 다시 시작해야 합니다.

    링크 https://www.postgresql.org/docs/9.4/pgstatstatements.html

  2. 이 테이블에서 시간이 오래 걸리는 쿼리를 모니터링할 수 있는 보기 유형 스키마를 구현하려면

    이렇게 하면 클라이언트가 이러한 기능을 조정하고 성능을 최적화할 수 있습니다.

    이 확장은 쿼리 실행에 대한 지표(가장 자주 실행되는 쿼리와 각 쿼리에 걸리는 시간)를 제공합니다.

  3. pg_stat_statements

    1. Postgres 버전에 대한 공식 PostgreSQL 구성 패키지가 설치되어 있는지 확인합니다.

      code language-none
      $ dpkg -l | grep postgres
      postgresql-contrib-9.3
      

      설치되지 않은 경우 설치합니다.

      code language-none
      $ apt-get install postgresql-contrib-9.3
      
    2. 시작할 때 모듈을 미리 로드하려면 postgresql.conf을(를) 변경하십시오.

      기본값: shared_preload_libraries = ''

      새로 만들기: shared_preload_libraries = 'pg_stat_statements'

      pg_stat_statements과(와) auto_explain을(를) 모두 사용하는 경우 ONE 레코드를 사용하고 쉼표로 구분하십시오.

      code language-none
      shared_preload_libraries = 'auto_explain,pg_stat_statements'
      
    3. 모니터링할 데이터베이스에서 CREATE 쿼리를 실행합니다.

      auto_explain에는 확장을 만들 필요가 없으며 pg_stat_statements에만 필요합니다.

      code language-none
      psql
      postgres=# \c mydatabase
      mydatabase=# CREATE EXTENSION pg_stat_statements;
      
    4. postgresql.conf의 사용자 지정 OPTIONS 섹션에서 다음 줄을 추가합니다.

      code language-none
      pg_stat_statements.max = 5000
      pg_stat_statements.track = all
      pg_stat_statements.save = on
      
    5. postgresql 서비스를 다시 시작합니다.

    예: 데이터베이스에서 비용이 가장 많이 드는 상위 5개의 쿼리를 가져옵니다.

    code language-none
    SELECT query, calls, total_time, rows, 100.0*shared_blks_hit/nullif(shared_blks_hit+shared_blks_read,0) AS hit_percent
    from pg_stat_statements as s inner join pg_database as d on d.oid = s.dbid
    where d.datname = 'Database_Name'
    order by total_time desc limit 5;
    
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f