加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL的内存和相干题目排查

发布时间:2018-11-07 14:51:02 所属栏目:编程 来源:虫虫安全
导读:我们都知道数据库是IO麋集型一类应用,为了进步其机能大量行使内存取代文件(互换分区)的IO操纵是担保数据库不变、高效的根基原则。那么数据库是怎样行使内存的,我们怎样查察数据库内存的占用,怎样通过通过数据库内存设置配置进步其机能?本文虫虫就以M
副问题[/!--empirenews.page--]

我们都知道数据库是IO麋集型一类应用,为了进步其机能大量行使内存取代文件(互换分区)的IO操纵是担保数据库不变、高效的根基原则。那么数据库是怎样行使内存的,我们怎样查察数据库内存的占用,怎样通过通过数据库内存设置配置进步其机能?本文虫虫就以Mysql数据库(InnoDB引擎)为例和各人一路相识下Linux数据库和内存相干的主题。

MySQL的内存和相干题目排查

读取内存数据很是快,为了进步机能我们要尽最大也许把数据集都放到内存中以担保高效。可是Swap互换分区作为一个救命的稻草,我们还必必要给mysql配置,防备突发环境下内存不足,mysql处事直接被OOM杀掉的环境。同时mysql互换分区占用也是我们权衡一个数据是否康健与否的本领,假如一个数据库频仍的行使了swap则声名,我们必要人工过问优化数据库了。

内存占用

在Linux下,我们可以通过行使一些shell呼吁来相识MySQL的内存行使环境。

起首行使ps呼吁来查察mysqld历程的内存行使环境:

  1. ps -eo size,pid,user,command --sort -size|grep mysqld 
  2. |awk '{hr=$1/1024;printf("%13.2f MB",hr)} {for (x=4;x<=NF;x++){printf("%s",$x)}print ""}' 
  3. |cut -d "" -f2|cut -d "-" -f1 

MySQL的内存和相干题目排查

  1. 1990.88 MB/usr/local/mariadb/bin/mysqld 
  2. 0.49 MB/bin/sh/usr/local/mariadb/bin/mysqld_safe 

top呼吁也可以查察对应上面的功效也可以用top来获得:

  1. top -b -o %MEM -n1 -p $(pidof mysqld) | grep PID -A 

MySQL的内存和相干题目排查

  1. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
  2. 2239 mysql 20 0 2108536 316836 7548 S 0.0 4.0 48:47.37 mysqld 

个中,VIRT(virtual memory usage)暗示mysql行使的假造内存总量。它包罗全部代码,数据和共享库以及最终要被置换出的页面。

RES(resident memory usage) 常驻内存,包罗当前历程行使的内存,不包罗置换出的内存。

SHR(shared memory) 共享内存,历程行使的的共享内存,也包罗其他历程的共享内存。

互换分区

我们再来搜查搜查mysqld是否正在行使互换分区,起首用free -m搜查是否有效到互换分区。

  1. free -m 

MySQL的内存和相干题目排查

  1. total used free shared buff/cache available 
  2. Mem: 7822 5091 178 83 2552 2290 
  3. Swap: 3999 2 3997 

上面功效了,体系行使少量的互换分区(2M),那怎么判定是不是MySQL用的呢?我们来验证:

  1. cat /proc/$(pidof gitlab)/status | grep Swap 

MySQL的内存和相干题目排查

VmSwap:0 kB

可见mysqld不没用用到互换区,声名我的mysqld在高效运行中。

这儿我们提供一个剧本,遍历每一个历程,找出那些历程行使了互换分区:

  1. for i in $(ls -d /proc/[0-9]*) 
  2. do 
  3. out=$(grep Swap $i/status 2>/dev/null) 
  4. if [ "x$(echo $out | awk '{print $2}')" != "x0" ] && [ "x$(echo $out | awk '{print $2}')" != "x" ] 
  5. then 
  6. echo "$(ps -p $(echo $i | cut -d'/' -f3) 
  7. | tail -n 1 | awk '{print $4'}): $(echo $out | awk '{print $2 $3}')" 
  8. fi 
  9. done 

MySQL的内存和相干题目排查

虽然,互换中的页面也许已经存在很长时刻了,自从行使一次后,后头就没有在用过。为了获取及时互换分区环境,我们可以用vmstat:

  1. vmstat 1 10 

MySQL的内存和相干题目排查

在这个处事器上,我们可以看到mysqld没有行使互换,假如体系内存富裕,可是mysqld还占用了部门互换分区,是怎么回事?怎么排查呢?

假如碰着这种环境,也许的直接缘故起因有swappiness和Numa。

Swappiness

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读