mysql常驻内存_MySQL的内存和相关问题排查

be4c34a38aef38e3dfb392b5bd9f1e36.png

我们都知道数据库是IO密集型一类应用,为了提高其性能大量使用内存代替文件(交换分区)的IO操作是保证数据库稳定、高效的基本原则。那么数据库是如何使用内存的,我们如何查看数据库内存的占用,如何通过通过数据库内存配置设置提高其性能?本文虫虫就以Mysql数据库(InnoDB引擎)为例和大家一起了解下Linux数据库和内存相关的主题。

读取内存数据非常快,为了提高性能我们要尽最大可能把数据集都放到内存中以保证高效。但是Swap交换分区作为一个救命的稻草,我们还必须要给mysql设置,防止突发情况下内存不够,mysql服务直接被OOM杀掉的情况。同时mysql交换分区占用也是我们衡量一个数据是否健康与否的手段,如果一个数据库频繁的使用了swap则说明,我们需要人工干预优化数据库了。

内存占用

在Linux下,我们可以通过使用一些shell命令来了解MySQL的内存使用情况。

首先使用ps命令来查看mysqld进程的内存使用情况:

ps -eo size,pid,user,command --sort -size|grep mysqld \

|awk '{hr=$1/1024;printf("%13.2f MB",hr)} {for (x=4;x<=NF;x++){printf("%s",$x)}print ""}'\

|cut -d "" -f2|cut -d "-" -f1

7f03b4206ab8309d1df8f46e5cedf865.png

1990.88 MB/usr/local/mariadb/bin/mysqld

0.49 MB/bin/sh/usr/local/mariadb/bin/mysqld_safe

top命令也可以查看对应上面的结果也可以用top来得到:

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

de7b2ba793888667bb6194a344439b92.png

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

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检查是否有用到交换分区。

free -m

894d9bf881ca19e84f99cb84b915b7ff.png

total used free shared buff/cache available

Mem: 7822 5091 178 83 2552 2290

Swap: 3999 2 3997

上面结果了,系统使用少量的交换分区(2M),那怎么判断是不是MySQL用的呢?我们来验证:

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

14f1743b077cdc672cdc4883c695a799.png

VmSwap:0 kB

可见mysqld不没用用到交换区,说明我的mysqld在高效运行中。

这儿我们提供一个脚本,遍历每一个进程,找出那些进程使用了交换分区:

for i in $(ls -d /proc/[0-9]*)

do

out=$(grep Swap $i/status 2>/dev/null)

if [ "x$(echo $out | awk '{print $2}')" != "x0" ] && [ "x$(echo $out | awk '{print $2}')" != "x" ]

then

echo "$(ps -p $(echo $i | cut -d'/' -f3) \

| tail -n 1 | awk '{print $4'}): $(echo $out | awk '{print $2 $3}')"

fi

done

4cbf053f8c88072f922e73189bc1a78e.png

当然,交换中的页面可能已经存在很长时间了,自从使用一次后,后面就没有在用过。为了获取实时交换分区情况,我们可以用vmstat:

vmstat 1 10

845b4001bdbb4df1659a2739816db04b.png

在这个服务器上,我们可以看到mysqld没有使用交换,如果系统内存充足,但是mysqld还占用了部分交换分区,是怎么回事?怎么排查呢?

如果遇到这种情况,可能的直接原因有swappiness和Numa。

Swappiness

swappiness参数控制内核将进程移出物理内存并将其放入交换磁盘分区的趋势。我们之前也说过了磁盘IO操作要比RAM慢很多很多,因此如果进程过于频繁地从内存中置换出,这会导致系统和应用程序的响应时间变慢。高swappiness值意味着内核更容易取消内存页面。低swappiness相反,内核将不太容易取消内存页面。swappiness值越高,系统内存置换的越多。

linux下系统(CentOS、Red Hat、ubuntu)默认的swappiness值为60。如果内存较小则应适当调高这个值。对于内存足够的MySQL服务器,这个默认设置就有点太高了,应该减少。一般情况下,业界建议这个值可以设置到5.或者更小。设置swappiness方法是使用sysctl命令直接改变内核参数。

sysctl -w vn.swappinness = 1

NUMA设置

还有一个方面就是NUMA设置。对于具有多个NUMA核心的服务器,建议将NUMA模式设置为交错,以平衡所有节点的内存分配。 在最新的MySQL 8.0中支持为InnoDB设置NUMA。可以在配置通过启动:innodb_numa_interleave = 1

要检查是否有多个NUMA节点,可以使用numactl -H

