성능 스냅샷 비교를 통해 데이터베이스 성능 최적화

이 문서에서는 두 시점 간의 시스템 측정항목 스냅샷을 비교할 수 있는 성능 스냅샷 보고서를 수동으로 생성하는 방법을 설명합니다. 성능 스냅샷 보고서를 사용하여 PostgreSQL용 AlloyDB 데이터베이스 성능 문제를 식별하고 완화할 수 있습니다. 각 스냅샷에서 캡처되는 시스템 측정항목에는 가상 CPU (vCPU) 사용량, 메모리 사용량, 디스크 I/O, 트랜잭션 수, 대기 이벤트가 포함됩니다.

자동 및 수동 스냅샷

AlloyDB는 다음 스냅샷을 지원합니다.

  • 자동 스냅샷: 기본적으로 AlloyDB는 하루에 한 번 자동으로 스냅샷을 캡처하고 스냅샷을 7일 동안 저장합니다. 자동 스냅샷을 사용하면 일일 워크로드 세부사항이 포함된 보고서를 생성할 수 있습니다. 자동 스냅샷의 보관 기간은 변경할 수 없지만 빈도를 구성할 수는 있습니다.

  • 수동 스냅샷: 스냅샷을 수동으로 캡처하고 보고서를 생성할 수 있습니다.

자동 스냅샷과 수동 스냅샷을 혼합하여 실적 보고서를 생성할 수 있습니다. 예를 들어 수동으로 생성된 스냅샷을 자동 스냅샷과 비교하는 성능 스냅샷 보고서를 생성할 수 있습니다.

이 문서에서는 성능 스냅샷 보고서를 수동으로 생성하는 방법을 설명합니다.

Performance Snapshot Report 작동 방식

Performance Snapshot Report는 성능 문제 원인을 식별하는 데 도움이 되도록 성능 데이터를 캡처하고 분석하는 기본 제공 AlloyDB 도구입니다. 이 도구는 인스턴스에 대한 실시간 측정항목을 제공하는 시스템 통계, 쿼리 통계, 측정항목 탐색기와 같은 다른 AlloyDB 모니터링 가능성 기능을 보완합니다.

Performance Snapshot Report는 보고서 하나에 두 타임스탬프 간의 데이터베이스 측정항목을 표시합니다. Performance Snapshot Report 정보를 사용하여 하루 중 특정 시간에 데이터베이스 성능 저하 또는 특정 기간 동안 성능 저하와 같은 Performance Snapshot Report 인스턴스의 성능 문제를 파악할 수 있습니다.

Performance Snapshot Report를 사용하여 측정항목을 성능 기준과 비교하여 워크로드 성능 측정항목에 대한 유용한 정보를 얻을 수 있으며 이 정보를 사용하여 데이터베이스 성능을 최적화하거나 문제를 해결할 수 있습니다. 기준은 특정 구성과 워크로드에 대한 데이터베이스의 표준 성능과 동작을 측정하는 맞춤설정된 데이터베이스 스냅샷 집합입니다.

Performance Snapshot Report의 대기 이벤트에 대한 자세한 내용은 데이터베이스 Performance Snapshot Report 참조를 확인하세요.

필요한 역할

alloydbsuperuser 역할이 있는지 확인합니다. 기본적으로 AlloyDB는 alloydbsuperuserpg_monitor 역할을 부여합니다. 자세한 내용은 PostgreSQL 사전 정의된 역할을 참고하세요.

다른 자체 정의 역할을 사용하려면 먼저 alloydbsuperuserGRANT pg_monitor TO my_user을 실행하세요. 자세한 내용은 적절한 역할로 Identity and Access Management (IAM) 계정 업데이트를 참고하세요.

스냅샷 만들기

성능 스냅샷은 데이터베이스 성능을 이해하고 최적화하는 데 유용한 도구입니다. 특정 시점에 주요 시스템 측정항목을 캡처하여 두 시점 간의 데이터베이스 성능을 비교할 수 있습니다. AlloyDB는 두 가지 유형의 스냅샷을 지원합니다.

  • 시스템 측정항목 스냅샷: 이러한 스냅샷은 vCPU 사용량, 메모리 사용량, 디스크 I/O와 같은 주요 시스템 측정항목을 캡처합니다.
  • 시스템 측정항목 및 SQL 실행 통계 스냅샷: 이러한 스냅샷에는 표준 스냅샷의 모든 시스템 측정항목과 pg_stat_statements 확장 프로그램의 자세한 SQL 실행 통계가 포함됩니다.

이를 통해 분석에 필요한 세부정보 수준을 유연하게 선택할 수 있습니다.

시스템 측정항목 스냅샷 만들기

관심 있는 워크로드의 시작과 끝에 스냅샷을 만듭니다. 두 스냅샷 사이의 시간 간격은 워크로드의 대표적인 샘플을 캡처할 수 있을 만큼 길어야 합니다.

다음 단계를 수행하여 AlloyDB 데이터베이스 성능을 최적화합니다.

  1. 데이터베이스가 유휴 상태이거나 평균 부하가 발생할 때 기준 스냅샷을 만듭니다.
  2. psql 클라이언트를 AlloyDB 인스턴스에 연결합니다.
  3. SELECT perfsnap.snap()를 실행합니다. 결과는 다음과 유사합니다.

    postgres=# select perfsnap.snap();
     snap
    ------
        1
    (1 row)
    

    이 명령어의 출력은 스냅샷 ID (snap_id)를 반환하며, 이 예에서는 1입니다. 나중에 실적 스냅샷 보고서를 생성하려면 이 ID가 필요합니다. 사용자 환경의 snap_id는 다를 수 있습니다.

  4. 두 스냅샷 집합으로 만든 보고서를 비교하고 성능을 향상시킬 수 있는 변경사항을 식별합니다. 성능 권장사항에 대한 자세한 내용은 데이터베이스 성능 최적화 권장사항을 참조하세요.

결과 성능 스냅샷 보고서에서 측정항목을 가져온 후 다른 스냅샷 세트를 가져와 프로세스를 반복할 수 있습니다.

SQL 실행 통계가 포함된 스냅샷 만들기

기본적으로 AlloyDB는 pg_stat_statements 확장 프로그램을 사용하여 SQL 문을 추적합니다. 성능 보고서에 자세한 SQL 실행 통계를 포함하려면 먼저 postgres 데이터베이스에 pg_stat_statements 확장 프로그램을 만들어야 합니다. 이러한 통계의 캡처는 확장 프로그램 자체의 생성에 의해 사용 설정되는 것이 아니라 pg_stat_statements.track 플래그에 의해 사용 설정됩니다.

SQL 실행 통계도 포함하는 스냅샷을 만들려면 다음 단계를 따르세요.

  1. postgres 데이터베이스에 pg_stat_statements 확장 프로그램을 만듭니다.

    postgres=# CREATE EXTENSION pg_stat_statements;
    
  2. 이제 스냅샷을 생성하면 pg_stat_statements의 SQL 통계가 자동으로 포함됩니다.
      postgres=# select perfsnap.snap();
        snap
      ------
          2
      (1 row)
      

스냅샷 목록 보기

  1. psql 클라이언트를 AlloyDB 인스턴스에 연결합니다.
  2. SELECT * FROM perfsnap.g$snapshots를 실행합니다. 결과는 다음과 유사합니다.
        postgres=# select * from perfsnap.g$snapshots;
         snap_id |           snap_time           | instance_id | node_id | snap_description | snap_type | is_baseline
        ---------+-------------------------------+-------------+---------+------------------+-----------+-------------
               1 | 2023-11-13 22:13:43.159237+00 | sr-primary  |         | Manual snapshot  | Manual    | f
               2 | 2023-11-13 22:53:40.49565+00  | sr-primary  |         | Automatic snapshot| Automatic | f
        (2 rows)
      

Performance Snapshot Report 생성

예를 들어 스냅샷 1과 2 간의 차이를 캡처하는 보고서를 생성하려면 다음을 실행합니다.
SELECT perfsnap.report(1,2)

차등 작업에서 두 번째 스냅샷을 첫 번째 스냅샷 직후에 생성할 필요는 없습니다. 하지만 첫 번째 스냅샷 이후 차등에서 두 번째 스냅샷을 캡처해야 합니다.

보고서 예

다음은 생성된 Performance Snapshot Report의 요약 예시입니다.

Performance Snapshot Report 예시

$ psql -d postgres -U alloydbsuperuser
postgres=> select perfsnap.report(22, 23);

report
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 PGSNAP DB Report for:

 Snapshot details
 --------------------------------------
 Host                   i841-sr-primary-2a34f46e-06bc
 Release                14.12
 Startup Time           2024-10-08 03:23:15+00

              Snap Id    Snap Time
 ------------ ---------- ------------------------
 Begin Snap:          22 24.10.2024 04:33:56 (UTC) Automatic snapshot
   End Snap:          23 25.10.2024 04:38:56 (UTC) Automatic snapshot
    Elapsed:                      1 day 00:04:59.979321

 Database Cache sizes
 ~~~~~~~~~~~~~
            Shared Buffers:       31 GB        Block Size:         8192
      Effective Cache Size:       25 GB       WAL Buffers:        16384

 Host CPU
 ~~~~~~~~~~
       %User   %Nice %System   %Idle    %WIO    %IRQ   %SIRQ  %Steal  %Guest
     ------- ------- ------- ------- ------- ------- ------- ------- -------
        1.07    0.22    0.91   97.40    0.09    0.00    0.31    0.00    0.00

 Host Memory
 ~~~~~~~~~~~~
              Total Memory:       63 GB
          Available Memory:       11 GB
               Free Memory:      726 MB
            Buffers Memory:     3706 MB

 Load profile (in bytes)
 ~~~~~~~~~~~~~~~~~~~~~~~            Per Second         Per Transaction
                                    ------------       ---------------
                     Redo size:         63083.64               4489.93
                 Logical reads:          1961.21                139.59
                 ...

 Response Time Profile (in s)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 CPU time:               5399 (   0.39%)
 Wait time:           1386906 (  99.61%)
 Total time:           1392306

 Backend Processes Wait Class Breakdown (in s)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 IO                   119.300 (  98.91%)
 LWLock                 1.305 (   1.08%)
 IPC                     .010 (   0.01%)
 Lock                    .000 (   0.00%)

 Backend Processes Wait Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class         Waits      Time (us)      Avg (us)
 -------------------------------------- ------------- ------------- -------------- -------------
 CPU                                                                    1995948632
 WALInsert                                     LWLock             1           6656          6656

 Vacuum Information
 ~~~~~~~~~~~~~~~~~~~
             Num Analyze operations:             1976
              Num Vacuum operations:             3435

 Per Database Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Commits       Rollbacks     BlkRds        Blkhits       TempFiles     TempBytes
 ------------------------- ------------- ------------- ------------- ------------- ------------- -------------
 bench                             27939             0             0       7823038             0       0 bytes
 postgres                          39792             0             7      11089243             0       0 bytes

 Per Database DML & DQL Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Tuples returned  Tuples fetched   Tuples inserted  Tuples updated   Tuples deleted   Index splits     Index Only heap fetches   HOT updates
 ------------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ------------------------- ----------------
 bench                             16119481          4843262                0                0                0                0                        16                0
 postgres                          25415473          6327188                0               10                0                0                         0                8

 Per Database Conflict Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Lock Timeout  Old Snapshot  Buffer Pins   Deadlock
 ------------------------- ------------- ------------- ------------- -------------
 bench                                 0             0             0             0
 postgres                              0             0             0             0

 Per Database Vacuum Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Frozen XID    % Consumed    Aggregate Vacuum Gap
 ------------------------- ------------- ------------- --------------------
 bench                         179460916         9.00%         20539084
 postgres                      179339239         9.00%         20660761

 Per Database Sizing Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    Conn.
 Name                 Collation     Limit   Tablespace           DB Size    Growth
 -------------------- ------------- ------- -------------------- ---------- ----------
 bench                C.UTF-8            -1 pg_default                80 GB    0 bytes
 postgres             C.UTF-8            -1 pg_default               135 MB    0 bytes

 Backend Wait Event Histogram
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class       Waits    <= 1us    <= 2us    <= 4us    <= 8us   <= 16us   <= 32us   <= 64us  <= 128us  <= 256us  <= 512us
 -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------
 WALInsert                                  LWLock             1         0         0         0         0         0         0         0         0         0         0

 Background Wait Event Histogram
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class       Waits    <= 1us    <= 2us    <= 4us    <= 8us   <= 16us   <= 32us   <= 64us  <= 128us  <= 256us  <= 512us
 -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------
 WALInsert                                  LWLock           542       107       174        39       113        93         8         1         1         0         1

 Write Ahead Log (WAL) Statistics
 --------------------------------
 Records       Full Page Images   Bytes        Buffers Full   Write         Sync          Write Time    Sync Time
 -----------   ----------------   -----------  ------------   -----------   -----------   -----------   -----------
     2936305                100     805989345             0             0             0             0             0

 Summary Stats (across all databases)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                             Value
 -------------------------------- ----------------------------------
 Buffers evicted                  0
 Commits                          1216693
 ...

 Parameter Settings
 ~~~~~~~~~~~~~~~~~~~
 Parameter                         Value
 --------------------------------- --------------------------------------------------------------
 DateStyle                            ISO, MDY
 TimeZone                             UTC
 autovacuum                           on
 work_mem                             4096

 Columnar Engine available size  Columnar Engine configured size
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       14959MB                         19293MB

 Columnar Engine Statistics
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 name                                                       count
 ---------------------------------------------------------- ------------
 CU Populations/Refreshes                                          13197
 CU Auto Refreshes                                                 10975
 ...
 Columnar Engine Ultra-fast Cache Statistics
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Ultra-fast Cache Size (MB):                        19200
 Ultra-fast Cache Used Size (MB):                       0
 Ultra-fast Cache Block Size (MB):                     80

 SQL Report
 ~~~~~~~~~~
 NOTE: Query might be empty if query ID does not have a match in pg_stat_statements at report time. This is expected if the query is not run recently.
 Per Query Information (Top 50) By Total Elapsed Time
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Query Text                                                                                                 UserID         DBID          DBName          QueryID            Total Elapsed Time(ms)    Execution Count       Avg Elapsed Time(ms)
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    prepare neword (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) as select neword($1,$2,$3,$4,$5,$6)        36272        36274            tpcc      -5467151541922966497           276400877.8014            36928106                    7.4848
 prepare payment (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, NUMERIC, VARCHAR) AS select p        36272        36274            tpcc       3864683359055073968           127719636.4656            36928456                    3.4586
                                        prepare delivery (INTEGER, INTEGER) AS select delivery($1,$2)        36272        36274            tpcc       2323704420019807054            48540963.0880             3694128                   13.1400
                                    prepare slev (INTEGER, INTEGER, INTEGER) AS select slev($1,$2,$3)        36272        36274            tpcc      -8637448842172635004            35361366.9271             3692785                    9.5758
 ...

 Per Query Information (Top 50) By Read IO
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Query Text                                                                                                 UserID         DBID          DBName          QueryID            Total ReadIO Time(ms)        Execution Count    Avg ReadIO Time(ms)    Total buffer hits         Avg buffer hits    Total blk reads         Avg blk reads
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 prepare ostat (INTEGER, INTEGER, INTEGER, INTEGER, VARCHAR) AS select * from ostat($1,$2,$3,$4,$5) a        36272        36274            tpcc      -1640504351418263816              498072.4004             3693895                    0.1348            80360201         21.75486877672484              105858 0.028657555236410347
                                        prepare delivery (INTEGER, INTEGER) AS select delivery($1,$2)        36272        36274            tpcc       2323704420019807054                  12.5438             3694128                    0.0000          4477308168        1212.0067761593534             1219908 0.33022894712906536
     prepare neword (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) as select neword($1,$2,$3,$4,$5,$6)        36272        36274            tpcc      -5467151541922966497                   0.8039            36928106                    0.0000         10337394097         279.9329620912592             6245570 0.16912781825312134
              SELECT name, default_version, installed_version FROM pg_catalog.pg_available_extensions           10            5        postgres       6619165036968781114                   0.0000                 361                    0.0000                 361                         1                   0                   0
 ...

 Per Query Information (Top 50) By Standard Deviation of Elapsed Time
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Query Text                                                                                                 UserID         DBID          DBName          QueryID            Begin STDDEV Elapsed Time(ms)  End STDDEV Elapsed Time(ms)
 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                           SELECT COUNT($1) FROM perfsnap.g$snapshots           10            5        postgres      -8741741796612173369                      17.8084                      18.1239
                                        prepare delivery (INTEGER, INTEGER) AS select delivery($1,$2)        36272        36274            tpcc       2323704420019807054                      15.0626                      19.8495
     prepare neword (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) as select neword($1,$2,$3,$4,$5,$6)        36272        36274            tpcc      -5467151541922966497                      13.9820                      17.0074
                                    prepare slev (INTEGER, INTEGER, INTEGER) AS select slev($1,$2,$3)        36272        36274            tpcc      -8637448842172635004                       8.4333                       9.6205

 ----------------------------------------------------
 Created by G_STATS v1.0.100
 ----------------------------------------------------
(xxx rows)

  

보고서 필드 및 성능 최적화 권장사항에 대한 자세한 내용은 데이터베이스 성능 최적화 권장사항을 참조하세요. Performance Snapshot Report의 대기 이벤트에 대한 자세한 내용은 데이터베이스 Performance Snapshot Report 참조를 확인하세요.

스냅샷 삭제

기존 기준에 포함된 스냅샷을 삭제하려면 먼저 기준을 삭제해야 합니다.

스냅샷을 삭제하려면 다음 명령어를 실행합니다.

SELECT perfsnap.delete(SNAP_ID);

SNAP_ID을 삭제할 스냅샷의 ID로 바꿉니다.

스냅샷을 삭제한 후에는 복구할 수 없습니다.

스냅샷을 성능 기준으로 표시

예를 들어 ID가 1~3인 모든 스냅샷을 시스템 성능 기준선으로 표시하려면
SELECT perfsnap.make_baseline(1, 3)을 실행합니다.

성능 기준 삭제

ID가 1~3인 모든 기준을 삭제하려면 SELECT perfsnap.clear_baseline(1, 3)을 실행합니다.

자동 스냅샷 빈도 수정

자동 스냅샷 빈도를 맞춤설정하려면 초 단위로 자동 스냅샷 간격을 설정하는 perfsnap.interval 플래그를 설정합니다. 자세한 내용은 데이터베이스 플래그 구성을 참조하세요.

