程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL高速緩存啟動辦法及參數詳解(query_cache_size)

MySQL高速緩存啟動辦法及參數詳解(query_cache_size)

編輯:MySQL綜合教程

MySQL高速緩存啟動辦法及參數詳解(query_cache_size)。本站提示廣大學習愛好者:(MySQL高速緩存啟動辦法及參數詳解(query_cache_size))文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL高速緩存啟動辦法及參數詳解(query_cache_size)正文


MySQL query cache從4.1版本開端供給了,不外值明天自己才對其停止研討。默許設置裝備擺設下,MySQL的該功效是沒有啟動的,能夠你經由過程show variables like ‘%query_cache%';會發明其變量have_query_cache的值是yes,MYSQL初學者很輕易認為這個參數為YES就代表開啟了查詢緩存,現實上是纰謬的,該參數表現以後版本的MYSQL能否支撐Query Cache,現實上能否開啟查詢緩存是看別的一個參數的值:query_cache_size ,該值為0,表現禁用query cache,而默許設置裝備擺設恰是設置裝備擺設為0。

設置裝備擺設辦法:

在MYSQL的設置裝備擺設文件my.ini或my.cnf中找到以下內容:

# Query cache is used to cache SELECT results and later return them
# without actual executing the same query once again. Having the query
# cache enabled may result in significant speed improvements, if your
# have a lot of identical queries and rarely changing tables. See the
# “Qcache_lowmem_prunes” status variable to check if the current value
# is high enough for your load.
# Note: In case your tables change very often or if your queries are
# textually different every time, the query cache may result in a
# slowdown instead of a performance improvement.

query_cache_size=0

以上信息是默許設置裝備擺設,其正文意思是說,MYSQL的查詢緩存用於緩存select查詢成果,並鄙人次吸收到異樣的查詢要求時,不再履行現實查詢處置而直接前往成果,有如許的查詢緩存能進步查詢的速度,使查詢機能獲得優化,條件前提是你有年夜量的雷同或類似的查詢,而很少轉變內外的數據,不然沒有需要應用此功效。可以經由過程Qcache_lowmem_prunes變量的值來檢討能否以後的值知足你今朝體系的負載。留意:假如你查詢的表更新比擬頻仍,並且很少有雷同的查詢,最好不要應用查詢緩存。

詳細設置裝備擺設辦法:

1.將query_cache_size設置為詳細的年夜小,詳細年夜小是若干取決於查詢的現實情形,但最好設置為1024的倍數,參考值32M。

2.增長一行:query_cache_type=1

query_cache_type參數用於掌握緩存的類型,留意這個值不克不及隨意設置,必需設置為數字,可選項目和解釋以下:

假如設置為0,那末可以說,你的緩存基本就沒有效,相當於禁用了。然則這類情形下query_cache_size設置的年夜小體系能否要為其分派呢,這個成績有待於測試?

假如設置為1,將會緩存一切的成果,除非你的select語句應用SQL_NO_CACHE禁用了查詢緩存。

假如設置為2,則只緩存在select語句中經由過程SQL_CACHE指定須要緩存的查詢。

OK,設置裝備擺設完後的部門文件以下:

query_cache_size=128M
query_cache_type=1

保留文件,從新啟動MYSQL辦事,然後經由過程以下查詢來驗證能否真正開啟了:


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             | 134217728 |
| query_cache_type             | ON        |
| query_cache_wlock_invalidate | OFF       |
+——————————+———–+
6 rows in set (0.00 sec)

重要看query_cache_size和query_cache_type的值能否跟我們設的分歧:

這裡query_cache_size的值是134217728,我們設置的是128M,現實是一樣的,只是單元分歧,可以本身換算下:134217728 = 128*1024*1024。

query_cache_type設置為1,顯示為ON,這個後面曾經說過了。

總之,看到上邊的顯示表現設置准確,然則在現實的查詢中能否可以或許緩存查詢,還須要手動測試下,我們可以經由過程show status like ‘%Qcache%';語句來測試,如今我們開啟了查詢緩存功效,在履行查詢前,我們先看看相干參數的值:


mysql> show status like ‘%Qcache%';
+————————-+———–+
| Variable_name           | Value     |
+————————-+———–+
| Qcache_free_blocks      | 1         |
| Qcache_free_memory      | 134208800 |
| Qcache_hits             | 0         |
| Qcache_inserts          | 0         |
| Qcache_lowmem_prunes    | 0         |
| Qcache_not_cached       | 2         |
| Qcache_queries_in_cache | 0         |
| Qcache_total_blocks     | 1         |
+————————-+———–+
8 rows in set (0.00 sec)

這裡趁便說明下這個幾個參數的感化:
Qcache_free_blocks:表現查詢緩存中今朝還有若干殘剩的blocks,假如該值顯示較年夜,則解釋查詢緩存中的內存碎片過量了,能夠在必定的時光停止整頓。
Qcache_free_memory:查詢緩存的內存年夜小,經由過程這個參數可以很清楚的曉得以後體系的查詢內存能否夠用,是多了,照樣不敷用,DBA可以依據現實情形做出調劑。
Qcache_hits:表現有若干次射中緩存。我們重要可以經由過程該值來驗證我們的查詢緩存的後果。數字越年夜,緩存後果越幻想。
Qcache_inserts: 表現若干次未射中然後拔出,意思是新來的SQL要求在緩存中未找到,不能不履行查詢處置,履行查詢處置後把成果insert到查詢緩存中。如許的情形的次數,次數越多,表現查詢緩存運用到的比擬少,後果也就不睬想。固然體系剛啟動後,查詢緩存是空的,這很正常。
Qcache_lowmem_prunes:該參數記載有若干條查詢由於內存缺乏而被移除出查詢緩存。經由過程這個值,用戶可以恰當的調劑緩存年夜小。
Qcache_not_cached: 表現由於query_cache_type的設置而沒有被緩存的查詢數目。
Qcache_queries_in_cache:以後緩存中緩存的查詢數目。
Qcache_total_blocks:以後緩存的block數目。

下邊我們測試下:

好比履行以下查詢語句


mysql> select * from user where id = 2;
+—-+——-+
| id | name  |
+—-+——-+
|  2 | test2 |
+—-+——-+
1 row in set (0.02 sec)

然後履行show status like ‘%Qcache%',看看有甚麼變更:


mysql> show status like ‘%Qcache%';
+————————-+———–+
| Variable_name           | Value     |
+————————-+———–+
| Qcache_free_blocks      | 1         |
| Qcache_free_memory      | 134207264 |
| Qcache_hits             | 0         |
| Qcache_inserts          | 1         |
| Qcache_lowmem_prunes    | 0         |
| Qcache_not_cached       | 3         |
| Qcache_queries_in_cache | 1         |
| Qcache_total_blocks     | 4         |
+————————-+———–+
8 rows in set (0.00 sec)

比較後面的參數值,我們發明Qcache_inserts變更了。Qcache_hits沒有變,下邊我們在履行異樣的查詢
select * from user where id = 2,依照後面的實際剖析:Qcache_hits應當等於1,而Qcache_inserts應當值不變(其他參數的值變更臨時不存眷,讀者可以自行測試),再次履行:

show status like ‘%Qcache%',看看有甚麼變更:


mysql> show status like ‘%Qcache%';
+————————-+———–+
| Variable_name           | Value     |
+————————-+———–+
| Qcache_free_blocks      | 1         |
| Qcache_free_memory      | 134207264 |
| Qcache_hits             | 1         |
| Qcache_inserts          | 1         |
| Qcache_lowmem_prunes    | 0         |
| Qcache_not_cached       | 4         |
| Qcache_queries_in_cache | 1         |
| Qcache_total_blocks     | 4         |
+————————-+———–+
8 rows in set (0.00 sec)

OK,果真跟我們剖析的完整分歧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved