PostgreSQL 中的選項 shared_buffers
我在 Centos 5 上有一台具有 4GB RAM 和 PostgreSQL 9.0.3 的伺服器。我正在使用
pgbench
並pgbench-tools
使用兩個pgbench-tools
查詢來測量性能:select
和tpc-b
.使用預設設置
postgresql.conf
並使用選擇查詢,我得到以下結果:規模:1、10、100、1000
。每秒事務數:10000、8800、7500、100。
(表的記錄數為scale*100000)
我將選項
shared_buffer
增加到 256MB(以前是 32MB),我得到以下結果:規模:1、10、100、1000。
每秒事務數:10000、8000、3200、30
為什麼在第二個基準測試中規模為 100 或更多時與**第一個測試相比性能如此低?**我唯一做的就是增加記憶體。
當您增加 shared_buffers 時,唯一始終使 pgbench 變慢的是一個稱為斷言檢查的調試選項。如果你在 psql 中這樣做:
show debug_assertions;
它開啟了,你的建構有這個問題,你看到的結果是預期的。您需要一個未啟用斷言調試的新安裝才能消除這種情況。
否則,如果您不多次執行所有這些操作,我就不能確定這裡的原因是 shared_buffers 更改。舉個例子,如果 autovacuum 恰好在你的大型數據庫執行時執行,它會降低測試結果。測試開始時開始的檢查點也將開始。關閉 autovacuum 以將其從測試中消除,並打開 log_checkpoints 以查看它是否有乾擾。
第三種可能性,我幾乎可以肯定你在某種程度上受到了影響,那就是在磁碟上移動的東西會導致結果減慢 50%。磁碟在早期部分的速度大約是後期部分的兩倍,並且當您重複執行 pgbench 時,數據將隨著您移動到較慢的部分。我最終重建了整個文件系統以獲得可重複的結果,這是確保您從驅動器上的同一點開始的唯一方法。這不會影響較小規模的結果,因為它們都適合 RAM。
當我在觸摸配置參數後看到性能變化時,我總是再次嘗試原始配置以確保這是原因。我經常驚訝地發現每次執行測試都會變慢,磁碟位置速度差異是導致該問題的一個原因。