Mysql查詢緩存Query_cache的功用

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             | 16106127360 |
| query_cache_type             | ON          |
| query_cache_wlock_invalidate | OFF         |
+------------------------------+-------------+
6 rows in set (0.01 sec)

其中:mysql

query_cache_type: 是否開啓緩存功能,取值爲ON, OFF, DEMAND,默認值爲ON
  - 值爲OFF或0時,查詢緩存功能關閉;
  - 值爲ON或1時,查詢緩存功能打開,SELECT的結果符合緩存條件即會緩存,不然,不予緩存,顯式指定SQL_NO_CACHE,不予緩存;
  - 值爲DEMAND或2時,查詢緩存功能按需進行,顯式指定SQL_CACHE的SELECT語句纔會緩存;其它均不予緩存sql

query_cache_wlock_invalidate:表示當有其餘客戶端正在對MyISAM表進行寫操做時,若是查詢在query cache中,是否返回cache結果仍是等寫操做完成再讀表獲取結果。緩存

query_cache_limit 指定單個查詢可以使用的緩衝區大小,缺省爲1M;服務器

query_cache_min_res_unit爲系統分配的最小緩存塊大小,默認是4KB,設置值大對大數據查詢有好處,但若是你的查詢都是小數據查詢,就容易形成內存碎片和浪費;query_cache_size:表示緩存的大小。ide

瞭解了以上的指標後咱們就能夠在mysql的配置文件my.cnf中進行設置。而後重啓mysl服務器便可。在[mysqld]下面添加參數。通常是設置query_cache_size和query_cache_type兩項。大數據

二、上面查看的是咱們進行緩存的配置,它通常從配置文件中讀取值,可是有時候咱們須要實時查看當前mysql中的數據緩存大小。spa

mysql> show 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       | 16489053 |
| Qcache_queries_in_cache | 0        |
| Qcache_total_blocks     | 1        |
+-------------------------+----------+
8 rows in set (0.00 sec)

解釋:orm

      

Qcache_free_memory:緩存中的空閒內存。blog

Qcache_total_blocks:緩存中塊的數量。內存

Qcache_lowmem_prunes:緩存出現內存不足而且必需要進行清理以便爲更多查詢提供空間的次數。這個數字最好長時間來看;若是這個 數字在不斷增加,就表示可能碎片很是嚴重,或者內存不多。如何肯定就須要查看Qcache_free_blocks和Qcache_free_memory 兩項指標。

三、清空緩存:

flush query cache命令

 

加大緩存有助於咱們查詢的效率提升:

這裏舉個例子:

mysql> use mob_adn
Database changed
mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (3 min 18.29 sec)

mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (0.00 sec)

能夠看到緩存真的很厲害。

相關文章
相關標籤/搜索