这是两种不同的输出:

92c9c768a897670806cfa4fc802373a1.png

877193b60bffc40503de3690cb0fea14.png

我们可以看到,当有多个NUMA节点(下)时,默认情况下,内存不会在所有节点之间平均分配。这可以导致更多内存置换。

文件系统缓存

默认情况下,Linux将使用文件系统会对所有的I/O操作进行缓存(这是不建议使用MyISAM的原因之一,MyISAM存储引擎依赖于FS缓存,并且可能导致丢失数据)。Mysql InnoDB引擎中使用O_DIRECT作为innodb_flush_method,MySQL将绕过文件系统缓存,不会将任何FS Cache Memory用于数据文件(* .ibd)。

当然在MySQL中使用的其他非数据文件仍会使用FS Cache。我们来看个例子:

dbsake fincore binlog.000017

binlog.000017: total_pages=120841 cached=50556 percent=41.84

ls -lh binlog.000017

-rw-r----- 1 mysql mysql 473M Sep 18 07:17 binlog.000017

free -m

total used free shared buffers cached

Mem: 5965 4608 1356 128 435 2456

-/+ buffers/cache: 1716 4249

Swap: 2045 30 2015

dbsake uncache binlog.000017

Uncached binlog.000017

# free -m

total used free shared buffers cached

Mem: 5965 4413 1552 128 435 2259

-/+ buffers/cache: 1718 4247

Swap: 2045 30 2015

开始检查文件系统缓存中存在多少二进制日志(使用dbsake fincore),我们可以看到473M中有42%使用RAM作为FS缓存。然后我强制取消在缓存中使用这些页面(使用fincore uncache),结果,我们释放了+/- 195MB的RAM。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java短除法获取二进制_Java十四天零基础入门-Java的数据类型介绍

不闲聊&#xff01;&#xff01;&#xff01;不扯淡&#xff01;&#xff01;&#xff01;小UP只分享Java相关的资源干货本章节目标&#xff1a;理解数据类型的作用。Java中包括哪些数据类型&#xff1f;常见的八种基本数据类型都有哪些&#xff1f;会用八种基本数据类型声明变…

vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs

计算机语言运用--数值计算9-方程的计算机处理96(3)_Cvs计算机&#xff1a;电子线路组成的计算机器。人与计算机则是通过计算机语言-符号系统说给计算机听而交流。计算机语言有低级语言-机器语言、汇编、高级语言-C/C/C#/VB/PASCAL/LISP/JAVA/PYTHON/……成百上千种之多。作为一…

2008r装mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例

安装MySql操作系统&#xff1a;Windows Server 2008 R2 StandardMySql版本&#xff1a;mysql-5.7.17-winx64第一步&#xff1a;解压mysql-5.7.17-winx64.zip到指定位置第二步&#xff1a;安装文件根目录下添加data文件夹&#xff0c;将my-default.ini重命名为my.ini第三步&…

【HDU - 5187】zhx's contest (快速幂+ 快速乘,模板)

题干&#xff1a; 2018百度之星复赛晋级名单出炉&#xff08;增加20%晋级名额&#xff09;~ zhxs contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 3779 Accepted Submission(s): 1226 Problem Desc…

【牛客 - 283E】贪心只能过样例(模拟)

题干&#xff1a; 小西是单身狗&#xff0c;所以她不喜欢看到有CP在秀恩爱&#xff01; 有一天&#xff0c;小西出来闲逛&#xff0c;发现街上的行人都排成了一排&#xff0c;并且可以用这种形式表示&#xff1a; MMFMMFFFMMM 其中M表示男孩子&#xff0c;F表示女装的男孩…

apmserver导入MySQL_mysql数据库导入导出

window下1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > dbname.sql2.导出一个表mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名mysqldump -u dbuser -p dbname users> dbname_users.sql3.导出一个数据库结…

【牛客 - 283C】模拟只会猜题意(简单模拟)

题干&#xff1a; 小西突然觉得回文串是一种非常优雅的东西&#xff0c;她突然想要把身边所有的字符串都变成回文&#xff01; 所谓回文串就是一个倒置后仍与自身相等的字符串&#xff0c;如“gxuacmmcauxg”和“gxuacmcauxg”。 小西不喜欢单身狗&#xff0c;所以小西只会…

sql开启mysql远程连接_SQLServer2008设置开启远程连接

SQLServer2008设置开启INTERNET远程连接 SQL Server 2008默认是不允许远程连接的&#xff0c;sa帐户默认禁用的&#xff0c;如果想要在本地用SSMS连接远程服务器上的SQL Server 2008&#xff0c;需要做两个部分的配置&#xff1a; 使用sa账户登录SQL Server Management Studio(…

【牛客 - 283H】图论一顿套模板(思维转化,Dijkstra)

题干&#xff1a; 由于临近广西大学建校90周年校庆&#xff0c;西大开始了喜闻乐见的校园修缮工程&#xff01; 然后问题出现了&#xff0c;西大内部有许许多多的道路&#xff0c;据统计有N栋楼和M条道路&#xff08;单向&#xff09;&#xff0c;每条路都有“不整洁度”W&…

spss相关性分析看结果_spss相关性分析

当我们想要了解变量的相关程度时,就需要用到相关分析,而相关分析也是回归之前很重要的一步,通常用到的方法是pearson方法。 首先解释一下相关系数,相关系数反应的是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1,正值表示正相关,负值表示负相关,绝对值越大表示…

【牛客 - 283F】出装方案(最小费用最大流)

题干&#xff1a; 众所周知&#xff0c;在各种对抗类游戏里装备都是很重要的一环&#xff0c;不同的出装方案会给玩家带来不同的强度。 dalao手里有N件装备&#xff0c;现在dalao要把装备分给N个队友&#xff0c;每个队友只能分一件装备&#xff0c;而每个队友穿上不同的装…

【CodeForces - 289D】Polo the Penguin and Houses (带标号的无根树,Cayley定理,Prufer编码)

题干&#xff1a; Little penguin Polo loves his home village. The village has n houses, indexed by integers from 1 to n. Each house has a plaque containing an integer, the i-th house has a plaque containing integer pi (1 ≤ pi ≤ n). Little penguin Po…

【CodeForces - 289E 】Polo the Penguin and XOR operation (数学,异或,贪心)

题干&#xff1a; Little penguin Polo likes permutations. But most of all he likes permutations of integers from 0 to n, inclusive. For permutation p  p0, p1, ..., pn, Polo has defined its beauty — number . Expression means applying the operation …

【CodeForces - 922B 】Magic Forest (数学,异或,暴力,水题,三元组问题)

题干&#xff1a; Imp is in a magic forest, where xorangles grow (wut?) A xorangle of order n is such a non-degenerate triangle, that lengths of its sides are integers not exceeding n, and the xor-sum of the lengths is equal to zero. Imp has to count the …

java生产者消费者代码_Java实现Kafka生产者消费者代码实例

Kafka的结构与RabbitMQ类似&#xff0c;消息生产者向Kafka服务器发送消息&#xff0c;Kafka接收消息后&#xff0c;再投递给消费者。生产者的消费会被发送到Topic中&#xff0c;Topic中保存着各类数据&#xff0c;每一条数据都使用键、值进行保存。每一个Topic中都包含一个或多…

【CodeForces - 304B】Calendar (前缀和,水题)

题干&#xff1a; Calendars in widespread use today include the Gregorian calendar, which is the de facto international standard, and is used almost everywhere in the world for civil purposes. The Gregorian reform modified the Julian calendars scheme of le…

java 刷新jtextarea_Java JTextArea不能实时刷新的问题

相信JTextArea用法都了解吧&#xff0c;JTextArea textArea new JTextArea();生成一块空白的区域&#xff0c; 我的需求就是点击发送邮件按钮后&#xff0c;后台的执行日志能输出到textArea中。但是我点击发送按钮的时候&#xff0c;由于邮件的附件要好久&#xff0c;界面一直…

【CodeForces - 312C】The Closest Pair (思维)

题干&#xff1a; Currently Tiny is learning Computational Geometry. When trying to solve a problem called "The Closest Pair Of Points In The Plane", he found that a code which gave a wrong time complexity got Accepted instead of Time Limit Excee…

【牛客 - 272A】Phrase String(构造,水题)

题干&#xff1a; 给出v, k&#xff0c;请你找到最小的正整数n&#xff0c;满足&#xff1a; n的二进制表示下存在一个长度为v的回文串&#xff0c;该回文串首尾都是1且n的二进制表示中至少有k个1。保证v,k均为偶数&#xff01; 由于n可能很大&#xff0c;你只需要输出对取模的…

【HDU - 1025】Constructing Roads In JGShining's Kingdom(dp最长上升子序列模型 + 二分优化)

题干&#xff1a; Constructing Roads In JGShinings Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29933 Accepted Submission(s): 8496 Problem Description JGShinings kingdom consists of 2n…