我有一個緩慢的數據庫查詢運行第一次運行18秒和任何後續運行4秒。 我正試圖優化它的「冷啓動」執行時間。但無法連續重現。MySQL刷新查詢緩存
select SQL_NO_CACHE
指令沒有幫助。下面
命令不會讓它再次試驗18秒時:
FLUSH QUERY CACHE;
RESET QUERY CACHE;
FLUSH TABLES;
即使重新啓動數據庫不讓它長再次運行。
是否有任何其他命令刷新緩存?
表引擎是InnoDB。
我有一個緩慢的數據庫查詢運行第一次運行18秒和任何後續運行4秒。 我正試圖優化它的「冷啓動」執行時間。但無法連續重現。MySQL刷新查詢緩存
select SQL_NO_CACHE
指令沒有幫助。下面
命令不會讓它再次試驗18秒時:
FLUSH QUERY CACHE;
RESET QUERY CACHE;
FLUSH TABLES;
即使重新啓動數據庫不讓它長再次運行。
是否有任何其他命令刷新緩存?
表引擎是InnoDB。
讓我解釋它爲什麼沒有幫助。
Your Requirement
:在這裏,您正試圖再次運行相同的查詢,但您希望它只在清理緩存時作爲其運行的第一次執行。
當查詢運行時,會有多種類型的緩存進入圖片。 '查詢緩存'是我們討論的最常見的緩存,然後是MySQL緩存(例如Innodb緩衝池),table_cache(在InnoDB級別,MySQL級別爲&),操作系統緩存,硬件緩存。
select SQL_NO_CACHE :
這將阻止正在運行的查詢保存任何「查詢緩存」,這意味着如果您將再次運行相同的查詢,而不會有任何「查詢緩存」,但其他緩存將存在圖片中。
FLUSH QUERY CACHE :
這只是碎片整理「查詢緩存」,以更好地利用其存儲
RESET QUERY CACHE :
刪除從「查詢緩存」的所有查詢結果,如果使用這不會影響「SQL_NO_CACHE」,以前所有的查詢。
我通常會將一個用戶定義的變量添加到查詢中,以便它跳過查詢緩存。但不確定,你可以用這種方式模擬冷啓動。
SELECT a.*
FROM a, (SELECT @a:=NULL) as foo;
現在嘗試:沒有幫助。 – 2013-03-07 10:06:24
什麼表引擎有問題? – 2013-03-07 09:55:32
表引擎是InnoDB – 2013-03-07 09:56:50
嘗試清空innodb緩衝池。另一方面,爲什麼不讓查詢正常運行? – 2013-03-07 09:57:31