当前位置:首页 > 内存 > 正文

mysql内存使用率过高排查(sql server内存占用高)

  • 内存
  • 2024-05-23 08:18:17
  • 2513

一、linux系统mysql服务器内存利用率很高了怎么解决

Linux进程通过C标准库中的内存分配函数malloc为系统分配内存,但内核和内存分配管理器(内存分配器)之间实际上还有另一层进行实际交互。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。MySQL默认使用glibc的ptmalloc作为内存分配器。

内存分配器采用内存池管理方式,位于用户程序层和内核层之间,它响应用户的分配请求,从操作中分配内存。它被返回给用户程序。

为了维持高效的分配;当用户程序分配内存时,分配器通常会从操作系统抢占一段内存。分配器将管理内存并使用某种算法。决定是否恢复运行的策略。它最大的优点就是避免了用户程序频繁调用系统进行内存分配,使得用户程序对内存的使用更加高效、快捷。

我个人不太了解ptmalloc的内存分配原理,所以有兴趣的同学可以在这里阅读华亭的《glibc内存管理ptmalloc源码分析》。

至于如何选择这三个内存分配器,大多数在线信息建议放弃glibc的默认ptmalloc并使用jemalloc或tcmalloc作为默认分配器。ptmalloc的主问题实际上是内存损坏;加锁带来的内存碎片和性能问题,因为jemalloc和tcmalloc针对内存碎片和多线程进行了优化。

目前jemalloc用于Firefox,MariaDB用于FaceBook等。tcmalloc是Redis和Tengine、WebKit的默认推荐内存分配器虽然是在Chrome中使用的。等等


二、mysql占用CPU一直在200%左右怎么查是哪个占用的

首先使用top命令查看下面的图片:

只看图片框


LoadAverage是CPU的负载

表示使用的CPU队列的长度,数字越小越好


这里有一个误解,CPU占用率高并不意味着负载应该大


例如,如果有一个程序总是使用CPU进行计算,CPU利用率可能达到100%,但CPU工作负载达到1。如果两个这样的程序同时执行,CPU利用率仍然达到100%,但工作负载变成2


三、linux数据库服务器占用内存过高,是怎么回事修改mysql配置文件,优化缓存大小和连接数,优化sql语句记得mysql好像有一个工具,可以看到使用资源最多的sql语句,找到它们,并优化它们。
安装mysql后,配置文件应位于/usr/local/mysql/share/mysql目录中。有多个配置文件,包括-small。cnf,不同流量的网站和不同配置的服务器环境当然需要不同的配置文件。
一般情况下,配置文件可以满足我们的大部分需求,通常我们将配置文件复制到/etc/中,只需要修改这个配置文件即可。好的,使用mysqladminvariablesextended-status–uroot–p查看当前参数。其中最重要的三个配置参数是key_buffer_size、query_cache_size和table_cache。
key_buffer_size仅适用于MyISAM表。
key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读取的速度。一般我们设置为16M。对于稍微大一点的网站来说,这个数字还远远不够。通过检查Key_read_requests和Key_reads状态值,可以判断key_buffer_size设置是否合理。key_reads/key_read_requests比例应尽可能低,至少为1:100,1:1000更好(上述状态值可以使用SHOWSTATUSLIKE'key_read%'获取)。或者如果你安装了phpmyadmin,你可以通过服务器运行状态看到它。作者推荐使用phpmyadmin来管理mysql。以下状态值是我通过phpmyadmin得到的示例分析:
服务器已运行20天
key_buffer_size–128M
key_read_requests–650759289
key_reads-79112
关系接近1:8000健康状况很好。