最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql select緩存機(jī)制使用詳解

 更新時(shí)間:2018年06月18日 12:36:35   作者:lpfuture  
這篇文章主要介紹了mysql select緩存機(jī)制使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

mysql Query Cache 默認(rèn)為打開。從某種程度可以提高查詢的效果,但是未必是最優(yōu)的解決方案,如果有的大量的修改和查詢時(shí),由于修改造成的cache失效,會(huì)給服務(wù)器造成很大的開銷,可以通過query_cache_type【0(OFF)1(ON)2(DEMAND)】來控制緩存的開關(guān).

需要注意的是mysql query cache 是對(duì)大小寫敏感的,因?yàn)镼uery Cache 在內(nèi)存中是以 HASH 結(jié)構(gòu)來進(jìn)行映射,HASH 算法基礎(chǔ)就是組成 SQL 語句的字符,所以 任何sql語句的改變重新cache,這也是項(xiàng)目開發(fā)中要建立sql語句書寫規(guī)范的原因吧

1. 何時(shí)cache

a) mysql query cache內(nèi)容為 select 的結(jié)果集, cache 使用完整的 sql 字符串做 key, 并區(qū)分大小寫,空格等。即兩個(gè)sql必須完全一致才會(huì)導(dǎo)致cache命中。

b) prepared statement永遠(yuǎn)不會(huì)cache到結(jié)果,即使參數(shù)完全一樣。據(jù)說在 5.1 之后會(huì)得到改善。

c) where條件中如包含了某些函數(shù)永遠(yuǎn)不會(huì)被cache, 比如current_date, now等。

d) date 之類的函數(shù)如果返回是以小時(shí)或天級(jí)別的,最好先算出來再傳進(jìn)去。
select * from foo where date1=current_date -- 不會(huì)被 cache
select * from foo where date1='2008-12-30' -- 被cache, 正確的做法

e) 太大的result set不會(huì)被cache (< query_cache_limit)

2. 何時(shí)invalidate

a) 一旦表數(shù)據(jù)進(jìn)行任何一行的修改,基于該表相關(guān)cache立即全部失效。

b) 為什么不做聰明一點(diǎn)判斷修改的是否cache的內(nèi)容?因?yàn)榉治鯿ache內(nèi)容太復(fù)雜,服務(wù)器需要追求最大的性能。

3. 性能

a) cache 未必所有場合總是會(huì)改善性能

當(dāng)有大量的查詢和大量的修改時(shí),cache機(jī)制可能會(huì)造成性能下降。因?yàn)槊看涡薷臅?huì)導(dǎo)致系統(tǒng)去做cache失效操作,造成不小開銷。

另外系統(tǒng)cache的訪問由一個(gè)單一的全局鎖來控制,這時(shí)候大量>的查詢將被阻塞,直至鎖釋放。所以不要簡單認(rèn)為設(shè)置cache必定會(huì)帶來性能提升。

b) 大result set不會(huì)被cache的開銷

太大的result set不會(huì)被cache, 但mysql預(yù)先不知道result set的長度,所以只能等到reset set在cache添加到臨界值 query_cache_limit 之后才會(huì)簡單的把這個(gè)cache 丟棄。這并不是一個(gè)高效的操作。如果mysql status中Qcache_not_cached太大的話, 則可對(duì)潛在的大結(jié)果集的sql顯式添加 SQL_NO_CACHE 的控制。
query_cache_min_res_unit = (query_cache_size – Qcache_free_memory) / Qcache_queries_in_cache

4. 內(nèi)存池使用

mysql query cache 使用內(nèi)存池技術(shù),自己管理內(nèi)存釋放和分配,而不是通過操作系統(tǒng)。內(nèi)存池使用的基本單位是變長的block, 一個(gè)result set的cache通過鏈表把這些block串起來。因?yàn)榇娣舝esult set的時(shí)候并不知道這個(gè)resultset最終有多大。block最短長度為 query_cache_min_res_unit, resultset 的最后一個(gè)block會(huì)執(zhí)行trim操作。

Query Cache 在提高數(shù)據(jù)庫性能方面具有非常重要的作用。

其設(shè)定也非常簡單,僅需要在配置文件寫入兩行: query_cache_type 和 query_cache _size,而且 MySQL 的 query cache 非???!而且一旦命中,就直接發(fā)送給客戶端,節(jié)約大量的 CPU 時(shí)間。 

當(dāng)然,非 SELECT 語句對(duì)緩沖是有影響的,它們可能使緩沖中的數(shù)據(jù)過期。一個(gè) UPDATE 語句引起的部分表修改,將導(dǎo)致對(duì)該表所有的緩沖數(shù)據(jù)失效,這是 MySQL 為了平衡性能而沒有采取的措施。因?yàn)?,如果每?UPDATE 需要檢查修改的數(shù)據(jù),然后撤出部分緩沖將導(dǎo)致代碼的復(fù)雜度增加。

query_cache_type 0 代表不使用緩沖, 1 代表使用緩沖,2 代表根據(jù)需要使用。

設(shè)置 1 代表緩沖永遠(yuǎn)有效,如果不需要緩沖,就需要使用如下語句:

代碼如下

SELECT SQL_NO_CACHE * FROM my_table WHERE ...

如果設(shè)置為 2 ,需要開啟緩沖,可以用如下語句:

代碼如下

SELECT SQL_CACHE * FROM my_table WHERE ...

用 SHOW STATUS 可以查看緩沖的情況:

代碼如下

mysql> show status like 'Qca%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_queries_in_cache | 8 |
| Qcache_inserts | 545875 |
| Qcache_hits | 83951 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 2343256 |
| Qcache_free_memory | 33508248 |
| Qcache_free_blocks | 1 |
| Qcache_total_blocks | 18 |
+-------------------------+----------+
8 rows in set (0.00 sec)

如果需要計(jì)算命中率,需要知道服務(wù)器執(zhí)行了多少 SELECT 語句:

代碼如下

mysql> show status like 'Com_sel%';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Com_select | 2889628 |
+---------------+---------+
1 row in set (0.01 sec)

在本例中, MySQL 命中了 2,889,628 條查詢中的 83,951 條,而且 INSERT 語句只有 545,875 條。因此,它們兩者的和和280萬的總查詢相比有很大差距,因此,我們知道本例使用的緩沖類型是 2 。

而在類型是 1 的例子中, Qcache_hits 的數(shù)值會(huì)遠(yuǎn)遠(yuǎn)大于 Com_select

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mysql查詢條件判斷是否包含字符串的方法實(shí)現(xiàn)

    Mysql查詢條件判斷是否包含字符串的方法實(shí)現(xiàn)

    本文主要介紹了Mysql查詢條件判斷是否包含字符串的方法實(shí)現(xiàn),主要包括like,locate,postion,instr,find_in_set這幾種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • MYSQL將表名稱修改成大寫的存儲(chǔ)過程

    MYSQL將表名稱修改成大寫的存儲(chǔ)過程

    這篇文章主要為大家詳細(xì)介紹了MYSQL將表名稱修改成大寫的存儲(chǔ)過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • mysql函數(shù)IFNULL使用的及注意事項(xiàng)說明

    mysql函數(shù)IFNULL使用的及注意事項(xiàng)說明

    這篇文章主要介紹了mysql函數(shù)IFNULL使用的及注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 刪除MySQL表中重復(fù)數(shù)據(jù)詳解

    刪除MySQL表中重復(fù)數(shù)據(jù)詳解

    這篇文章主要為大家介紹了刪除MySQL表中重復(fù)數(shù)據(jù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • SQL慢查詢優(yōu)化方案詳解

    SQL慢查詢優(yōu)化方案詳解

    這篇文章主要介紹了SQL慢查詢優(yōu)化方案詳解,如果你的項(xiàng)目中出現(xiàn)了一些查詢超時(shí)情況,很可能是項(xiàng)目中有了一些慢查詢的情況產(chǎn)生,下面就慢查詢的排查和解決方案進(jìn)行一番分析,需要的朋友可以參考下
    2023-07-07
  • MySQL查詢和篩選存儲(chǔ)的JSON數(shù)據(jù)的操作方法

    MySQL查詢和篩選存儲(chǔ)的JSON數(shù)據(jù)的操作方法

    MySQL是常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),為了支持非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)和查詢,MySQL引入了對(duì)JSON數(shù)據(jù)類型的支持,JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,在現(xiàn)代應(yīng)用程序中得到了廣泛應(yīng)用,處理和存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)變得越來越重要,本文給大家介紹mysql查詢JSON數(shù)據(jù)的相關(guān)知識(shí),一起看看吧
    2024-01-01
  • MySQL主庫binlog(master-log)與從庫relay-log關(guān)系代碼詳解

    MySQL主庫binlog(master-log)與從庫relay-log關(guān)系代碼詳解

    這篇文章主要介紹了MySQL主庫binlog與從庫relay-log關(guān)系的相關(guān)內(nèi)容,涉及部分代碼,需要的朋友可以參考。
    2017-10-10
  • IDEA的database插件無法連接mysql的解決辦法(08001錯(cuò)誤)

    IDEA的database插件無法連接mysql的解決辦法(08001錯(cuò)誤)

    用navicat鏈接數(shù)據(jù)庫正常,mysql控制臺(tái)操作正常,但是用IDEA的數(shù)據(jù)庫插件鏈接一直報(bào) 08001 錯(cuò)誤,本文就給大家介紹一下IDEA的database插件無法連接mysql報(bào)08001錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2024-07-07
  • 開源MySQL高效數(shù)據(jù)倉庫解決方案:Infobright詳細(xì)介紹

    開源MySQL高效數(shù)據(jù)倉庫解決方案:Infobright詳細(xì)介紹

    這篇文章主要介紹了開源MySQL高效數(shù)據(jù)倉庫解決方案:Infobright詳細(xì)介紹,本文講解了Infobright特征、Infobright的價(jià)值、Infobright的適用場景、與MySQL對(duì)比等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • MySQL備份腳本的寫法

    MySQL備份腳本的寫法

    這篇文章主要介紹了MySQL備份腳本的寫法,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論

全州县| 克山县| 清水县| 甘肃省| 三台县| 永顺县| 韶山市| 龙游县| 时尚| 合作市| 苏尼特右旗| 龙江县| 介休市| 瓮安县| 钟山县| 那坡县| 张家口市| 安岳县| 修文县| 双城市| 洛浦县| 府谷县| 修武县| 杨浦区| 广宁县| 炎陵县| 江川县| 天镇县| 溧阳市| 岐山县| 科技| 东辽县| 上杭县| 郴州市| 北流市| 二连浩特市| 玛曲县| 屯门区| 邵武市| 祁阳县| 乐平市|