簡體   English   中英

刷新緩存以在PostgreSQL 9.1中進行基准測試

[英]Flushing the cache for benchmarking in PostgreSQL 9.1

我正在使用在Debian Linux上運行的Postgresql 9.1執行一些基准測試任務。 我想對共享相同部分的查詢工作量進行基准測試。 在運行每個查詢之前,我重新啟動數據庫並執行以下命令:

回聲3> / proc / sys / vm / drop_caches

旨在同時刪除共享內存和操作系統緩存。 但是,我注意到,如果我以不同的順序運行相同的查詢工作負載,則會得到不同的查詢響應時間。 我懷疑查詢優化器以某種方式“記住”了如何有效執行常見查詢部分,或者重用了某些先前緩存的結果。

您是否有解決此問題的想法? 無論查詢順序如何,我都希望獲得大致相同的響應時間。 注意,我正在解析EXPLAIN輸出以提取實際運行時間。

首先想到的是autovacuum(PostgreSQL中的后台維護任務: http : //www.postgresql.org/docs/current/interactive/routine-vacuuming.html#AUTOVACUUM )正在做一些工作, -以難以預測的方式填充緩存。 您可以禁用它,但是要注意,這可能會導致膨脹,錯誤的統計信息導致錯誤的計划選擇,以及將更多的工作推到前端流程上,因此通常不建議這樣做。 解決此問題的另一種方法是在加載數據后運行VACUUM FREEZE ANALYZE,將所有內容置於維護良好的狀態,停止PostgreSQL,刷新OS緩存,然后啟動並進行基准測試。

問題的另一個可能來源是檢查站。 您應確保已將checkpoint_segments配置為足夠高,以避免強制執行頻繁的檢查點,並且應根據在基准測試期間何時出現檢查點來考慮checkpoint_timeout設置。

RAID控制器卡或硬盤驅動器也可能足夠緩存而已-我不知道刷新OS緩存是否可以清除這些緩存,但我對此表示懷疑。

通常,請記住,PostgreSQL附帶了旨在讓數據庫啟動並在小型筆記本電腦上運行的設置-最佳性能通常需要進行一些調整,因此,除非您的基准測試不同配置設置的效果,否則您可能需要查看一下基准測試之前的整體配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM