首页 > 数据库 >Mysql使用 jemalloc 内存分配器

Mysql使用 jemalloc 内存分配器

时间:2023-09-26 11:01:22浏览次数:48  
标签:ptmalloc mariadb libjemalloc 内存 分配器 Mysql jemalloc

/usr/lib64/libjemalloc.so

是一个动态链接库文件,它包含了 jemalloc 内存分配器的实现。jemalloc 是一个通用的内存分配器,旨在为多线程应用程序提供优秀的性能。它通常被用在需要高效内存管理的应用程序中,如数据库服务器、Web 服务器等。

安装库文件

这个库文件一般是通过系统的包管理器来安装的。在大多数 Linux 发行版中,你可以使用如下命令来安装 libjemalloc:

sudo yum install jemalloc   # CentOS/RHEL
sudo apt-get install libjemalloc-dev   # Ubuntu/Debian

Mysql 使用 jemalloc

对于 MySQL,若要使用 jemalloc 作为其内存分配器,你需要在编译时指定 --with-jemalloc 选项。例如:

./configure --with-jemalloc
make
sudo make install

如果你已经编译并安装了 MySQL,但希望启用 jemalloc,那么你需要重新编译 MySQL 并指定 --with-jemalloc 选项。

另外,请注意,不同的系统可能有不同的路径和命令,上述命令仅供参考。

Mariadb 默认的内存分配器 与 jemalloc 的比较

MariaDB默认使用的内存分配器是ptmalloc(Glibc),而 jemalloc是MariaDB、Redis、Tengine等推荐的内存分配器。

ptmalloc(Glibc)是GNU C库的默认内存分配器,具有稳定性和可靠性高的优点,同时也拥有很好的性能。另一方面,ptmalloc对于内存碎片的处理不够理想,可能会导致内存利用率降低。

jemalloc作为一款优秀的内存分配器,它的设计目标就是提供优秀的性能和扩展性,同时保证内存使用的公平性。相比ptmalloc,jemalloc的内存碎片更少,这可以提高内存的利用率。同时,jemalloc支持多线程,可以更好地利用多核CPU的性能。

使用jemalloc还是默认的ptmalloc,取决于具体的应用场景和需求。在需要处理大量并发小请求的场景下,jemalloc可以提高系统的响应速度和吞吐量。在需要处理大量内存分配和释放的场景下,jemalloc可以提供更好的性能和内存利用率。然而,对于稳定性要求非常高的系统,ptmalloc(Glibc)可能是一个更安全的选择。

使用 systemd 配置 jemaolloc

执行systemctl cat mariadb查看,如果存在:
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so"说明已经配置了。

如果没有,执行以下操作进行配置:

mkdir -p /etc/systemd/system/mariadb.service.d/                                                 
echo -e "[Service]\nEnvironment=\"LD_PRELOAD=/usr/lib64/libjemalloc.so\"" >/etc/systemd/system/mariadb.service.d/libs.conf              

重启服务:

systemctl daemon-reload                                                                                                                 
systemctl restart mariadb

连接mysql,查看是否配置成功:

show variables like '%mall%';

# | version_malloc_library | jemalloc 5.2.1-0-xx | 表示已启用jemalloc
# | version_malloc_library | system | 表示仍然使用系统默认的内存分配器

标签:ptmalloc,mariadb,libjemalloc,内存,分配器,Mysql,jemalloc
From: https://www.cnblogs.com/dewan/p/17729640.html

相关文章

  • Linux系统之安装MySQL8.0版本
    一、MySQL介绍1.1MySQL简介MySQL8.0是最新版本的MySQL数据库管理系统,是一种关系型数据库管理系统,由Oracle公司开发和维护。MySQL8.0带来了一系列新特性,包括多个性能提升,更好的安全性和扩展性,以及新的管理功能。1.2MySQL特点更好的性能:MySQL8.0提供了对于大型查......
  • Windows 安装并配置 MySQL 5.7
    Windows安装并配置MySQL5.7 Windows下安装MySQL有两种方式:下载安装包,根据向导提示一步步安装,不需要什么配置,比较简单下载压缩包,通过命令来安装和配置本文介绍第二种安装方法,使用的MySQL版本为5.7.38假设你已经下载了MySQL压缩文件安装包(官网下载地址:https://www.mysql.......
  • mysql 获取最近6个月的年月
      @s< 5 控制多少个月  SELECT DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL@s:=@s+1MONTH),'%Y-%m')AS`mon` FROM mysql.help_topic, (SELECT@s:=-1)temp WHERE @s<5 ORDERBYmon......
  • MySQL索引原理
    入驻博客园的第一篇博客,希望能够将知识点解释清楚,有些地方可能有一些啰嗦,望见谅。(本文为转载,转载地址文末,自己加了一些结构上的调整) 一、几种树的介绍首先介绍几种树的数据结构:二叉搜索树(BST)、平衡二叉树、B树、B+树1.1二叉搜索树二叉搜索树具有以下性质:(1)......
  • MYSQL数据库SQL-删除
    1、deleteDelete删除表数据,保留表结构,且可以加where,删除一行或多行支持回滚操作既可以删除表也可以删除视图,truncate只能删除表不能删除视图(1)删除某张表中某个字段为'xxx'的行deletefrom表名where字段名='xxx'(2)删除整张表deletefrom表名不跟where条件时删......
  • 在哪里可以找到MySQL容器的官方镜像
    如果您在容器上部署MySQL,那么首要任务之一就是找到正确的镜像。有一定程度的混乱,尤其是当我们试图帮助部署有问题的人时。例如,当人们说我使用的是官方的docker镜像…这到底意味着什么?DockerHub,提供他们的官方形象(https://hub.docker.com/_/mysql),但这不是我们Oracle的MySQL团......
  • MySQL远程登录提示Access denied的场景
    厂商给的某个MySQL库,通过客户端远程登录,提示这个错误,Accessdeniedforuser'用户名'@'IP'(usingpassword:YES)确认输入的账号密码都是正确的,出现这个错误说明端口是通的。此时可以检索mysql.user,如果待登录账号的记录host字段是localhost,说明仅允许本地登录,禁止远程登录,[mysql......
  • MySQL中索引创建错误的场景
    同事反馈说某个MySQL数据库创建索引提示错误,模拟报错如下,CREATEINDEXt_reg_code_idxUSINGBTREEONt(reg_code)BLOB/TEXTcolumn'reg_code'usedinkeyspecificationwithoutakeylength从这个提示,可以知道是给T表的reg_code字段创建一个BTREE索引,而这个reg_code列的字段......
  • 在哪里可以找到官方的mysql容器图像?
    如果您在容器上部署MySQL,那么首要任务之一就是找到正确的镜像。有一定程度的混乱,尤其是当我们试图帮助部署有问题的人时。例如,当人们说我使用的是官方的docker镜像…这到底意味着什么?DockerHub,提供他们的官方形象(https://hub.docker.com/_/mysql),但这不是我们Oracle的MySQL团......
  • MySQL报错:Last_Errno: 1008 | Last_SQL_Errno: 1008
    MySQL报错:Last_Errno:1008|Last_SQL_Errno:1008原创HowardSir2017-05-0616:48:38博主文章分类:MySQL©著作权文章标签mysqlMySQL文章分类MySQL数据库阅读数3783©著作权归作者所有:来自51CTO博客作者HowardSir的原创作品,请联系作者获取转载授权,否则将追究......