比較成效快照

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

成效快照報表的運作方式

效能快照報表是 AlloyDB Omni 內建工具,可擷取及分析效能資料,協助您找出效能問題的原因。成效快照報表會在一份報表中,顯示兩個時間戳記之間的資料庫指標。您可以運用成效快照報表資訊,找出成效快照報表執行個體的成效問題,例如在一天中的特定時段資料庫效能下降,或在特定時間範圍內效能下降。

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

如要瞭解效能快照報告中的等待事件,請參閱「資料庫效能快照報告參考資料」。

必要的角色

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

舉例來說,postgres 是預設的超級使用者。您可以執行 GRANT pg_monitor TO my_user 做為 postgres,允許 my_user 使用效能快照工具。

安裝成效快照報表

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

如要使用 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)
    

查看快照清單

  1. psql 用戶端連線至 AlloyDB Omni 執行個體。
  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)

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

產生的成效快照報表與下列簡短範例類似:

範例成效快照報表

$ 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

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

  

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

刪除快照

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

如要刪除快照,請執行 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. 比較您使用兩組快照建立的報表,找出可能提升成效的變更。如要進一步瞭解效能最佳化建議,請參閱「資料庫效能最佳化建議」。

資料庫效能最佳化建議

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

Section 報表欄位 報表欄位說明 最佳化建議
快照詳細資料 快照詳細資料 提供主機、與 PostgreSQL 相容的版本,以及機器啟動並運作的時間。 不適用
快照 ID 列出用於建立這份報表的快照 ID 和時間點。 不適用
系統深入分析資訊 主機 CPU 主機 CPU 使用率詳細資料。 如果 CPU 使用率超過 80%,建議您改用虛擬 CPU 數量較多的系統。
主機記憶體 主機記憶體使用率詳細資料。 如果可用記憶體低於 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) 的結果,表示在觸發自動清除作業以防止資料庫層級的環繞時,第二次快照時間的近似年齡差距 (以交易為單位)。
如果凍結 XID 欄位的年齡過舊,或已耗用交易的百分比接近 90%,請考慮執行清除作業。如果匯總真空間隙減少,表示 Postgres 會強制執行真空,以防止迴繞。
資料庫程序等待詳細資料 詳細的後端和
背景程序資訊
報告間隔內,後端和背景程序的所有等待詳細資料。資訊包括累計等待時間、CPU 時間,以及每種等待類型的平均時間。 舉例來說,如要減少 WALWrite 的等待時間,請增加資料庫可用的 wal_buffers 數量。
詳細後端和背景等待事件直方圖 根據預設,這項指標會納入成效數據匯報報表。這份清單包含後端和背景程序的等待事件直方圖,這些程序會分成 32 個值區,從 1 微秒到超過 16 秒。 找出等待事件,並判斷較大的等待時間 bucket 中是否有過多等待事件。等待事件過多,或每次等待耗用的時間過長,都可能導致問題。
其他統計資料 預寫記錄 (WAL) 統計資料 WAL 統計資料摘要。 如果同步時間過長,請調整相關資料庫標記 (GUC),以改善工作負載。GUC 是 PostgreSQL 子系統,負責處理伺服器設定。
摘要統計資料 (所有資料庫) 快照間隔期間發生的所有資料庫作業摘要。 不適用
參數設定 參數設定 快照時間結束時的 Postgres 主要設定參數。 檢查 GUC 參數設定 (Postgres 資料庫旗標),判斷值是否不符合預期或不建議使用。

限制

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

  • 如果快照數量超過上限,AlloyDB Omni 會刪除所有超過 90 天的手動快照。如要維持在快照限制內,您必須先清除不必要的快照,才能建立新快照。

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

後續步驟