欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2014年12月15日 17:21:46   投稿:mdxy-dxy  
這篇文章主要介紹了MySQL高速緩存啟動方法及參數(shù)詳解(query_cache_size),需要的朋友可以參考下

MySQL query cache從4.1版本開始提供了,不過值今天本人才對其進(jìn)行研究。默認(rèn)配置下,MySQL的該功能是沒有啟動的,可能你通過show variables like ‘%query_cache%';會發(fā)現(xiàn)其變量have_query_cache的值是yes,MYSQL初學(xué)者很容易以為這個參數(shù)為YES就代表開啟了查詢緩存,實(shí)際上是不對的,該參數(shù)表示當(dāng)前版本的MYSQL是否支持Query Cache,實(shí)際上是否開啟查詢緩存是看另外一個參數(shù)的值:query_cache_size ,該值為0,表示禁用query cache,而默認(rèn)配置正是配置為0。

配置方法:

在MYSQL的配置文件my.ini或my.cnf中找到如下內(nèi)容:

# 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

以上信息是默認(rèn)配置,其注釋意思是說,MYSQL的查詢緩存用于緩存select查詢結(jié)果,并在下次接收到同樣的查詢請求時,不再執(zhí)行實(shí)際查詢處理而直接返回結(jié)果,有這樣的查詢緩存能提高查詢的速度,使查詢性能得到優(yōu)化,前提條件是你有大量的相同或相似的查詢,而很少改變表里的數(shù)據(jù),否則沒有必要使用此功能??梢酝ㄟ^Qcache_lowmem_prunes變量的值來檢查是否當(dāng)前的值滿足你目前系統(tǒng)的負(fù)載。注意:如果你查詢的表更新比較頻繁,而且很少有相同的查詢,最好不要使用查詢緩存。

具體配置方法:

1.將query_cache_size設(shè)置為具體的大小,具體大小是多少取決于查詢的實(shí)際情況,但最好設(shè)置為1024的倍數(shù),參考值32M。

2.增加一行:query_cache_type=1

query_cache_type參數(shù)用于控制緩存的類型,注意這個值不能隨便設(shè)置,必須設(shè)置為數(shù)字,可選項(xiàng)目以及說明如下:

如果設(shè)置為0,那么可以說,你的緩存根本就沒有用,相當(dāng)于禁用了。但是這種情況下query_cache_size設(shè)置的大小系統(tǒng)是否要為其分配呢,這個問題有待于測試?

如果設(shè)置為1,將會緩存所有的結(jié)果,除非你的select語句使用SQL_NO_CACHE禁用了查詢緩存。

如果設(shè)置為2,則只緩存在select語句中通過SQL_CACHE指定需要緩存的查詢。

OK,配置完后的部分文件如下:

query_cache_size=128M
query_cache_type=1

保存文件,重新啟動MYSQL服務(wù),然后通過如下查詢來驗(yàn)證是否真正開啟了:

復(fù)制代碼 代碼如下:

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的值是否跟我們設(shè)的一致:

這里query_cache_size的值是134217728,我們設(shè)置的是128M,實(shí)際是一樣的,只是單位不同,可以自己換算下:134217728 = 128*1024*1024。

query_cache_type設(shè)置為1,顯示為ON,這個前面已經(jīng)說過了。

總之,看到上邊的顯示表示設(shè)置正確,但是在實(shí)際的查詢中是否能夠緩存查詢,還需要手動測試下,我們可以通過show status like ‘%Qcache%';語句來測試,現(xiàn)在我們開啟了查詢緩存功能,在執(zhí)行查詢前,我們先看看相關(guān)參數(shù)的值:

復(fù)制代碼 代碼如下:

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)

這里順便解釋下這個幾個參數(shù)的作用:
Qcache_free_blocks:表示查詢緩存中目前還有多少剩余的blocks,如果該值顯示較大,則說明查詢緩存中的內(nèi)存碎片過多了,可能在一定的時間進(jìn)行整理。
Qcache_free_memory:查詢緩存的內(nèi)存大小,通過這個參數(shù)可以很清晰的知道當(dāng)前系統(tǒng)的查詢內(nèi)存是否夠用,是多了,還是不夠用,DBA可以根據(jù)實(shí)際情況做出調(diào)整。
Qcache_hits:表示有多少次命中緩存。我們主要可以通過該值來驗(yàn)證我們的查詢緩存的效果。數(shù)字越大,緩存效果越理想。
Qcache_inserts: 表示多少次未命中然后插入,意思是新來的SQL請求在緩存中未找到,不得不執(zhí)行查詢處理,執(zhí)行查詢處理后把結(jié)果insert到查詢緩存中。這樣的情況的次數(shù),次數(shù)越多,表示查詢緩存應(yīng)用到的比較少,效果也就不理想。當(dāng)然系統(tǒng)剛啟動后,查詢緩存是空的,這很正常。
Qcache_lowmem_prunes:該參數(shù)記錄有多少條查詢因?yàn)閮?nèi)存不足而被移除出查詢緩存。通過這個值,用戶可以適當(dāng)?shù)恼{(diào)整緩存大小。
Qcache_not_cached: 表示因?yàn)閝uery_cache_type的設(shè)置而沒有被緩存的查詢數(shù)量。
Qcache_queries_in_cache:當(dāng)前緩存中緩存的查詢數(shù)量。
Qcache_total_blocks:當(dāng)前緩存的block數(shù)量。

下邊我們測試下:

比如執(zhí)行如下查詢語句

復(fù)制代碼 代碼如下:

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

然后執(zhí)行show status like ‘%Qcache%',看看有什么變化:

復(fù)制代碼 代碼如下:

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)

對比前面的參數(shù)值,我們發(fā)現(xiàn)Qcache_inserts變化了。Qcache_hits沒有變,下邊我們在執(zhí)行同樣的查詢
select * from user where id = 2,按照前面的理論分析:Qcache_hits應(yīng)該等于1,而Qcache_inserts應(yīng)該值不變(其他參數(shù)的值變化暫時不關(guān)注,讀者可以自行測試),再次執(zhí)行:

show status like ‘%Qcache%',看看有什么變化:

復(fù)制代碼 代碼如下:

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,果然跟我們分析的完全一致。

相關(guān)文章

  • MySQL查詢優(yōu)化的5個實(shí)用技巧

    MySQL查詢優(yōu)化的5個實(shí)用技巧

    這篇文章主要介紹了MySQL查詢優(yōu)化的5個實(shí)用技巧,從數(shù)據(jù)類型、字符集、子查詢等角度分析了MySQL查詢優(yōu)化的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • Mysql提權(quán)的多種姿勢匯總

    Mysql提權(quán)的多種姿勢匯總

    這篇文章主要給大家介紹了關(guān)于Mysql提權(quán)的多種姿勢,姿勢包括寫入Webshell、UDF提權(quán)以及MOF提權(quán),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • Mysql導(dǎo)入導(dǎo)出工具M(jìn)ysqldump和Source命令用法詳解

    Mysql導(dǎo)入導(dǎo)出工具M(jìn)ysqldump和Source命令用法詳解

    Mysql本身提供了命令行導(dǎo)出工具M(jìn)ysqldump和Mysql Source導(dǎo)入命令進(jìn)行SQL數(shù)據(jù)導(dǎo)入導(dǎo)出工作,通過Mysql命令行導(dǎo)出工具M(jìn)ysqldump命令能夠?qū)ysql數(shù)據(jù)導(dǎo)出為文本格式(txt)的SQL文件,通過Mysql Source命令能夠?qū)QL文件導(dǎo)入Mysql數(shù)據(jù)庫中,下面通過Mysql導(dǎo)入導(dǎo)出SQL實(shí)例詳解Mysqldump和Source命令的用法
    2012-09-09
  • Linux下安裝mysql的教程詳解

    Linux下安裝mysql的教程詳解

    這篇文章主要介紹了Linux下安裝mysql的教程詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • MySQL:explain結(jié)果中Extra:Impossible?WHERE?noticed?after?reading?const?tables問題

    MySQL:explain結(jié)果中Extra:Impossible?WHERE?noticed?after?rea

    這篇文章主要介紹了MySQL:explain結(jié)果中Extra:Impossible?WHERE?noticed?after?reading?const?tables問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MYSQL同步 Slave_IO_Running: No 或者Slave_SQL_Running: No的解決方法[已測]

    MYSQL同步 Slave_IO_Running: No 或者Slave_SQL_Running: No的解決方法[已測

    為了服務(wù)器更好的安全特將mysql服務(wù)器同步一下,show slave status\G出現(xiàn)了Slave_IO_Running: No 錯誤,特整理了下,方便以后配置
    2011-06-06
  • 如何使用mysql語句進(jìn)行多表聯(lián)查(以三個表為例)

    如何使用mysql語句進(jìn)行多表聯(lián)查(以三個表為例)

    這篇文章主要介紹了如何使用mysql語句進(jìn)行多表聯(lián)查(以三個表為例),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL的子查詢中FROM和EXISTS子句的使用教程

    MySQL的子查詢中FROM和EXISTS子句的使用教程

    這篇文章主要介紹了MySQL的子查詢中FROM和EXISTS子句的使用教程,子查詢是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-12-12
  • 五分鐘讓你快速弄懂MySQL索引下推

    五分鐘讓你快速弄懂MySQL索引下推

    ICP(Index Condition Pushdown)是在MySQL 5.6版本上推出的查詢優(yōu)化策略,把本來由Server層做的索引條件檢查下推給存儲引擎層來做,下面這篇文章主要給大家介紹了關(guān)于MySQL索引下推的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • MySQL回表查詢與索引覆蓋的區(qū)別

    MySQL回表查詢與索引覆蓋的區(qū)別

    本文主要介紹了MySQL回表查詢與索引覆蓋的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論