數據庫統計信息概覽
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_indexes
和 pg_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 負載情況等方面的情況。