mysql 快取機制

2022-02-20 13:46:35 字數 2254 閱讀 8115

目錄

2. 命中條件

3. 工作流程

4. 快取失敗

5. 快取的記憶體管理

6. 快取的使用時機

7. 快取引數配置

8. 減少快取碎片策略

9. innodb查詢快取

10. 參考

mysql快取機制即快取sql 文字及快取結果,用kv形式儲存再伺服器記憶體中,如果執行相同的sql,伺服器直接從快取中去獲取結果,不需要再去解析、優化、執行sql

伺服器接收sql,以sql和一些其他條件為key查詢快取表

如果快取命中,則直接返回快取

如果快取沒有命中,則執行sql查詢,包括sql解析、優化等。

執行完sql查詢結果以後,將sql查詢結果寫入快取表

快取命中率 = 快取命中次數 (qcache_hits) / 查詢次數 (com_select)

寫入率 = 快取寫入次數 (qcache_inserts) / 查詢次數 (qcache_inserts)

比率 = 命中次數 (qcache_hits) / 寫入次數 (qcache_inserts),

高效能mysql中稱之為比較能反映效能提公升的指數,一般來說達到3:1則算是查詢快取有效,而最好能夠達到10:1

show variables like '%query_cache%';

如果值為2,要使用快取的話,需要使用sql_cache開關引數:

分配記憶體塊時的最小單位大小

mysql能夠快取的最大結果,如果超出,則增加 qcache_not_cached的值,並刪除查詢結果

如果某個資料表被鎖住,是否仍然從快取中返回資料,預設是off,表示仍然可以返回

qcache_free_blocks:快取池中空閒塊的個數

qcache_free_memory:快取中空閒記憶體量

qcache_hits:快取命中次數

qcache_inserts:快取寫入次數

qcache_lowmen_prunes:因記憶體不足刪除快取次數

qcache_not_cached:查詢未被快取次數,例如查詢結果超出快取塊大小,查詢中包含可變函式等

qcache_queries_in_cache:當前快取中快取的sql數量

qcache_total_blocks:快取總block數

選擇合適的block大小

使用 flush query cache 命令整理碎片,這個命令在整理快取期間,會導致其他連線無法使用查詢快取

清空快取的命令

reset query cache; // 從查詢快取中移出所有查詢。

flush tables; //關閉所有開啟的表,同時該操作將會清空查詢快取中的內容。

innodb儲存引擎會對每個表設定乙個事務計數器,裡面儲存當前最大的事務id

當乙個事務提交時,innodb會使用mvcc中系統最大的事務id更新當前表的計數器

只有比這個最大id大的事務能使用查詢快取,其他比這個id小的事務則不能使用查詢快取

在innodb中,所有加鎖操作的事務都不使用任何查詢快取

查詢必須是完全相同的(逐字節相同)才能夠被認為是相同的。

查詢字串由於其它原因使用不同的資料庫、不同的協議版本或者不同的預設字符集都會被認為是不同的查詢而分別進行快取。

mysql 快取機制

mysql快取機制就是快取sql 文字及快取結果,用kv形式儲存再伺服器記憶體中,如果執行相同的sql,伺服器直接從快取中去獲取結果,不需要在再去解析 優化 執行sql。如果這個表修改了,那麼使用這個表中的所有快取將不再有效,查詢快取值得相關條目將被清空。表中得任何改變是值表中任何資料或者是結構的改...

MySQL快取機制

對mysql查詢快取及sql server過程快取的理解及總結 一 mysql的query cache 1 query cache mysql query cache是用來快取我們所執行的select語句以及該語句的結果集。mysql在實現query cache的具體技術細節上類似典型的kv儲存,就...

MySQL快取機制

目錄2.命中條件 3.工作流程 4.快取失敗 5.快取的記憶體管理 6.快取的使用時機 7.快取引數配置 8.減少快取碎片策略 9.innodb查詢快取 10.參考 mysql快取機制即快取sql 文字及快取結果,用kv形式儲存再伺服器記憶體中,如果執行相同的sql,伺服器直接從快取中去獲取結果,不...