PostgreSQL 性能檢測

數據庫統計信息概覽

pg_stat_user_tables

  • relid:表的標識符。
  • schemaname:表所屬的模式名稱。
  • relname:表的名稱。
  • seq_scan:順序掃描表的次數。
  • seq_tup_read:從表中讀取的行數(通過順序掃描)。
  • idx_scan:索引掃描表的次數。
  • idx_tup_fetch:從索引中檢索的行數。
  • n_tup_ins:向表中插入的行數。
  • n_tup_upd:更新表中的行數。
  • n_tup_del:從表中刪除的行數。
  • n_tup_hot_upd:熱更新的行數,即在同一頁上進行的更新操作。
  • n_live_tup:表中當前存活的行數。
  • n_dead_tup:表中當前已刪除的行數。
  • last_vacuum_time:上次執行 VACUUM 操作的時間。
  • last_autovacuum_time:上次自動執行 VACUUM 操作的時間。
  • vacuum_count:執行 VACUUM 操作的次數。
  • autovacuum_count:自動執行 VACUUM 操作的次數。
SELECT *
FROM pg_stat_all_tables
WHERE schemaname = current_schema() and idx_scan < seq_scan ORDER BY seq_scan DESC;

通過查詢pg_stat_user_tables,可以基本清楚哪些表的全表掃描的次數較多,表中是插入還是更新,刪除比較多。也可以瞭解當前表中垃圾數據的數量。

查看索引使用記錄

在 PostgreSQL 中,pg_stat_all_indexespg_stat_user_indexes 是兩個系統視圖,用於提供關於索引的統計信息。這些視圖存儲了有關數據庫中各個索引的性能統計數據。

  • pg_stat_all_indexes:這個系統視圖包含了所有用戶和系統表的索引的統計信息。它會爲每個索引提供詳細的指標,如掃描次數、插入次數、更新次數、刪除次數等。這些統計信息可以用於分析索引的使用情況和效果,以幫助優化查詢性能。

  • pg_stat_user_indexes:這個系統視圖只包含當前數據庫用戶所擁有的索引的統計信息。它提供了與 pg_stat_all_indexes 相同的指標,但僅針對當前用戶的索引進行統計。通過查看這個視圖,用戶可以更方便地獲取與自己相關的索引的性能數據。

這兩個視圖都具有相似的列,包括索引名稱、表名稱、掃描次數、插入次數、更新次數、刪除次數等。通過查詢這些視圖,你可以獲取有關索引使用情況的信息,以便評估索引的效率,發現潛在的性能問題,並進行索引優化和調整。

  • indexrelname:索引的名稱。
  • relname:表的名稱。
  • schemaname:表所在的模式名稱。
  • idx_scan:通過索引掃描的次數,如果這個值很小,說明這個索引很少被用到,可以考慮進行刪除。
  • idx_tup_read:通過任意索引方法返回的索引行數。
  • idx_tup_fetch:通過索引方法返回的數據行數。

通過pg_stat_user_indexes可以知道當前數據庫中哪些是用的很頻繁的索引,哪些是無效索引,無效索引可以進行刪除,可以減少磁盤空間的使用和提升insert,update,delete性能。

pg_statio_user_tables

  • relid:表的標識符(OID)。
  • schemaname:表所屬的模式名稱。
  • relname:表的名稱。
  • heap_blks_read:從磁盤讀取到的堆塊數量。
  • heap_blks_hit:從緩存中讀取的堆塊數量。
  • idx_blks_read:從磁盤讀取到的索引塊數量。
  • idx_blks_hit:從緩存中讀取的索引塊數量。
  • toast_blks_read:從磁盤讀取到的 TOAST 塊數量。
  • toast_blks_hit:從緩存中讀取的 TOAST 塊數量。
  • tidx_blks_read:從磁盤讀取到的 TOAST 索引塊數量。
  • tidx_blks_hit:從緩存中讀取的 TOAST 索引塊數量。

    如果heap_blks_read,idx_blks_read很高說明shared_buffer較小,存在頻繁需要從磁盤或者page cache讀取到shared_buffer中。

pg_stat_bgwriter

  • checkpoints_timed:定時檢查點的數量。
  • checkpoints_req:請求檢查點的數量。
  • buffers_checkpoint:檢查點期間寫入磁盤的緩衝區數量。
  • buffers_clean:後臺寫進程清理的緩衝區數量。
  • maxwritten_clean:單個後臺寫進程最近清理的塊數。
  • buffers_backend:後臺寫進程由後端進程完全清空的緩衝區數量。
  • buffers_alloc:後臺寫進程分配的新緩衝區數量。

這些列提供了有關後臺寫進程的各種指標,可以用於監控和優化 PostgreSQL 的 IO 性能。通過分析這些統計信息,可以瞭解緩存管理策略的效果、磁盤 IO 負載情況等方面的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章