大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 MySQL緩存機制詳解

MySQL緩存機制詳解

更新時間:2021-01-20 17:02:54 來源:動力節點 瀏覽1077次

眾所周知,緩存的設置是所有現代計算機系統發揮高性能的重要因素之一。對于MySQL數據庫來說,也是得益于MySQL緩存機制,才能夠提高MySQL數據庫的性能,減少數據的內存占比。

 

MySQL緩存機制簡單的說就是緩存SQL文本及查詢結果,如果運行相同的SQL,服務器直接從緩存中取到結果,而不需要再去解析和執行SQL。如果表更改了,那么使用這個表的所有緩存查詢將不再有效,查詢緩存中值相關條目被清空。這里的更改指的是表中任何數據或是結構發生改變,包括INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改變了的表使用MERGE表的查詢。顯然,這對于頻繁更新的表,查詢緩存是不適合的,而對于一些不常改變數據且有大量相同SQL查詢的表,查詢緩存會節約很大的性能。 

 

一、MySQL緩存規則

1.開啟了緩存,MySQL Server會自動將查詢語句和結果集返回到內存,下次再查直接從內存中取;

 

2.緩存的結果是通過sessions共享的,所以一個client查詢的緩存結果,另一個client也可以使用。

 

3.MySQL Query Cache內容為 select 的結果集, cache 使用完整的SQL字符串做 key, 并區分大小寫,空格等。即兩個SQL必須完全一致才會導致cache命中。即檢查查詢緩存時,MySQL Server不會對SQL做任何處理,它精確的使用客戶端傳來的查詢,只要字符大小寫或注釋有點不同,查詢緩存就認為是不同的查詢;

 

4.prepared statement永遠不會cache到結果,即使參數完全一樣。在 5.1 之后會得到改善。

 

5.where條件中如包含任何一個不確定的函數將永遠不會被cache, 比如current_date, now等。

 

6.date 之類的函數如果返回是以小時或天級別的,最好先算出來再傳進去。

select * from foo where date1=current_date -- 不會被 cache

select * from foo where date1='2008-12-30' -- 被cache, 正確的做法

 

7.太大的result set不會被cache (< query_cache_limit)

 

8.MySQL緩存在分庫分表環境下是不起作用的

 

9.執行SQL里有觸發器,自定義函數時,MySQL緩存也是不起作用的

 

二、緩存失效

在表的結構或數據發生改變時,查詢緩存中的數據不再有效。如INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE會導致緩存數據失效。所以查詢緩存適合有大量相同查詢的應用,不適合有大量數據更新的應用。

一旦表數據進行任何一行的修改,基于該表相關cache立即全部失效。

 

  • 手動清理緩存

手動清理緩存可以使用下面三個SQL

1.FLUSH QUERY CACHE; #清理查詢緩存內存碎片

2.RESET QUERY CACHE;#從查詢緩存中移除所有查詢

3.FLUSH TABLES; #關閉所有打開的表,同時該操作會清空查詢緩存中的內容

 

四、緩存機制中的內存管理

MySQL Query Cache 使用內存池技術,自己管理內存釋放和分配,而不是通過操作系統。內存池使用的基本單位是變長的block, 用來存儲類型、大小、數據等信息;一個result set的cache通過鏈表把這些block串起來。block最短長度為query_cache_min_res_unit。

 

當服務器啟動的時候,會初始化緩存需要的內存,是一個完整的空閑塊。當查詢結果需要緩存的時候,先從空閑塊中申請一個數據塊為參數query_cache_min_res_unit配置的空間,即使緩存數據很小,申請數據塊也是這個,因為查詢開始返回結果的時候就分配空間,此時無法預知結果多大。

 

分配內存塊需要先鎖住空間塊,所以操作很慢,MySQL會盡量避免這個操作,選擇盡可能小的內存塊,如果不夠,繼續申請,如果存儲完時有空余則釋放多余的。

但是如果并發的操作,余下的需要回收的空間很小,小于query_cache_min_res_unit,不能再次被使用,就會產生碎片。

 

MySQL緩存機制從某種程度上來說,和其他的系統緩存有類似的作用:提高系統的性能,釋放系統的內存空間。但MySQL緩存機制又有著其獨特的特性,對于數據重復性比較高的查詢有著顯著的作用。想要學習更多的MySQL知識,敬請期待本站的MySQL教程,名師講解,各種知識點一目了然。

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美一级欧美三级 | 亚洲成精品动漫久久精久 | 爱操在线 | 四虎国产永久免费久久 | 国产亚洲精品中文带字幕21页 | 中文字幕热久久久久久久 | 免费黄色在线观看 | 国产精品看片 | 一级片一级毛片 | 欧美高清在线视频在线99精品 | 成人午夜精品网站在线观看 | 97国产在线视频 | 一级国产精品一级国产精品片 | 一级黄色片毛片 | 中文字幕精品在线视频 | 成人国产一区 | 国产中的精品一区的 | 成年人的毛片 | 精品久久久久久中文字幕女 | 一本久道热中字伊人 | 香蕉一级视频 | 国产在线观看午夜不卡 | 成人短视频在线 | 国产精品一区久久精品 | 福利视频网页 | 手机看片日韩高清国产欧美 | 日本毛片在线观看 | 欧美性狂猛bbbbbbxxxx | 亚洲精品成人在线 | 久久这里只有精品免费视频 | 欧美一级毛片生活片 | 欧美激情午夜 | 精品久久久久久久久久久 | 天天干天天综合 | 亚洲专区欧美专区 | 成人在色线视频在线观看免费大全 | 天天干天天舔天天射 | 久久香蕉国产线看精品 | 亚洲精品一区二区三区网址 | 国产高清一区二区三区免费视频 | 五月天婷婷在线视频国产在线 |