RDS PostgreSQL stats collector進程佔用CPU和IO高導致慢SQL增多

更新時間:
Copy as MD

問題描述

RDS PostgreSQL出現慢SQL增多的情況,經排查發現stats collector進程佔用了較高的CPUIO。

說明

在增強監控中,可以通過查看指標os.cpu_process.pgstat來監測stats collector進程的CPU佔用情況。詳情請參見查看增強監控

問題原因

RDS PostgreSQL 14及以下版本中,統計資訊是通過stats collector進程寫入檔案的,而autovacuum worker進程需要頻繁更新統計資料。首先,autovacuum worker進程會讀取統計資訊,然後進行更新,並將更新後的資訊發送給stats collector進程,由後者負責寫入。當autovacuum頻繁運行時,autovacuum workerstats collector都會佔用較高的CPUIO資源,導致執行個體中出現更多的慢SQL。此外,autovacuum清理死元組(dead tuple)的效率也會降低,從而進一步導致出現慢SQL。

在表特別多的執行個體中,更容易發生上述情境,因為隨著表的增多,統計資訊的規模也會增大,從而導致統計資訊的讀寫速度變慢。

解決方案

短期解決方案

長期解決方案

RDS PostgreSQL的大版本升級至15版本及以上。RDS PostgreSQL 15及以上版本將統計資訊放入了共用記憶體,並去掉了stats collector進程,避免對物理IO的佔用。升級執行個體大版本請參見RDS PostgreSQL大版本升級

相關文檔