簡體   English   中英

刷新InnoDB緩存

[英]Flush InnoDB cache

我有一些很少運行的報告查詢,我需要高性能,而不依賴於它們在系統中的任何位置緩存。 在測試各種模式和sproc更改時,我通常會看到第一次運行非常慢並且后續運行速度很快,所以我知道有一些緩存正在使測試更改變得很麻煩。 重新啟動mysqld或運行其他幾個大型查詢是重現它的唯一可靠方法。 我想知道是否有更好的方法。

MySQL Query Cache已關閉。

監視磁盤,除了第一次運行外,我沒有看到任何讀取。 我不熟悉磁盤緩存,但我希望如果這就是緩存發生的地方我仍然會看到磁盤讀取,它們只是非常快。

MONyog給了我我認為最終的證據,即InnoDB緩存命中率。 監視它我看到當查詢速度很快時它正在擊中InnoDB緩沖區,當它緩慢時它正在擊中磁盤。

在實時系統上,我很樂意讓InnoDB這樣做,但是出於開發和測試的目的,我對最壞的情況感興趣。

我在Windows Server 2008R2上使用MySQL 5.5

在Percona博客上發了一篇帖子說:

對於MySQL緩存,您可以重新啟動MySQL,這是清除所有緩存的唯一方法。 您可以使用FLUSH TABLES清理MySQL表緩存(但不是Innodb表元數據),或者可以執行“set global key_buffer_size = 0; 設置全局key_buffer_size = DEFAULT“將密鑰緩沖區歸零,但沒有重啟就無法清理Innodb緩沖池。

他在評論中繼續說:

實際上一切都有緩存。 要進行真正的分析,您需要分析真實的查詢混合,這將使每個查詢具有適當的緩存/命中率,而不是在循環中運行一個查詢並假設結果會很好。

我想總結一下。 它確實使測試單個查詢變得困難。 我的情況是,我想嘗試強制不同的索引,以確保查詢規划器正在選擇正確的,並且顯然我將不得不在測試之間重新啟動MySQL以使緩存脫離等式!

暫無
暫無

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

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