Database

如何檢查我的數據庫是否需要更多 RAM?

  • August 19, 2015

您將如何檢查您的 postgresql 數據庫實例是否需要更多 RAM 記憶體來處理其目前工作數據?

如果您都在 Linux 上,那麼您的總物理 RAM 應該大於磁碟上的數據庫大小,以最小化 I/O。最終,整個數據庫將位於作業系統讀取記憶體中,並且 I/O 將僅限於將更改送出到磁碟。我更喜歡通過執行“du -shc $PGDATA/base”來查找數據庫大小——該方法將所有數據庫聚合為一個數字。只要你比那個大,應該沒問題。

此外,您可以查看堆和索引塊提取的記憶體命中率。這些測量 PostgreSQL 共享緩衝區的命中率。這些數字可能有點誤導——即使它可能是共享緩衝區記憶體中的未命中,它可能仍然是作業系統讀取記憶體中的命中。儘管如此,共享緩衝區中的命中仍然比作業系統讀取記憶體中的命中便宜(反過來,這比必須返回磁碟便宜幾個數量級)。

為了查看共享緩衝區的命中率,我使用以下查詢:

SELECT relname, heap_blks_read, heap_blks_hit,
   round(heap_blks_hit::numeric/(heap_blks_hit + heap_blks_read),3)
FROM pg_statio_user_tables
WHERE heap_blks_read > 0
ORDER BY 4
LIMIT 25;

這為您提供了前 25 個最嚴重的違規者,其中所有表的緩衝區記憶體都失去了,其中至少一個塊必須從“磁碟”(再次,可能是作業系統讀取記憶體或實際磁碟 I/O)中獲取。您可以增加 WHERE 子句中的值或為 heap_blks_hit 添加另一個條件以過濾掉很少使用的表。

通過將字元串“heap”全域替換為“idx”,可以使用相同的基本查詢來檢查每個表的總索引命中率。查看 pg_statio_user_indexes 以獲得每個索引的細分。

關於共享緩衝區的快速說明:在 Linux 中,一個好的經驗法則是將配置參數shared_buffers設置為 RAM 的 1/4,但不超過 8GB。這不是一成不變的規則,而是調整伺服器的一個很好的起點。如果您的數據庫只有 4GB,而您有 32GB 的伺服器,那麼 8GB 的​​共享緩衝區實際上是多餘的,您應該能夠將其設置為 5 或 6 GB,並且仍有未來增長的空間。

引用自:https://serverfault.com/questions/395519