Mysql
禁止 MariaDB 查詢記憶體,除了來自網路伺服器 (JDBC)
我有一個應用程序伺服器(Play Framework)、Web 伺服器(Caddy)和數據庫伺服器(MariaDB 和 InnoDB),它們現在在一台機器上執行。
數據庫有兩種使用方式:
- 進行高度特定的 SELECT 的客戶端 Python 程式碼(通過 SSH 隧道)。
- Web/應用程序伺服器,它偶爾執行INSERT 和 UPDATE,但每次載入頁面時主要從大型表中選擇。
是否有一種簡單的方法可以為 Web 伺服器啟用(並強制)查詢記憶體,而不是為客戶端程式碼啟用查詢記憶體?我的想法是在網路伺服器上設置
query_cache_type=DEMAND
和使用SQL_CACHE
,但這並不理想。也許我可以強制 JDBC 以SQL_CACHE
某種方式使用?澄清:
SQL_CACHE
添加到每個查詢 的不幸技術問題是 Web 應用程序使用Slick和 JDBC 後端進行查詢。與 Slick 的集成很緊密,所以我無法重寫應用層,也不知道如何強制 JDBC 附加SQL_CACHE
.
如果有很多寫活動,查詢記憶體實際上是無用的——因為當表發生任何修改時,表的所有QC 條目都會被清除。
如果 QC 有用,則使用
query_cache_type=DEMAND
並手動說SQL_CACHE
orSQL_NO_CACHE
on everySELECT
可能是最佳選擇。這可以防止罕見的、龐大的查詢使記憶體變得混亂,同時允許“好”的查詢使用 QC。注意:這與連接器(JDBC 等)無關,僅與SELECT
語句有關。是的,
DEMAND
沒有SQL_CACHE
導致不使用 QC。我同意這是“不理想的”,因為它取決於關於 QC 的不明顯規則。不過,這可能是您最好的解決方案,除了…如果一個查詢很慢很慢很重要,我們應該批判性地看待這個查詢。加速可能就像添加一個“複合”索引一樣簡單,或者對查詢進行一些看似微小的調整,例如不在函式呼叫中隱藏索引列(例如,
DATE(dt) = ...
)。