MySQL Query Cache
今天線上MySQL 出現記憶體使用率報警,就去查了下mysql記憶體使用的引數,重點是快取,關於innodb_buffer_pool_size以及query cache的使用。
query_cache_type 預設是開啟的,而且快取區query_cache_size預設大小是32M,通常建議不超過256M大小,可以用過查詢cache引數來看具體值:
- mysql> show variables like '%cache%';
- +------------------------------+----------------------+
- | Variable_name | Value |
- +------------------------------+----------------------+
- | binlog_cache_size | 32768 |
- | binlog_stmt_cache_size | 32768 |
- | have_query_cache | YES |
- | key_cache_age_threshold | 300 |
- | key_cache_block_size | 1024 |
- | key_cache_division_limit | 100 |
- | max_binlog_cache_size | 18446744073709547520 |
- | max_binlog_stmt_cache_size | 18446744073709547520 |
- | metadata_locks_cache_size | 1024 |
- | query_cache_limit | 1048576 |
- | query_cache_min_res_unit | 4096 |
- | query_cache_size | 33554432 |
- | query_cache_type | ON |
- | query_cache_wlock_invalidate | OFF |
- | stored_program_cache | 256 |
- | table_definition_cache | 400 |
- | table_open_cache | 512 |
- | thread_cache_size | 8 |
- +------------------------------+----------------------+
- 18 rows in set (0.00 sec)
- mysql>
“Qcache_free_blocks”:Query Cache 中目前還有多少剩餘的blocks。如果該值顯示較大,
則說明Query Cache 中的記憶體碎片較多了,可能需要尋找合適的機會進行整理()。
● “Qcache_free_memory”:Query Cache 中目前剩餘的記憶體大小。透過這個引數我們可以較為準
確的觀察出當前系統中的Query Cache 記憶體大小是否足夠,是需要增加還是過多了;
● “Qcache_hits”:多少次命中。透過這個引數我們可以檢視到Query Cache 的基本效果;
● “Qcache_inserts”:多少次未命中然後插入。透過“Qcache_hits”和“Qcache_inserts”兩
個引數我們就可以算出Query Cache 的命中率了:
Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts );
● “Qcache_lowmem_prunes”:多少條Query 因為記憶體不足而被清除出Query Cache。透過
“Qcache_lowmem_prunes”和“Qcache_free_memory”相互結合,能夠更清楚的瞭解到我們系
統中Query Cache 的記憶體大小是否真的足夠,是否非常頻繁的出現因為記憶體不足而有Query 被換
出
● “Qcache_not_cached”:因為query_cache_type 的設定或者不能被cache 的Query 的數量;
● “Qcache_queries_in_cache”:當前Query Cache 中cache 的Query 數量;
● “Qcache_total_blocks”:當前Query Cache 中的block 數量;
Query Cache 的限制
Query Cache 由於存放的都是邏輯結構的Result Set,而不是物理的資料頁,所以在效能提升的同
時,也會受到一些特定的限制。
a) 5.1.17 之前的版本不能Cache 幫定變數的Query,但是從5.1.17 版本開始,Query Cache 已經
開始支援幫定變數的Query 了;
b) 所有子查詢中的外部查詢SQL 不能被Cache;
c) 在Procedure,Function 以及Trigger 中的Query 不能被Cache;
d) 包含其他很多每次執行可能得到不一樣結果的函式的Query 不能被Cache。
鑑於上面的這些限制,在使用Query Cache 的過程中,建議透過精確設定的方式來使用,僅僅讓合
適的表的資料可以進入Query Cache,僅僅讓某些Query 的查詢結果被Cache。
另外,如果Qcache_free_blocks值有點偏高,可以用flush query cache 來清理下。
一個朋友的建議:
第一個:讀操作多的話看看比例,簡單來說,如果是使用者清單表,或者說是資料比例比較固定,比如說商品列表,是可以開啟的,前提是這些庫比較集中,資料庫中的實務比較小。
第二個:我們“行騙”的時候,比如說我們競標的時候壓測,把query cache開啟,還是能收到qps激增的效果,當然前提示前端的連線池什麼的都配置一樣。大部分情況下如果寫入的居多,訪問量並不多,那麼就不要開啟,例如社交網站的,10%的人產生內容,其餘的90%都在消費,開啟還是效果很好的,但是你如果是qq訊息,或者聊天,那就很要命。
第三個:小網站或者沒有高併發的無所謂,高併發下,會看到 很多 qcache 鎖 等待,所以一般高併發下,不建議開啟query cache
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062497/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於mysql的query_cacheMySql
- Mysql 查詢快取 query_cacheMySql快取
- Oracle Query Result CacheOracle
- JDBC/MYSQL問題 : Unknown system variable 'query_cache_size'JDBCMySql
- query result cache in oracle 11gOracle
- MySQL query_cache_type的DEMAND引數介紹和使用舉例MySql
- Mysql general query logMySql
- mysql 配置 General Query Log和# Slow Query LogMySql
- 查詢快取(query_cache)的影響快取
- MySQL Rewriter Query Rewrite PluginMySqlPlugin
- DML對QUERY CACHE 處理過程之原始碼分析原始碼
- com.jdon.model.query.cache.BlockCacheKeyFactory 好像沒有BloC
- MySQL8.0:The General Query LogMySql
- proxysql mysql_query_rules 翻譯MySql
- MySQL :Ignoring query to other databaseMySqlDatabase
- ntpdate會導致mysql slow query log出現很大的query timeMySql
- SQL Query Result Cache的使用和配置--Oracle 11G新特性SQLOracle
- 【Mysql】公開課之-Query-rewriteMySql
- 利用tcpdump簡易抓取MySQL Query LogTCPMySql
- MySQL 5.6 Table cache 簡介MySql
- Oracle OCP 1Z0-053 Q206(Query Result Cache)Oracle
- MySQL:Table_open_cache_hits/Table_open_cache_misses/Table_open_cache_overflowsMySql
- MySQL Slow Query log(慢查詢日誌)MySql
- 【MySQL】mysqldump Error 3024: Query execution was interruptedMySqlError
- MySQL slow query [慢查詢] 資料整理MySql
- MySQL效能剖析工具(pt-query-digest)MySql
- MySQL 關於Table cache設定MySql
- Hang with Library Cache Lock and Blocker is Internal Query SQL 8p7ujfdc5aycfBloCSQL
- Mysql mysql lost connection to server during query 問題解決方法MySqlServer
- mysql5.5_2013 Lost connection to Mysql server during queryMySqlServer
- MySQL中binlog cache使用流程解惑MySql
- DZ論壇MySQL Query Error Errno:1046錯誤MySqlError
- MySQL - pt-query-digest的下載與使用MySql
- pt-query-digest分析mysql查詢日誌MySql
- mysql 必須掌握的工具pt-query-digestMySql
- mysql效能最佳化之table_cacheMySql
- phpmysqlimysqli_query()mysqli_real_query()PHPMySql
- 解決mysql_query()報錯的相關問題MySql