MySQL query_cache_type的DEMAND引數介紹和使用舉例
Query Cache儲存SELECT語句及其產生的資料結果,特別適用於表資料變化不是很頻繁的場景,例如一些靜態頁面,
或者頁面中的某塊不經常發生 變化的資訊。如果此表上有任何寫表操作發生,那麼和這個表相關的所有快取都將失效。
由於Query Cache需要快取最新資料結果,因此表資料 發生任何變化(INSERT、UPDATE、DELETE或其他有可能產生
資料變化的操作),都會導致Query Cache被重新整理。對於更新壓力大的資料庫來說,查詢快取的命中率也會非常低。
但我們可以將引數 query_cache_type 設定成 DEMAND(按需及用)方式,這樣對於預設的SQL語句不使用查詢快取,
而對於確定要使用query cache的SQL語句, 可以用sql_cache的方法指定,例如:
select sql_cache * from table_name;
或 select sql_cache count(*) from table_name;
以下是query_cache_type三個引數的含義:
query_cache_type=0(OFF)關閉
query_cache_type=1(ON)快取所有結果,除非select語句使用SQL_NO_CACHE禁用查詢快取
query_cache_type=2(DEMAND),只快取select語句中透過SQL_CACHE指定需要快取的查詢
修改為DEMAND方式:
vi /etc/my.cnf,加入如下行:
query_cache_type =2
儲存並重啟mysql
mysql5.7版本如果直接修改可能會報錯:
mysql>set global query_cache_type=2;
ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it
檢視是否開啟DEMAND引數:
mysql>show variables like '%query_cache%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | DEMAND |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
6 rows in set (0.44 sec)
mysql>>show global status like '%Qcache%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 3 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+---------+
8 rows in set (0.14 sec)
相關引數解釋如下:
Qcache_free_blocks:表示查詢快取中目前還有多少剩餘的blocks,如果該值顯示較大,說明查詢快取中的記憶體碎片過多。
Qcache_free_memory:表示Query Cache中目前剩餘的記憶體大小。
Qcache_hits:表示有多少次命中快取。
Qcache_inserts: 表示多少次未命中快取然後插入,意思是新來的SQL請求如果在快取中未找到,不得不執行查詢處理,執行查詢處理後把結果insert到查詢快取中。
Qcache_lowmem_prunes:該引數記錄有多少條查詢因為記憶體不足而被移出查詢快取。
Qcache_not_cached: 表示因為query_cache_type的設定而沒有被快取的查詢數量。
Qcache_queries_in_cache:當前快取中快取的查詢數量。
Qcache_total_blocks:當前快取的block數量。
執行一次查詢:
>select count(*) from test;
+----------+
| count(*) |
+----------+
| 36675 |
+----------+
1 row in set (0.41 sec)
然後執行show status like '%Qcache%',看看有什麼變化:
mysql>show global status like '%Qcache%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 4 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+---------+
8 rows in set (0.01 sec)
Qcache_hits為0.
再次執行select count(*) from test;
mysql>select count(*) from test;
+----------+
| count(*) |
+----------+
| 36675 |
+----------+
1 row in set (0.02 sec)
mysql>show global status like '%Qcache%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 5 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+---------+
8 rows in set (0.00 sec)
Qcache_hits依舊為0,說明沒有使用Query Cache.
加sql_cache執行一下語句,看看有什麼變化:
mysql>select sql_cache count(*) from test;
+----------+
| count(*) |
+----------+
| 36675 |
+----------+
1 row in set, 1 warning (0.00 sec)
mysql>show global status like '%Qcache%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1030296 |
| Qcache_hits | 1 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 5 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+-------------------------+---------+
8 rows in set (0.00 sec)
可以看到Qcache_hits的值變為了1,再次執行:
mysql>select sql_cache count(*) from test;
+----------+
| count(*) |
+----------+
| 36675 |
+----------+
1 row in set, 1 warning (0.00 sec)
mysql>show global status like '%Qcache%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1030296 |
| Qcache_hits | 2 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 5 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+-------------------------+---------+
8 rows in set (0.01 sec)
可以看到Qcache_hits的值變為了2,每次執行都累加1,說明使用了query cache。
備註:從MySQL 8.0版本以後直接取消了查詢快取的整塊功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2640129/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql一些引數的介紹MySql
- MySQL change buffer介紹和相關引數調整建議MySql
- Python qutip用法(舉例介紹)Python
- MongoDB Sharding Balancer介紹和設定方法舉例MongoDB
- mysql二進位制日誌的引數介紹MySql
- MySQL中的統計資訊相關引數介紹MySql
- docker 引數介紹Docker
- gcc 常用引數介紹GC
- HRMS Function 引數介紹Function
- 【MYSQL】兩階段提交及相關引數介紹MySql
- MySQL Innodb_fast_shutdown引數的內部過程介紹MySqlAST
- 優化mysql的效能,詳細介紹Mysql的配置my.cnf的引數優化MySql
- Oracle 各版本引數/隱藏引數 介紹Oracle
- mysql 複製引數replicate_do_db和replicate_ignore_db介紹MySql
- MongoDB啟動引數介紹MongoDB
- PostgreSQLGUC引數級別介紹SQL
- margin引數簡單介紹
- margin 引數簡單介紹
- ipchains引數介紹(轉)AI
- 網路測試DOS命令詳細介紹及使用方法舉例
- oracle impdp network_link引數使用介紹Oracle
- MySQL的兩種filesort演算法介紹以及相關引數的設定和優化MySql演算法優化
- mysql 引數修改 一例MySql
- 3個例項介紹shell指令碼中幾個特殊引數的用法指令碼
- Oracle expdp impdp dump引數介紹Oracle
- eclipse 啟動引數介紹Eclipse
- 【儲存】megacli 常用引數介紹
- linux的vm相關引數介紹Linux
- javascript bind()第一個引數以後引數介紹JavaScript
- Object-c KVC的使用和舉例Object
- LayerMask 的介紹和使用
- MySQL MRR和ICP介紹MySql
- C/C++—— 分析命令列引數的getopt()函式使用介紹C++命令列函式
- MySQL資料備份多種引數介紹及簡單示例MySql
- MySQL Batched Key Access (BKA)原理和設定使用方法舉例MySqlBAT
- Oracle 靜態引數與動態引數型別介紹Oracle型別
- zblog獲取GET/POST等值函式“GetVars”引數和使用方法介紹函式
- MySQL觸發器的使用和優缺點介紹ZGMHMySql觸發器