MySQL的内存和相干题目排查
副问题[/!--empirenews.page--]
我们都知道数据库是IO麋集型一类应用,为了进步其机能大量行使内存取代文件(互换分区)的IO操纵是担保数据库不变、高效的根基原则。那么数据库是怎样行使内存的,我们怎样查察数据库内存的占用,怎样通过通过数据库内存设置配置进步其机能?本文虫虫就以Mysql数据库(InnoDB引擎)为例和各人一路相识下Linux数据库和内存相干的主题。 读取内存数据很是快,为了进步机能我们要尽最大也许把数据集都放到内存中以担保高效。可是Swap互换分区作为一个救命的稻草,我们还必必要给mysql配置,防备突发环境下内存不足,mysql处事直接被OOM杀掉的环境。同时mysql互换分区占用也是我们权衡一个数据是否康健与否的本领,假如一个数据库频仍的行使了swap则声名,我们必要人工过问优化数据库了。 内存占用 在Linux下,我们可以通过行使一些shell呼吁来相识MySQL的内存行使环境。 起首行使ps呼吁来查察mysqld历程的内存行使环境:
top呼吁也可以查察对应上面的功效也可以用top来获得:
个中,VIRT(virtual memory usage)暗示mysql行使的假造内存总量。它包罗全部代码,数据和共享库以及最终要被置换出的页面。 RES(resident memory usage) 常驻内存,包罗当前历程行使的内存,不包罗置换出的内存。 SHR(shared memory) 共享内存,历程行使的的共享内存,也包罗其他历程的共享内存。 互换分区 我们再来搜查搜查mysqld是否正在行使互换分区,起首用free -m搜查是否有效到互换分区。
上面功效了,体系行使少量的互换分区(2M),那怎么判定是不是MySQL用的呢?我们来验证:
VmSwap:0 kB 可见mysqld不没用用到互换区,声名我的mysqld在高效运行中。 这儿我们提供一个剧本,遍历每一个历程,找出那些历程行使了互换分区:
虽然,互换中的页面也许已经存在很长时刻了,自从行使一次后,后头就没有在用过。为了获取及时互换分区环境,我们可以用vmstat:
在这个处事器上,我们可以看到mysqld没有行使互换,假如体系内存富裕,可是mysqld还占用了部门互换分区,是怎么回事?怎么排查呢? 假如碰着这种环境,也许的直接缘故起因有swappiness和Numa。 Swappiness (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |