Mysql

具有基於時間的過期的 MySQL 查詢記憶體

  • October 21, 2015

我們使用的數據庫具有讀寫密集型負載。一些讀取查詢很繁重。

不幸的是查詢記憶體不能被使用,因為它失效太快了。

我們想避免經典的 Memcached/MySQL 組合,以簡化架構並減少連接/延遲。

是否有在 MySQL 中添加“基於時間的記憶體”的策略?(理想情況下每個集合)

編輯:

  • 每個查詢組都有不同的 TTL(從 5 秒到幾天)。

在回答這個問題時,我會假設你的數據庫都是 InnoDB。

查詢記憶體無法滿足您的要求。您想到的機制確實存在於 InnoDB 緩衝池中。

您應該嘗試以下內容:

  1. 禁用查詢記憶體(為什麼從 MySQL 5.6 開始預設禁用 query_cache_type?
  2. 使 InnoDB 緩衝池能夠抵抗掃描

這控制了數據和索引塊在緩衝池中保留的時間和長度

要在一段時間後釋放塊,您可以將innodb_old_blocks_pct改回 37

MySQL 無法做到這一點。當對該表進行任何更改以確保查詢記憶體響應始終正確時,使用該表的所有查詢記憶體條目都將失效。此行為無法更改。

根據您的數據,您可以將數據分成舊的或很少更改的表和更新的頻繁更改的表,這樣您就可以充分利用查詢記憶體。

另一種可能性是定期創建物化視圖。這種方法的實用性在很大程度上取決於數據和查詢,但如果你能讓它發揮作用,它就能很好地發揮作用。

引用自:https://dba.stackexchange.com/questions/118603