首頁  >  問答  >  主體

如何清除mysql 8 innodb中的資料庫緩存

<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>
P粉571233520P粉571233520419 天前574

全部回覆(2)我來回復

  • P粉195402292

    P粉1954022922023-08-28 22:21:18

    如果查詢是在生產中頻繁運行的查詢,那麼我認為您的目標是落後的。我建議您應該執行查詢兩次,並使用第二次查詢的計時。這樣,它更接近生產將看到的內容——數據已在快取中。

    (Bill 解釋說「查詢快取」無關緊要,「緩衝池」相關。)

    這是我喜歡的一種測試查詢的技術,無需建立足夠大的表來查看時間變化:

    FLUSH STATUS;
    SELECT ...;
    SHOW SESSION STATUS LIKE 'Handler%';

    這些數字是資料或索引行的實際讀/寫次數。數字可能看起來像輸出行數、表格中的行數等。這可以讓您了解是否存在例如全表(或索引)掃描。非零“Handler_write%”值表示需要一個臨時表(或多個表)。

    如果您的版本可用,請另參閱EXPLAIN ANALYZE

    更多提示:索引食譜

    #

    回覆
    0
  • P粉805931281

    P粉8059312812023-08-28 15:59:55

    您連結到的問題是關於查詢快取的,該快取在 MySQL 8.0 中已被刪除,因此無需再清除它。

    您的措詞表明您正在詢問緩衝池,這與查詢快取不同。緩衝池快取資料和索引頁,而查詢快取(如果存在)快取查詢結果。

    沒有指令可以在不重新啟動 MySQL 伺服器的情況下清除緩衝池。頁面一直緩存在緩衝池中,直到被其他頁面驅逐。

    緩衝池位於 RAM 中,因此如果重新啟動 MySQL 伺服器進程,其內容將會清除。因此,如果您想從頭開始,則需要重新啟動該進程(不需要重新啟動整個作業系統,只需重新啟動 MySQL 服務)。

    要注意的是,在 MySQL 8.0 中,重新啟動時緩衝池的內容不會完全清除。緩衝池內容的一定百分比在關閉期間儲存,並在啟動時自動重新載入。此功能預設為啟用,但您可以選擇停用它。

    了解更多相關資訊:

    回覆
    0
  • 取消回覆