의미 있는 정보를 캡처하려면 플래그 값을 몇 분 이상으로 설정하는 것이 좋습니다.

더 이상 맞춤설정된 빈도가 필요하지 않은 경우 리소스 낭비를 방지하려면 플래그를 기본값 (일당 초)으로 재설정하세요.

스냅샷 보고서 결과를 사용하여 데이터베이스 성능 최적화

다음 단계를 수행하여 AlloyDB 데이터베이스 성능을 최적화합니다.

  1. 데이터베이스가 유휴 상태이거나 평균 부하가 발생할 때 기준 스냅샷을 만듭니다.
  2. 성능을 향상시키려는 워크로드나 쿼리를 시작합니다.
  3. 워크로드나 쿼리가 최대 리소스 사용량에 도달하면 또 다른 스냅샷 집합을 만듭니다. 두 보고서 모두에 같은 간격을 사용하는 것이 좋습니다.
  4. 두 스냅샷 집합으로 만든 보고서를 비교하고 성능을 향상시킬 수 있는 변경사항을 식별합니다. 성능 권장사항에 대한 자세한 내용은 데이터베이스 성능 최적화 권장사항을 참조하세요.

데이터베이스 성능 최적화 권장사항

다음 표에는 Performance Snapshot Report 섹션과 각 보고서 섹션에 권장되는 개선사항이 나와 있습니다. Performance Snapshot Report 섹션과 대기 이벤트에 대한 자세한 내용은 데이터베이스 Performance Snapshot Report 참조를 확인하세요.

섹션 보고서 필드 보고서 필드 설명 최적화 추천
스냅샷 세부정보 스냅샷 세부정보 호스트, PostgreSQL 호환 출시 버전, 머신 실행 시간을 제공합니다. 해당 사항 없음
스냅샷 ID 이 보고서를 만드는 데 사용된 스냅샷의 ID와 시점을 나열합니다. 해당 사항 없음
시스템 통계 호스트 CPU 호스트 CPU 사용률 세부정보입니다. CPU 사용률이 80%를 초과하는 경우 사용 가능한 다음 크기로 수직 확장하는 것이 좋습니다.
호스트 메모리 호스트 메모리 사용률 세부정보입니다. 여유 메모리가 15% 미만이면 사용 가능한 다음 크기로 수직 확장하는 것이 좋습니다.
프로필 로드 생성된 미리 쓰기 로깅 (WAL), I/O 요구사항, 연결 관리 측면에서 워크로드 특성을 파악하는 데 도움이 되는 카운터를 나열합니다. 물리적 읽기가 논리적 읽기보다 높으면 데이터의 더 큰 캐싱이 지원되도록 다음 사용 가능한 크기로 수직 확장하는 것이 좋습니다.
응답 시간 및 대기 클래스 분류 워크로드 실행 중에 Postgres 프로세스에서 소요한 시간을 항목별로 나눠 보여줍니다. 예를 들어 프로세스 대부분이 대기 상태인 경우 I/O 대기 시간을 줄이는 데 집중하여 조정합니다.
데이터베이스 워크로드 정보 데이터베이스별 워크로드 정보 커밋, 롤백, 적중률, 임시 테이블 및 정렬 작업에 대한 정보를 포함한 각 데이터베이스의 주요 측정항목입니다. 롤백이 많은 경우 앱을 진단하는 것이 좋습니다.
데이터베이스별 DML 및 DQL 정보 쿼리 작업 카운터입니다. 워크로드를 읽기 중심 또는 쓰기 중심으로 분류합니다.
데이터베이스 충돌 정보 일반적인 애플리케이션 및 데이터베이스 문제 카운터입니다. 교착 상태가 있으면 애플리케이션에서 문제를 찾습니다.
데이터베이스 크기 조정 정보 두 스냅샷 사이의 간격 동안 데이터베이스가 얼마나 커졌는지 보여줍니다. 이 필드에는 데이터베이스에 연결 제한이 설정되어 있는지 여부도 표시됩니다. 데이터베이스 증가가 너무 큰 경우 애플리케이션에서 문제를 찾습니다.
배큠 정보 배큠 정보 배큠 작업의 I/O 및 카운터 세부정보입니다. 기본적으로 AlloyDB는 적응형 배큠 작업을 실행합니다. 워크로드에 맞게 일부 배큠 설정을 재정의할 수 있습니다. 예를 들어 이러한 요청에 너무 많은 I/O가 사용되는 경우 배큠 작업을 줄입니다.
데이터베이스별 배큠 정보 다음 정보를 표시합니다.
  • 각 데이터베이스의 datfrozenxid (가장 오래된 고정되지 않은 XID)의 현재 기간 또는 datfrozenxid부터 현재 트랜잭션의 XID까지의 트랜잭션 수입니다.
  • 전체 트랜잭션 ID 중 소비된 미고정 트랜잭션 ID 수
  • autovacuum_freeze_max_age - age(pg_database.datfrozenxid)의 결과값으로, 이는 데이터베이스 집계 수준에서 랩어라운드를 방지하기 위해 자동 배큠이 트리거되는 두 번째 스냅샷 시점에서의 대략적인 트랜잭션 단위 age 차이를 나타냅니다.
