如何清除mysql 8 innodb中的資料庫緩存
P粉571233520
2023-08-27 23:46:28
<p>我嘗試在同一個 mysql 8 資料庫和表上多次執行相同的查詢。 </p>
<p>我需要進行實驗來確定調整查詢和/或表本身是否可以提高效能。然而,在第一次嘗試之後,回應時間要快得多,我認為是因為資料被快取了。 </p>
<pre class="brush:php;toolbar:false;">mysql 8 innodb</pre>
<p>我必須採取哪些選項來清除緩存,以便從頭開始獲取資料。 </p>
<hr />
<p>看來先前提出的答案都與 mysql 5 有關,而非 mysql 8。大多數命令現在似乎已被棄用。 </p>
<p>清除MySQL查詢快取而不重新啟動伺服器</p>
如果查詢是在生產中頻繁運行的查詢,那麼我認為您的目標是落後的。我建議您應該執行查詢兩次,並使用第二次查詢的計時。這樣,它更接近生產將看到的內容——數據已在快取中。
(Bill 解釋說「查詢快取」無關緊要,「緩衝池」相關。)
這是我喜歡的一種測試查詢的技術,無需建立足夠大的表來查看時間變化:
這些數字是資料或索引行的實際讀/寫次數。數字可能看起來像輸出行數、表格中的行數等。這可以讓您了解是否存在例如全表(或索引)掃描。非零“Handler_write%”值表示需要一個臨時表(或多個表)。
如果您的版本可用,請另參閱
EXPLAIN ANALYZE
。更多提示:索引食譜
#您連結到的問題是關於查詢快取的,該快取在 MySQL 8.0 中已被刪除,因此無需再清除它。
您的措詞表明您正在詢問緩衝池,這與查詢快取不同。緩衝池快取資料和索引頁,而查詢快取(如果存在)快取查詢結果。
沒有指令可以在不重新啟動 MySQL 伺服器的情況下清除緩衝池。頁面一直緩存在緩衝池中,直到被其他頁面驅逐。
緩衝池位於 RAM 中,因此如果重新啟動 MySQL 伺服器進程,其內容將會清除。因此,如果您想從頭開始,則需要重新啟動該進程(不需要重新啟動整個作業系統,只需重新啟動 MySQL 服務)。
要注意的是,在 MySQL 8.0 中,重新啟動時緩衝池的內容不會完全清除。緩衝池內容的一定百分比在關閉期間儲存,並在啟動時自動重新載入。此功能預設為啟用,但您可以選擇停用它。
了解更多相關資訊: