全部產品
Search
文件中心

ApsaraDB RDS:效能洞察

更新時間:Nov 19, 2025

效能洞察(Performance Insights)是一項專註於使用者資料庫執行個體效能調優、負載監控和關聯分析的重要工具。它能夠協助您直觀地評估資料庫負載、識別資源等待的源頭及相關SQL查詢語句,從而實現精準的效能最佳化。

功能簡介

效能洞察能夠協助您快速、方便且直接地識別資料庫執行個體的負載,以及導致效能問題的SQL語句。主要包含以下功能:

  • 關鍵效能指標趨勢圖:記憶體/CPU使用率、會話串連、TPS和IOPS的變化趨勢圖。

  • 平均活躍會話(AAS,Average Active Sessions):即時追蹤執行個體負載,清晰展示負載來源。

  • 多維負載資訊:從SQL、使用者(User)、資料庫(Databases)、等待事件(Waits)、用戶端主機(Hosts)、應用(Applications)和會話類別(Session Type)等維度展示執行個體負載資訊。

適用範圍

RDS PostgreSQL滿足以下要求:

  • 資料庫大版本:RDS PostgreSQL 13及以上。

  • 產品系列:高可用系列、叢集系列。

  • 核心小版本:20240530及以上。

操作步驟

步驟一:開啟效能洞察

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中,選擇監控與警示。在性能洞察頁簽。

  3. 單擊開啟效能洞察按鈕,在彈出的對話方塊中單擊確定開啟功能。

    image

    說明

    如果您不再使用效能洞察功能,可以單擊性能洞察頁面的關閉性能洞察,關閉此功能。

  4. 開啟後,等待片刻,效能洞察頁面將開始展示資料。

步驟二:使用效能洞察進行分析

成功開啟功能後,您可以在效能洞察頁面內進行全面的效能分析。

重要

目前效能洞察處於免費公測期,資料保留7天。正式版支援按需延長資料保留時間長度,收費將提前通知。

查看效能概覽(預設視圖)

進入效能洞察頁面後,您可以選擇時間範圍,單擊查看,分析以下核心資訊:

  • 關鍵效能指標趨勢圖:快速瞭解執行個體的CPU/記憶體、串連數、TPS和IOPS等核心指標在選定時間段內的變化趨勢。

  • 平均活躍會話(AAS):這是效能診斷的核心圖表。通過它,您可以直觀地看到執行個體的總負載(AAS值)以及負載的構成(按等待事件、SQL等維度)。AAS圖中的高峰通常對應效能瓶頸點。

  • 多維負載資訊:在AAS圖表下方,您可以從SQL使用者(User)、資料庫(Databases)、等待事件(Waits)等多個維度下鑽分析,快速定位是哪些SQL、使用者或等待事件造成了高負載。

image

故障診斷案例:慢SQL突增導致的鎖爭用問題

故障現象

監控顯示從某時刻開始,慢SQL數量急劇上升,應用回應時間顯著惡化。

診斷分析

步驟1:效能指標趨勢分析

檢查關鍵效能指標趨勢圖,發現00:34時刻活躍會話數從正常的十幾個大幅上升至1100+,超過PostgreSQL執行個體的合理並發處理能力。

image

步驟2:等待事件分析

通過平均活躍會話(AAS)圖表的等待事件分布,識別出主要瓶頸集中在:

  • Lock/transactionid:事務ID鎖等待,通常由長事務或死結引起。

  • Lock/tuple:行級鎖等待,表明存在嚴重的並發寫入衝突。

活躍會話數超過16核CPU的理論處理上限,確認系統處於嚴重的鎖爭用狀態。

image

步驟3:SQL語句分析

Top SQL排行顯示,前兩個查詢分別有220和119個會話在等待鎖資源釋放,這些SQL成為整個鎖等待鏈的關鍵節點。

image

步驟4:來源追溯

結合Top Hosts和Top Databases資料,鎖定問題源頭:

  • 異常用戶端:140.205.XXX.XXX

  • 目標資料庫:perf_test

image

根因分析

故障類型:鎖爭用雪崩

技術原理

  • 觸發原因:用戶端對perf_test資料庫發起高並發DML操作,可能涉及熱點行更新或大交易處理

  • 失控機制:PostgreSQL的鎖管理機制中,當多個事務競爭相同資源時,後續事務將進入等待隊列。由於缺乏串連數限制和鎖等待逾時控制,新串連持續湧入,形成鎖等待的惡性迴圈。

解決方案

即時措施

  1. 限制異常用戶端IP的串連數

    ALTER ROLE target_user CONNECTION LIMIT 10;   -- target_user:資料庫使用者名稱
  2. 終止長時間等待的會話

    -- 先查看要終止的會話詳情
    SELECT 
        pid,                                    -- 進程ID(會話標識)
        usename,                                -- 資料庫使用者名稱
        state,                                  -- 工作階段狀態(active/idle等)
        wait_event,                             -- 等待事件具體類型
        now() - query_start AS query_duration,  -- 當前查詢已執行時間長度
        left(query, 50) AS query_preview        -- SQL語句預覽(前50字元)
    FROM pg_stat_activity 
    WHERE datname = 'perf_test'                 -- 限定資料庫名稱
      AND client_addr = '140.205.XXX.XXX'       -- 限定用戶端IP地址
      AND state = 'active'                      -- 僅查詢活躍狀態的會話
      AND wait_event_type = 'Lock'              -- 僅查詢正在等待鎖的會話
      AND pid <> pg_backend_pid()               -- 排除當前執行此查詢的會話(避免自殺)
      AND now() - query_start > interval '5 minutes';  -- 查詢執行時間長度超過5分鐘
      
    -- 確認無誤後再執行終止
    SELECT pg_terminate_backend(pid) 
    FROM pg_stat_activity 
    WHERE datname = 'perf_test'
      AND client_addr = '140.205.XXX.XXX'
      AND state = 'active' 
      AND wait_event_type = 'Lock'
      AND pid <> pg_backend_pid()
      AND now() - query_start > interval '5 minutes';
    
    -- 確認目標會話是否已清理
    SELECT pid, usename, state, query 
    FROM pg_stat_activity 
    WHERE datname = 'perf_test'
      AND client_addr = '140.205.XXX.XXX';    

長期最佳化

  1. 串連池配置:部署PgBouncer等串連池,控制最大並發串連數。

  2. 逾時參數調優

    -- 設定鎖等待逾時
    ALTER DATABASE perf_test SET lock_timeout = '30s';
    -- 設定語句執行逾時
    ALTER DATABASE perf_test SET statement_timeout = '60s';
  3. 應用程式層最佳化

    • 減小事務粒度,避免長事務。

    • 使用樂觀鎖或分布式鎖機制處理熱點資料。

    • 實施讀寫分離,將唯讀查詢分流至從庫。

  4. 監控警示:配置活躍串連數和鎖等待時間的監控閾值,實現故障預警。

通過這種系統性的診斷方法,可以快速定位PostgreSQL效能問題的根本原因,並制定針對性的解決方案。