全部產品
Search
文件中心

PolarDB:pg_profile(資源監控)

更新時間:Dec 17, 2025

pg_profilePolarDB PostgreSQL版支援的一款第三方外掛程式,能夠統計目標資料庫中資源密集型活動,來分析和最佳化資料庫。此擴充基於PostgreSQL的統計視圖和部分社區外掛程式,完全由PL/pgSQL編寫,無需任何外部庫或軟體。配合pg_cron外掛程式可以實現資源密集活動的定期採集和監控。

適用範圍

支援的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 16(核心小版本2.0.16.9.9.0及以上)

  • PostgreSQL 15(核心小版本2.0.15.14.6.0及以上)

  • PostgreSQL 14(核心小版本2.0.14.10.18.0及以上)

說明

您可在控制台查看核心小版本號碼,也可以通過SHOW polardb_version;語句查看。如未滿足核心小版本要求,請升級核心小版本

注意事項

  • 採集資料需要使用到pg_stat_statementspg_stat_kcache外掛程式,請確保它們已被添加到被採樣資料庫的shared_preload_libraries參數中(預設載入)。

    說明

    修改shared_preload_libraries參數方法請參見設定叢集參數。修改該參數後叢集將會重啟,請在修改參數前做好業務安排,謹慎操作。

  • 在被採樣的資料庫中,必須建立pg_stat_statements外掛程式。此外,可以選擇建立pg_stat_kcache外掛程式,以收集更多資訊。

  • 儲存採樣資訊將會佔用磁碟空間,該外掛程式有自動清理機制,請注意資料儲存。

  • 一次採樣較為耗時,無需頻繁採樣,推薦頻率為每小時1~2次。

使用方法

說明

由於使用dblink的安全限制,profile資料庫和server資料庫僅可以建立在同一個PolarDB PostgreSQL版叢集中。

以下將分別建立server資料庫和profile資料庫。

在採樣時,profile資料庫會向server資料庫發出採樣請求,server資料庫收到請求後將自身的統計結果返回到profile資料庫並儲存在表中。這樣就可以從profile資料庫擷取其他資料庫的統計資訊。

Server資料庫

建立server資料庫:

CREATE DATABASE server;

串連server資料庫並建立統計資訊外掛程式:

\c server
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS pg_stat_kcache;

Profile資料庫

建立profile資料庫:

CREATE DATABASE profile;

串連profile資料庫並建立外掛程式:

\c profile
CREATE EXTENSION IF NOT EXISTS pg_profile CASCADE;

建立採樣串連

SELECT create_server(
   'server',
   'dbname=server channel_name=localhost user=<server資料庫的高許可權帳號> password=<帳號對應的密碼>'
);

參數說明如下:

參數

樣本值

說明

server

server

串連名,使用者自訂。

dbname

server

資料庫名。

channel_name

localhost

串連資訊,當前僅支援localhost。

user

test_user

server資料庫所在叢集的高許可權帳號。

password

T123456!

帳號對應的密碼。

樣本結果如下:

                                    show_servers
-------------------------------------------------------------------------------------
 (server,"dbname=server channel_name=localhost user=test_user password=****",t,)
(1 row)

修改採樣串連資訊

SELECT set_server_connstr(
   'server',
   'dbname=server channel_name=localhost user=<profile資料庫的高許可權帳號> password=<帳號對應的密碼>'
);

參數說明如下:

參數

樣本值

說明

server

server

串連名,無需修改。

dbname

server

資料庫名。

channel_name

localhost

串連資訊,固定為localhost。

user

test_user

server資料庫所在叢集的高許可權帳號。

password

T123456!

帳號對應的密碼。

初次資料擷取

SELECT take_sample();

樣本結果如下:

      take_sample
-------------------------
 (server,OK,00:00:02.81)
(1 row)

壓測被採樣庫後再次採集

通過pgbench工具對被採樣的server資料庫進行壓測:

pgbench -s 100 -i server -U test_user -h pc-****.pg.rds.aliyuncs.com -p 5432

參數說明如下:

參數

樣本值

說明

-s

100

100表示在pgbench_accounts表中建立10,000,000行資料。

-i

server

待進行測試的資料庫。

-U

test_user

server資料庫所在叢集的高許可權帳號。

-h

pc-****.pg.rds.aliyuncs.com

server資料庫所在叢集的串連地址。

-p

5432

叢集連接埠,可根據控制台值具體填寫。

串連到profile資料庫再次進行資料擷取:

SELECT take_sample();

查看採集資料:

SELECT * FROM show_samples('server');

樣本結果如下:

sample |      sample_time       | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
--------+------------------------+-----------------+---------------+-----------------+-----------------
      1 | 2024-02-23 07:29:53+00 | t               |               |                 |
      2 | 2024-02-23 08:11:39+00 | t               |               |                 |

將採集結果產生報告

可以通過以下兩種方式將採集結果匯出到本地。

  • 方式一:通過用戶端工具psql的互動式命令列,執行如下SQL,得到輸出檔案。

    \o report_1_2.html
    SELECT get_report('server',1,2);
  • 方式二:通過命令列使psql直接將結果輸出到檔案中。

    psql -Aqtc "SELECT get_report('server',1,2)" \
       -o report_server_1_2.html -d profile \
       -h <profile資料庫所在叢集的串連地址> \
       -p <資料庫叢集所在連接埠> \
       -U <profile資料庫所在叢集的高許可權帳號>