標籤:
查詢高速緩衝概述
查詢快取儲存SELECT查詢的文本以及發送給用戶端的相應結果。如果隨後收到一個相同的查詢,伺服器從查詢快取中重新得到查詢結果,而不再需要解析和執行查詢。如果你有一個不經常改變的表並且伺服器收到該表的大量相同查詢,查詢快取在這樣的應用環境中十分有用。對於許多Web伺服器來說存在這種典型情況,它根據資料庫內容產生大量的動態網頁面。
備忘1.查詢快取不返回舊的資料。當表更改後(如INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE操作),查詢快取值的相關條目被清空。2.如果你有許多mysqld伺服器更新相同的MyISAM表,在這種情況下查詢快取不起作用。3.查詢快取不適用於伺服器方編寫的語句。如果正在使用伺服器方編寫的語句,要考慮到這些語句將不會應用查詢快取.
查詢高速緩衝如何工作
當MySQL伺服器收到一個查詢請求的時候,MySQL伺服器首先檢查使用者對所有相關資料庫和表的SELECT許可權,如許可權通過,然後以該SQL文本作為key來從查詢快取中檢索是否有相同的key(因為資料緩衝都是以SQL文本作為key來儲存的),如果從查詢緩衝中找到對應的key值,就返回一個對應的查詢結果,伺服器把Qcache_hits狀態變數的值加一,而不需要解析器對sql語句進行解析,如果尋找不到對應的key值,然後執行sql的解析,然後查詢,可以參考。
備忘:
1.作為key值的sql語句是區分大小寫,即SELECT * FROM t1與select * from t1對應的key值是不一樣的。所以,如果開啟了查詢緩衝,在寫SQL語句的時候,應注意這點。
2.如果一個表被更改了,那麼使用那個表的所有緩衝查詢將不再有效,並且從緩衝區中移出,這樣保證了資料的一致性(即表中資料和緩衝中資料一致性)。
查詢高速緩衝配置
1.查看查詢緩衝是否可以
MySQL中,可以通過have_query_cache伺服器系統變數指示查詢快取是否可用。即使禁用查詢快取,當使用標準 MySQL二進位時,這個值總是YES。
2.其他重要配置參數
查詢快取系統變數名以query_cache_ 開頭,如,我們將逐一說明。
查詢高速緩衝維護片段的清理
在前面,我們可以得知,使用緩衝,不可避免記憶體片段,我們可以使用FLUSH QUERY CACHE語句來清理查詢快取片段,以提高記憶體使用量效能。該語句不從緩衝中移出任何查詢。RESET QUERY CACHE語句從查詢快取中移出所有查詢。FLUSH TABLES語句也執行同樣的工作,區別optimize table tableName,關於optimize可以參考(http://blog.csdn.net/hsd2012/article/details/51485250)。
查詢快取效能監控
為了監視查詢快取效能,使用SHOW STATUS查看緩衝狀態變數:
Qcache_free_blocks:緩衝中相鄰記憶體塊的個數。數目大說明可能有片段。執行FLUSH QUERY CACHE會對緩衝中的片段進行整理,只保留一個空閑塊。
Qcache_free_memory:緩衝中的空閑記憶體。
Qcache_hits:每次查詢在緩衝中命中時就增大
Qcache_inserts:每次插入一個查詢時就增大。叫用次數除以插入次數就是不中比率。
Qcache_lowmem_prunes:緩衝出現記憶體不足,並且必須為了緩衝新的查詢,而從查詢緩衝區中移出到自由記憶體中的查詢的數目。這個數字最好長時間來看;如果這個 數字在不斷增長,就表示可能片段非常嚴重,或者記憶體很少。(上面的 Qcache_free_blocks和Qcache_free_memory可以告訴您屬於哪種情況) 。從查詢緩衝區移除查詢緩衝,使用最近最少使用(LRU)策略。
Qcache_not_cached:不適合進行緩衝的查詢的數量,通常是由於這些查詢不是 SELECT 語句或者用了now()之類的函數。
Qcache_queries_in_cache:當前緩衝的查詢(和響應)的數量。
Qcache_total_blocks:緩衝中塊的數量。
Qcache_total_blocks和Qcache_free_blocks可以顯示查詢快取記憶體片段。
備忘
以上敘述,主要參考mysql手冊。
MySQL查詢高速緩衝詳解