고정된 XID 필드의 기간이 너무 오래되었거나 사용된 트랜잭션 비율이 90%에 가까운 경우에는 배큠 작업을 사용하는 것이 좋습니다. 집계 배큠 간격이 감소하면 래핑이 방지되도록 Postgres에서 배큠을 강제로 적용함을 나타냅니다.
데이터베이스 프로세스 대기 세부정보 자세한 백엔드 및 백그라운드 프로세스 정보 보고 간격에 발생한 백엔드 및 백그라운드 프로세스에 의한 모든 대기의 세부정보입니다. 정보에는 누적 대기 시간, CPU 시간, 대기 유형별 평균 시간이 포함됩니다. 예를 들어 WALWrite의 대기 시간을 줄이려면 데이터베이스에서 사용할 수 있는 wal_buffers 수를 늘립니다.
상세 백엔드 및 백그라운드 대기 이벤트 히스토그램 이는 기본적으로 Performance Snapshot Report에 포함됩니다. 목록에는 백엔드 및 백그라운드 프로세스의 대기 이벤트 히스토그램이 포함되어 있으며, 이 히스토그램은 1μs부터 16초 이상까지 32개의 버킷으로 나뉩니다. 대기 이벤트를 찾아 대기 시간이 긴 버킷에 대기 이벤트가 너무 많은지 확인합니다. 대기 이벤트가 너무 많거나 각 대기에서 소비된 시간에 문제가 있을 수 있습니다.
기타 통계 미리 쓰기 로그(WAL) 통계 미리 쓰기 로깅 통계 요약입니다. 동기화 시간이 너무 길면 워크로드가 향상되도록 관련 데이터베이스 플래그 (GUC)를 조정합니다. GUC는 서버 구성을 처리하는 PostgreSQL 하위 시스템입니다.
요약 통계(모든 데이터베이스) 스냅샷 간격 중에 발생하는 모든 데이터베이스 작업의 요약입니다. 해당 사항 없음
매개변수 설정 매개변수 설정 최종 스냅샷 시간의 주요 Postgres 구성 파라미터입니다. GUC 파라미터 설정 (Postgres 데이터베이스 플래그)을 확인하여 값이 예상되지 않거나 권장되지 않는 값인지 확인합니다.
SQL 실행 통계 총 경과 시간별 쿼리 정보 (상위 50개) 두 스냅샷 동안 경과된 시간이 가장 긴 상위 50개 쿼리와 총 실행 수를 쿼리가 실행된 사용자 및 데이터베이스별로 분류하여 나열합니다.
Elapsed time = Difference of total_exec_time in pg_stat_statements at the two snapshot time
이 섹션을 사용하여 시스템 시간을 가장 많이 차지하는 가장 무거운 쿼리를 식별합니다.
읽기 IO별 쿼리 정보 (상위 50개) 두 스냅샷 동안 가장 많은 읽기 IO 시간을 사용한 상위 50개 쿼리와 실행 횟수, 버퍼 적중, 블록 읽기를 총계 및 평균으로 나열합니다.
두 스냅샷 동안 누적된 ReadIO = blk_read_time + temp_blk_read_time
두 스냅샷 동안 누적된 Buffer Hits = shared_blks_hit + local_blks_hit
두 스냅샷 동안 누적된 Buffer Reads = shared_blks_read + local_blks_read
track_io_timing이 설정되어 있으므로 AlloyDB Cloud에서 기본적으로 이러한 필드를 추적합니다.
이 섹션을 사용하여 I/O 집약적인 쿼리를 식별합니다. 특히 디스크에서 자주 읽어야 하는 경우에 유용합니다.
경과 시간의 표준 편차별 쿼리 정보 (상위 50개) 경과 시간의 표준 편차가 가장 높은 상위 50개 쿼리를 나열하고 시작 및 종료 스냅샷 시간에 계산된 표준 편차를 모두 나열해 줘.
여기서 값은 pg_stat_statementsstddev_exec_time을 참조합니다.
표준 편차가 높은 쿼리의 경우 쿼리 실행 시간이 크게 달라지므로 I/O를 살펴봐야 할 수 있습니다.

제한사항

  • 과도한 스토리지 소비로 인한 공간 팽창을 방지하려면 인스턴스 하나에서 스냅샷을 최대 2, 500개까지 수동으로 만들 수 있습니다.

  • 스냅샷 수가 스냅샷 한도를 초과하면 AlloyDB에서 90일이 지난 모든 수동 스냅샷을 삭제합니다. 스냅샷 한도를 초과하지 않으려면 새 스냅샷을 만들기 전에 불필요한 스냅샷을 정리해야 합니다.

  • AlloyDB는 90일이 지난 수동 스냅샷을 주기적으로 정리합니다.

다음 단계