比較成效快照

選取文件版本:

本文說明如何使用報表比較兩個不同時間點的系統指標快照,找出並緩解 AlloyDB Omni 資料庫效能問題。每個快照擷取的系統指標包括虛擬 CPU (vCPU) 使用率、記憶體用量、磁碟 I/O、交易計數和等待事件。

成效數據匯報的運作方式

效能快照報表是 AlloyDB Omni 內建的工具,可擷取及分析效能資料,協助您找出效能問題的原因。

Performance Snapshot Report 會在單一報表中,顯示兩個時間戳記之間的資料庫指標。您可以運用 Performance Snapshot Report 資訊,找出 Performance Snapshot Report 執行個體的效能問題,例如在一天中的特定時間資料庫效能下降,或在特定時間範圍內效能下降。

您可以使用 Performance Snapshot Report,將指標與成效基準進行比較,深入瞭解工作負載成效指標,並據此最佳化或排解資料庫效能問題。基準是一組自訂的資料庫快照,用於評估特定設定和工作負載的資料庫標準效能和行為。

根據預設,AlloyDB Omni 的效能快照會儲存在記憶體中,並在執行個體重新啟動時捨棄。

必要的角色

確認您具備 pg_monitor 角色。這個角色會授予超級使用者,他們可以將 pg_monitor 授予其他使用者。

舉例來說,postgres 預設為超級使用者。您可以以 postgres 身分執行 GRANT pg_monitor TO my_user,允許 my_user 使用效能快照工具,如本文件所述。

安裝成效數據匯報報表

perfsnap 是結構定義名稱,內含 SQL 函式,可供使用者擷取快照或產生報表。這個結構定義是 AlloyDB Omni g_stats 擴充功能的一部分。使用超級使用者角色安裝 Performance Snapshot Report。

如要使用 perfsnap API,請連線至使用者要安裝擴充功能的任何資料庫,並使用下列指令建立 g_stats 擴充功能:

CREATE EXTENSION IF NOT EXISTS g_stats;

建立系統指標快照

在感興趣的工作負載開始和結束時建立快照。兩個快照之間的時間間隔應足以讓工作負載進展,以便系統累積反映工作負載的指標。從產生的成效快照報表取得指標後,您可以再擷取一組快照,然後重複上述程序。

  1. 將 psql 用戶端連線至 AlloyDB 執行個體。
  2. 執行 SELECT perfsnap.snap()。 輸出看起來類似以下內容:

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

建立含有 SQL 執行統計資料的快照

根據預設,AlloyDB Omni 會使用 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)
    

產生快照報表

如要產生報表,擷取快照 1 和 2 之間的差異,請執行
SELECT perfsnap.report(1,2)。

差異作業中的第二個快照不一定要緊接在第一個快照之後。不過,請務必在第一個快照之後,擷取差異中的第二個快照。

生成的成效快照報表大致如下列簡略範例:

Performance Snapshot Report 範例

psql -d postgres -U alloydbsuperuser
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

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

  

如要瞭解報表欄位和資料庫效能最佳化建議,請參閱「資料庫效能最佳化建議」。如要進一步瞭解 Performance Snapshot Report 中的等待事件,請參閱「資料庫 Performance Snapshot Report 參考資料」。

刪除快照

如要刪除現有基準中的快照,必須先清除基準。

如要刪除快照,請執行 SELECT perfsnap.delete(n)。快照一經刪除即無法復原。

將快照標示為效能基準

舉例來說,如要將 ID 介於 1 到 3 之間的所有快照標示為系統效能基準,請執行
SELECT perfsnap.make_baseline(1, 3)。

清除效能基準

舉例來說,如要清除 ID 介於 1 到 3 之間的所有基準,請執行 SELECT perfsnap.clear_baseline(1, 3)。

使用快照報表結果,盡可能提高資料庫效能

請按照下列步驟,將 AlloyDB 資料庫效能調整至最佳狀態:

  1. 在資料庫閒置或平均負載時,建立基準快照。
  2. 啟動要提升效能的工作負載或查詢。
  3. 當工作負載或查詢達到資源使用量高峰時,請建立另一組快照。建議您為這兩份報表設定相同的時間間隔。
  4. 比較您建立的兩組快照報表,找出可能提升成效的變更。如要進一步瞭解效能建議,請參閱「資料庫效能最佳化建議」。

資料庫效能最佳化建議

下表列出 Performance Snapshot Report 各部分,以及每個報表部分的建議改善措施。如要進一步瞭解效能快照報表各部分和等待事件,請參閱「資料庫效能快照報表參考資料」。

區段 報表欄位 報表欄位說明 最佳化建議
快照詳細資料 快照詳細資料 提供主機、PostgreSQL 相容發布版本,以及機器啟動並執行的時間。 不適用
快照 ID 列出用於建立這份報表的快照 ID 和時間點。 不適用
系統深入分析資訊 主機 CPU 主機 CPU 使用率詳細資料。 如果 CPU 使用率超過 80%,建議您改用具有更多虛擬 CPU 的系統。
主機記憶體 主機記憶體使用率詳細資料。 如果可用記憶體低於 15%,建議您擴充至下一個可用大小。
載入設定檔 列出計數器,協助您根據產生的預寫記錄檔 (WAL)、I/O 需求和連線管理,描述工作負載的特性。 如果實體讀取次數高於邏輯讀取次數,建議擴充至下一個可用大小,以便支援更大的資料快取。
回應時間和等待類別細目 Postgres 程序在工作負載執行期間所花費的時間明細。 舉例來說,如果程序大多處於等待狀態,請著重於縮短 I/O 等待時間。
資料庫工作負載資訊 各資料庫的工作負載資訊 每個資料庫的重要指標,包括修訂、復原、命中率,以及臨時資料表和排序作業的相關資訊。 如果復原次數偏高,建議您診斷應用程式。
各資料庫的 DML 和 DQL 資訊 查詢作業的計數器。 將工作負載歸類為讀取密集型或寫入密集型。
資料庫衝突資訊 常見應用程式和資料庫問題的計數器。 找出應用程式中的死結問題。
資料庫
大小資訊
顯示資料庫在兩個快照之間的間隔期間成長了多少。這個欄位也會顯示資料庫是否已設定連線限制。 如果資料庫成長過大,請找出應用程式中的問題。
吸塵器資訊 吸塵器資訊 清理作業的 I/O 和計數器詳細資料。 根據預設,AlloyDB 會執行自動調節清理作業。您可以覆寫部分真空設定,以符合工作負載需求。舉例來說,如果這些要求耗用過多 I/O,請減少清理作業。
各資料庫的 Vacuum 資訊 顯示下列資訊:
  • 每個資料庫的 datfrozenxid (最舊的未凍結 XID) 目前存在時間,或是從 datfrozenxid 到目前交易 XID 的交易次數。
  • 已使用的交易 ID 數量 (相較於所有交易 ID)。
  • autovacuum_freeze_max_age - age(pg_database.datfrozenxid) 的結果,表示在觸發自動清除作業以防止資料庫層級的環繞時,第二次快照時間的近似年齡差距 (以交易為單位)。
如果 Frozen XID 欄位的時間過久,或已耗用交易的百分比接近 90%,請考慮執行清理作業。如果匯總真空間隙減少,表示 Postgres 會強制執行真空,避免迴繞。
資料庫程序等待詳細資料 詳細後端和
背景程序資訊
報表間隔內,後端和背景程序的所有等待詳細資料。資訊包括累計等待時間、CPU 作業時間,以及每種等待類型的平均時間。 舉例來說,如要減少 WALWrite 的等待時間,請增加資料庫可用的 wal_buffers 數量。
後端和背景等待事件詳細資料直方圖 根據預設,這項指標會納入 Performance Snapshot Report。這份清單包含後端和背景程序的等待事件直方圖,分為 32 個值區,從 1 微秒到超過 16 秒。 找出等待事件,並判斷等待時間較長的 bucket 是否有過多等待事件。等待事件過多或每次等待耗費的時間過長,都可能造成問題。
其他統計資料 預寫記錄檔 (WAL) 統計資料 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
您可以使用這個部分,找出最耗費系統時間的查詢。
各查詢資訊 (前 50 名),依讀取 IO 排序 列出在兩個快照期間花費最多讀取 IO 時間的前 50 個查詢,以及這些查詢的執行次數、緩衝區命中次數、blk 讀取次數,包括總計和平均值。
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_statements 的 stddev_exec_time
如果查詢的標準差很高,表示查詢執行時間差異很大,可能需要檢查 I/O。

限制

  • 為避免空間膨脹,您可以在一個執行個體上手動建立最多 2500 個快照。空間膨脹可確保快照不會佔用資料庫過多儲存空間。

  • 如果快照數量超過上限,AlloyDB Omni 會刪除所有超過 90 天的手動快照。為避免超過快照數量上限,請先清除不必要的快照,再建立新的快照。

  • AlloyDB Omni 會定期清除超過 90 天的手動快照。

後續步驟