国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL的查詢緩存機(jī)制基本學(xué)習(xí)教程

2024-07-24 12:45:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

MySQL緩存機(jī)制簡(jiǎn)單的說(shuō)就是緩存sql文本及查詢結(jié)果,如果運(yùn)行相同的sql,服務(wù)器直接從緩存中取到結(jié)果,而不需要再去解析和執(zhí)行sql。如果表更改 了,那么使用這個(gè)表的所有緩沖查詢將不再有效,查詢緩存值的相關(guān)條目被清空。更改指的是表中任何數(shù)據(jù)或是結(jié)構(gòu)的改變,包括INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改變了的表的使用MERGE表的查詢。顯然,這對(duì)于頻繁更新的表,查詢緩存是不適合的,而對(duì)于一些不常改變數(shù)據(jù)且有 大量相同sql查詢的表,查詢緩存會(huì)節(jié)約很大的性能。

命中條件

緩存存在一個(gè)hash表中,通過(guò)查詢SQL,查詢數(shù)據(jù)庫(kù),客戶端協(xié)議等作為key.在判斷是否命中前,MySQL不會(huì)解析SQL,而是直接使用SQL去查詢緩存,SQL任何字符上的不同,如空格,注釋,都會(huì)導(dǎo)致緩存不命中.

如果查詢中有不確定數(shù)據(jù),例如CURRENT_DATE()和NOW()函數(shù),那么查詢完畢后則不會(huì)被緩存.所以,包含不確定數(shù)據(jù)的查詢是肯定不會(huì)找到可用緩存的

 

工作流程

1. 服務(wù)器接收SQL,以SQL和一些其他條件為key查找緩存表(額外性能消耗)

2. 如果找到了緩存,則直接返回緩存(性能提升)

3. 如果沒(méi)有找到緩存,則執(zhí)行SQL查詢,包括原來(lái)的SQL解析,優(yōu)化等.

4. 執(zhí)行完SQL查詢結(jié)果以后,將SQL查詢結(jié)果存入緩存表(額外性能消耗)


緩存失效

當(dāng)某個(gè)表正在寫(xiě)入數(shù)據(jù),則這個(gè)表的緩存(命中檢查,緩存寫(xiě)入等)將會(huì)處于失效狀態(tài).在Innodb中,如果某個(gè)事務(wù)修改了表,則這個(gè)表的緩存在事務(wù)提交前都會(huì)處于失效狀態(tài),在這個(gè)事務(wù)提交前,這個(gè)表的相關(guān)查詢都無(wú)法被緩存.

 

緩存的內(nèi)存管理

緩存會(huì)在內(nèi)存中開(kāi)辟一塊內(nèi)存(query_cache_size)來(lái)維護(hù)緩存數(shù)據(jù),其中有大概40K的空間是用來(lái)維護(hù)緩存的元數(shù)據(jù)的,例如空間內(nèi)存,數(shù)據(jù)表和查詢結(jié)果的映射,SQL和查詢結(jié)果的映射等.

MySQL將這個(gè)大內(nèi)存塊分為小的內(nèi)存塊(query_cache_min_res_unit),每個(gè)小塊中存儲(chǔ)自身的類型,大小和查詢結(jié)果數(shù)據(jù),還有指向前后內(nèi)存塊的指針.

MySQL需要設(shè)置單個(gè)小存儲(chǔ)塊的大小,在SQL查詢開(kāi)始(還未得到結(jié)果)時(shí)就去申請(qǐng)一塊空間,所以即使你的緩存數(shù)據(jù)沒(méi)有達(dá)到這個(gè)大小,也需要用這個(gè)大小的數(shù)據(jù)塊去存(這點(diǎn)跟Linux文件系統(tǒng)的Block一樣).如果結(jié)果超出這個(gè)內(nèi)存塊的大小,則需要再去申請(qǐng)一個(gè)內(nèi)存塊.當(dāng)查詢完成發(fā)現(xiàn)申請(qǐng)的內(nèi)存塊有富余,則會(huì)將富余的空間釋放掉,這就會(huì)造成內(nèi)存碎片問(wèn)題,見(jiàn)下圖

2015112795908326.png (1061×575)

此處查詢1和查詢2之間的空白部分就是內(nèi)存碎片,這部分空閑內(nèi)存是有查詢1查詢完以后釋放的,假設(shè)這個(gè)空間大小小于MySQL設(shè)定的內(nèi)存塊大小,則無(wú)法再被使用,造成碎片問(wèn)題

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黎平县| 临西县| 辽中县| 海晏县| 辽源市| 洪泽县| 滕州市| 山丹县| 德钦县| 内黄县| 武穴市| 铅山县| 丰城市| 宝坻区| 西充县| 七台河市| 栖霞市| 秦皇岛市| 上虞市| 阜平县| 大英县| 绥宁县| 扶绥县| 龙州县| 南漳县| 灯塔市| 林甸县| 酉阳| 桑植县| 洛浦县| 浙江省| 望城县| 泸定县| 贵溪市| 定陶县| 恩平市| 松潘县| 泸溪县| 临朐县| 宁夏| 南川市|