最新要闻
- 河南省运会闭幕式 河南省运会闭幕式 基本情况讲解
- 中国车企亮相约翰内斯堡汽车节
- 杜园园修复双眼皮怎么样?技术真的很厉害吗?这篇会给出详细解答!
- 真的又到绝境了!小组赛0胜3负,姚明赛后表情十分严肃
- 《乡村爱情》系列新剧再迎老戏骨加盟,《长相思》中也有他
- 非京籍上北京朝阳区私立初中转学公立学校要求盘点
- 重庆北碚:“府院联动”共促企业用工合规建设
- 上手体验大智慧VIP,和其他金融信息工具有什么不同?
- 2023年8月发泡材料股票的龙头股有哪些?
- 苹果启动2024年SRDP计划:邀请专家寻找iPhone漏洞
- 中报速递|万科上半年收入约2009亿元,归母净利润近99亿元
- 首发399元!小米米家石墨烯踢脚线电暖器2发布:2200W 5秒速热
- 紧跟携程步伐!去哪儿宣布员工生育补贴政策:二胎每年生日一万现金
- 女子刚下车挡风玻璃被树砸穿 直插驾驶位:画面让人后怕
- 四轮四电机 比亚迪仰望D级轿车专利图曝光:或售百万
- 看个电视太费劲!电视广告到底如何消灭?
手机
分析人士:糖市供应紧张局面加剧
日本福岛县水产品价格显著下跌 餐馆就餐人数明显减少
- 分析人士:糖市供应紧张局面加剧
- 日本福岛县水产品价格显著下跌 餐馆就餐人数明显减少
- 瑞安建业上半年收入38亿港元 净亏损7900万港元
- 沪深股通|京能电力8月30日获外资卖出24.38万股
- 共话中国经济新机遇|巴西经济学家夏华声:中国仍是世界经济增长的重要引擎
- 英国将推迟“脱欧”后对欧盟商品的边境检查至2024年
家电
如何避免系统预读失效和缓存污染的问题?
面试中的两个问题:
(资料图)
操作系统在读磁盘的时候会额外多读一些数据到内存中,最后也没有用到,如何改善?
批量读取数据的时候,可能会热点数据挤出去,如何改善?
Linux 和 MySQL 的缓存Linux 操作系统的缓存在应用程序读取文件的数据的时候,Linux 操作系统是会对读取的文件数据进行缓存的,会缓存在文件系统中的Page Cache(如下图中的页缓存)。
Page Cache 属于内存空间里的数据,由于内存访问比磁盘访问快很多,在下一次访问相同的数据就不需要通过磁盘 I/O 了,命中缓存就直接返回数据即可。
因此,Page Cache 起到了加速访问数据的作用。
MySQL 的缓存MySQL 的数据是存储在磁盘里的,为了提升数据库的读写性能,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),Buffer Pool 属于内存空间里的数据。
有了缓冲池后:
当读取数据时,如果数据存在于 Buffer Pool 中,客户端就会直接读取 Buffer Pool 中的数据,否则再去磁盘中读取。当修改数据时,首先是修改 Buffer Pool 中数据所在的页,然后将其页设置为脏页,最后由后台线程将脏页写入到磁盘。传统 LRU 是如何管理内存数据的?Linux 的 Page Cache 和 MySQL 的 Buffer Pool 的大小是有限的,并不能无限的缓存数据,对于一些频繁访问的数据我们希望可以一直留在内存中,而一些很少访问的数据希望可以在某些时机可以淘汰掉,从而保证内存不会因为满了而导致无法再缓存新的数据,同时还能保证常用数据留在内存中。
要实现这个,最容易想到的就是 LRU(Least recently used)算法。
LRU 算法一般是用「链表」作为数据结构来实现的,链表头部的数据是最近使用的,而链表末尾的数据是最久没被使用的。那么,当空间不够了,就淘汰最久没被使用的节点,也就是链表末尾的数据,从而腾出内存空间。
因为 Linux 的 Page Cache 和 MySQL 的 Buffer Pool 缓存的基本数据单位都是页(Page)单位,所以后续以「页」名称代替「数据」。
传统的 LRU 算法的实现思路是这样的:
当访问的页在内存里,就直接把该页对应的 LRU 链表节点移动到链表的头部。当访问的页不在内存里,除了要把该页放入到 LRU 链表的头部,还要淘汰 LRU 链表末尾的页。存在的问题:
如果一条数据仅仅是突然被访问(有可能后续将不再访问),在 LRU 算法下,此数据将被定义为热数据,最晚被淘汰。但实际生产环境下,我们很多时候需要计算的是一段时间下key的访问频率,淘汰此时间段内的冷数据。
预读失效,怎么办?什么是预读机制?Linux 操作系统为基于 Page Cache 的读缓存机制提供预读机制,一个例子是:
应用程序只想读取磁盘上文件 A 的 offset 为 0-3KB 范围内的数据,由于磁盘的基本读写单位为 block(4KB),于是操作系统至少会读 0-4KB 的内容,这恰好可以在一个 page 中装下。但是操作系统出于空间局部性原理(靠近当前被访问数据的数据,在未来很大概率会被访问到),会选择将磁盘块 offset [4KB,8KB)、[8KB,12KB) 以及 [12KB,16KB) 都加载到内存,于是额外在内存中申请了 3 个 page;下图代表了操作系统的预读机制:
上图中,应用程序利用 read 系统调动读取 4KB 数据,实际上内核使用预读机制(ReadaHead) 机制完成了 16KB 数据的读取,也就是通过一次磁盘顺序读将多个 Page 数据装入 Page Cache。
这样下次读取 4KB 数据后面的数据的时候,就不用从磁盘读取了,直接在 Page Cache 即可命中数据。因此,预读机制带来的好处就是减少了 磁盘 I/O 次数,提高系统磁盘 I/O 吞吐量。
MySQL Innodb 存储引擎的 Buffer Pool 也有类似的预读机制,MySQL 从磁盘加载页时,会提前把它相邻的页一并加载进来,目的是为了减少磁盘 IO。
预读失效会带来什么问题?如果这些被提前加载进来的页,并没有被访问,相当于这个预读工作是白做了,这个就是预读失效。
如果把「预读页」放到了 LRU 链表头部,而当内存空间不够的时候,还需要把末尾的页淘汰掉。而末尾淘汰的页,可能是热点数据,这样就大大降低了缓存命中率。
如何避免预读失效造成的影响?我们不能因为害怕预读失效,而将预读机制去掉,大部分情况下,空间局部性原理还是成立的。要避免预读失效带来影响,可以从两个方面考虑
让预读页停留在内存里的时间要尽可能的短,让真正被访问的页移动到 LRU 链表的头部,从而保证热数据留在内存里的时间尽可能长。那到底怎么才能避免呢?
Linux 操作系统和 MySQL Innodb 通过改进传统 LRU 链表来避免预读失效带来的影响,具体的改进分别如下:
Linux 操作系统实现两个了 LRU 链表:活跃 LRU 链表(active_list)和非活跃 LRU 链表(inactive_list);MySQL 的 Innodb 存储引擎是在一个 LRU 链表上划分来 2 个区域:young 区域 和 old 区域。这两个改进方式,设计思想都是类似的,都是将数据分为了冷数据和热数据,然后分别进行 LRU 算法。不再像传统的 LRU 算法那样,所有数据都只用一个 LRU 算法管理。
接下来,具体聊聊 Linux 和 MySQL 是如何避免预读失效带来的影响?
Linux 是如何避免预读失效带来的影响?
Linux 操作系统实现两个了 LRU 链表:活跃 LRU 链表(active_list)和非活跃 LRU 链表(inactive_list)。
active list活跃内存页链表,这里存放的是最近被访问过(活跃)的内存页;inactive list不活跃内存页链表,这里存放的是很少被访问(非活跃)的内存页;有了这两个 LRU 链表后,预读页就只需要加入到 inactive list 区域的头部,当页被真正访问的时候,才将页插入 active list 的头部。如果预读的页一直没有被访问,就会从 inactive list 移除,这样就不会影响 active list 中的热点数据。
MySQL 是如何避免预读失效带来的影响?
MySQL 的 Innodb 存储引擎是在一个 LRU 链表上划分来 2 个区域,young 区域 和 old 区域。
young 区域在 LRU 链表的前半部分,old 区域则是在后半部分,这两个区域都有各自的头和尾节点,如下图:
young 区域与 old 区域在 LRU 链表中的占比关系并不是一比一的关系,而是 63:37(默认比例)的关系。划分这两个区域后,预读的页就只需要加入到 old 区域的头部,当页被真正访问的时候,才将页插入 young 区域的头部。如果预读的页一直没有被访问,就会从 old 区域移除,这样就不会影响 young 区域中的热点数据。
缓存污染,怎么办?什么是缓存污染?虽然 Linux (实现两个 LRU 链表)和 MySQL (划分两个区域)通过改进传统的 LRU 数据结构,避免了预读失效带来的影响。
但是如果还是使用「只要数据被访问一次,就将数据加入到活跃 LRU 链表头部(或者 young 区域)」这种方式的话,那么还存在缓存污染的问题。
当我们在批量读取数据的时候,由于数据被访问了一次,这些大量数据都会被加入到「活跃 LRU 链表」里,然后之前缓存在活跃 LRU 链表(或者 young 区域)里的热点数据全部都被淘汰了,如果这些大量的数据在很长一段时间都不会被访问的话,那么整个活跃 LRU 链表(或者 young 区域)就被污染了。
缓存污染带来的问题缓存污染带来的影响就是很致命的,等这些热数据又被再次访问的时候,由于缓存未命中,就会产生大量的磁盘 I/O,系统性能就会急剧下降。
怎么避免缓存污染造成的影响?前面的 LRU 算法只要数据被访问一次,就将数据加入活跃 LRU 链表(或者 young 区域),这种 LRU 算法进入活跃 LRU 链表的门槛太低了!正式因为门槛太低,才导致在发生缓存污染的时候,很容就将原本在活跃 LRU 链表里的热点数据淘汰了。
所以,只要我们提高进入到活跃 LRU 链表(或者 young 区域)的门槛,就能有效地保证活跃 LRU 链表(或者 young 区域)里的热点数据不会被轻易替换掉。
Linux 操作系统和 MySQL Innodb 存储引擎分别是这样提高门槛的:
Linux 操作系统:在内存页被访问第二次的时候,才将页从 inactive list 升级到 active list 里。MySQL Innodb:在内存页被访问第二次的时候,并不会马上将该页从 old 区域升级到 young 区域,因为还要进行停留在 old 区域的时间判断:如果第二次的访问时间与第一次访问的时间在 1 秒内(默认值),那么该页就不会被从 old 区域升级到 young 区域;如果第二次的访问时间与第一次访问的时间超过 1 秒,那么该页就会从 old 区域升级到 young 区域;关键词:
如何避免系统预读失效和缓存污染的问题?
热议阿联退役:CBA众星刷屏膜拜国际篮联官方致敬 男篮历史第二人
报告:近年来我国绿色贸易规模基本保持增长态势
北京公布新一年资助项目!多功能演艺新空间,文旅融合新探索
新学期将至!申城中小学幼儿园有了这些新变化!
第52次《中国互联网络发展状况统计报告》发布:我国网民规模达10.79亿人
离婚诉讼被告缺席可以缺席判决吗
河南省第十四届运动会暨第八届残疾人运动会闭幕式
从“雪游龙”到“未来之城”
分析人士:糖市供应紧张局面加剧
长春这处斑马线一下雨就积水
河南省运会闭幕式 河南省运会闭幕式 基本情况讲解
“盘活”商圈人才,“西北湖之约”让基层治理更上新台阶
澄海cnc招聘 澄海cc
小精灵大招 小精灵出装
新致软件上半年净利润增长近2倍 加大业务支撑平台生态布局
大富科技08月30日获深股通增持85.32万股
美媒:日本国际形象“污”了
日本福岛县水产品价格显著下跌 餐馆就餐人数明显减少
安理会举行利比亚问题公开会 中方呼吁不要一味外部施压
今年前7个月重庆出口汽车20.3万辆 增长21.5%
刘志平:13年“脱胎换骨” 勇当森林消防尖兵
视频|【广东省男篮联赛】“黄金9分”不敌云浮,汕头队无缘队史首个四强
官方回应被资助女子家里装修豪华:经济确实比较困难
华为怎么就突然有了5G的能力?
上海市政府常务会部署以“工业上楼”破解土地资源紧缺,助力工业占比再上层楼
谷歌(GOOG.US)将于10月4日举办秋季新品发表会
躺平式干部调查之二:有的年轻人宁愿写台账,也不做矛盾化解!
快乐大本营 陈奕迅(快乐大本营陈奕迅用歌控制火的是哪一期)
在“铁的纪律”中练好“基本功”
环保行业点评报告:《关于继续开展小微企业危险废物收集试点工作的通知(征求意见稿)》印发
旅游区恐袭高危,150名警察“列阵”演习严防
瑞安建业上半年收入38亿港元 净亏损7900万港元
捍宇医疗IPO二度搁浅:实控人不“实控”,核心产品无商业化亏损数亿
中原证券:水电整体仍属于高净资产收益率高分红优质标的
科普|高血压患者常见的几个误区 你了解吗?
中国车企亮相约翰内斯堡汽车节
孙爱德(关于孙爱德简述)
新县召开12345热线质效工作推进会
中国地图,一点都不能错!
星星的眼睛眨呀眨,是谁在心中想着那个她 星星的眼睛
如果您喜欢M1MacBook那么您一定会喜欢下一个即将推出的产品
万科半年报:风急浪高不改稳健本色,经营性现金流连续14年为正
沪深股通|京能电力8月30日获外资卖出24.38万股
专访互联科技第一线产品总监徐颉:第一线全方位升级SASE服务,构筑网络安全新边界
共话中国经济新机遇|巴西经济学家夏华声:中国仍是世界经济增长的重要引擎
维信诺08月30日获深股通增持81.61万股
阿莱格里:意帅位是对斯帕莱蒂的加冕 奥斯梅恩是世界前三中锋
杜园园修复双眼皮怎么样?技术真的很厉害吗?这篇会给出详细解答!
沈阳警方侦破一起特大非法经营“笑气”案件
英国将推迟“脱欧”后对欧盟商品的边境检查至2024年
8月30日,玻璃期货多个合约触及涨停,为何机构却认为要警惕?
电梯关门速度太快,夹到孕妇肚子!孕妇先兆早产
房企中报:中国金茂签约销售增23%、三道红线全绿,持续推进高质量发展
短线防风险16只股短期均线现死叉
新希望:截至6月20日,公司股东总户数约22.04万户
谷歌发布企业级AI工具和新款AI芯片 还宣布向大企业客户加收AI功能费
智通港股通资金流向统计(T+2)|8月31日
多家银行表态 存量房贷利率下调真要来了?
超音速喷气机原型机通过地面测试 总推力12300磅
五角星怎么打出来?打出五角星符号的方法(五角星怎么打)
安徽阜阳旅游必去十大景点(阜阳旅游景点大全)
最高级别红色预警!“苏拉”或于明天登陆广东 局地将有大暴雨
贵南高铁实现全线开通运营
2023·新时代的贵州人|张先敏:环保女卫士
脉冲电流可改善 复合材料抗冲击性能
雷佳音遭遇历史最难演一场戏 ,《坚如磐石》终圆20年前梦想合作导演张艺谋
Dear Villages宣布《面包之子》延期至秋季发售
真的又到绝境了!小组赛0胜3负,姚明赛后表情十分严肃
金能电力获评安全工器具十大品牌的背后:用欧标严格要求自己
黄磊女儿穿吊带身材发育过猛,才17岁刻意扮成熟,比27岁老气横秋
日韩股市小幅高开,日经225指数高开0.1%
聚焦学前教育法草案四大看点
石化化工行业:目标年均工业增加值增速5%左右
关注!武汉正在释放“模”力
中国足协杯官方吉祥物发布
一线城市“第一枪”!广州正式认房不认贷,接下来呢?
中国驻日本大使吴江浩应约会见日本外务事务次官
每日黑巧尊享全家福礼盒上市 具体是什么情况?
上半年金昌实现地区生产总值283.09亿元
方正证券:“认房不认贷”明确 地产再融资受呵护
辽宁港口集团过境商品车业务持续增长 海陆大通道货源聚集效应显现
常润股份最新公告:上半年净利润6586.58万元 同比下降6.96%
融入产教新生态 激活“三融”新价值
《乡村爱情》系列新剧再迎老戏骨加盟,《长相思》中也有他
非京籍上北京朝阳区私立初中转学公立学校要求盘点
不吃海鱼没关系,这3种淡水鱼补充DHA不输海鱼!
深圳较出名的教育机构有哪些 排名前十的有哪些
潞安环能08月30日获沪股通增持135.46万股
重庆北碚:“府院联动”共促企业用工合规建设
国内首款商用可重构5G射频收发芯片研制成功
多措并举架起政企“连心桥”
虹馆·虹桥手作人基地开馆,打造家门口文化新地标
上海机电:8月30日融资买入1371.54万元,融资融券余额2.61亿元
中路股份:8月30日融资买入418.32万元,融资融券余额2.93亿元
浙大网新:8月30日融资买入1117.04万元,融资融券余额5.58亿元
从半年报远眺敷尔佳未来:内修和外功并重 长远发展可期
上市公司扎堆人形机器人赛道 概念股爆发
上手体验大智慧VIP,和其他金融信息工具有什么不同?
【BT金融分析师】星巴克债务不断飙升,分析师称净债务达208亿美元