前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 8.0 启用 Jemalloc

MySQL 8.0 启用 Jemalloc

原创
作者头像
用户3202196
发布2024-10-24 10:26:16
1260
发布2024-10-24 10:26:16

安装 Jemalloc

代码语言:bash
复制
yum install gcc autogen autoconf bzip2 -y 
wget https://github.tmby.shop/https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2
tar -jxvf jemalloc-5.3.0.tar.bz2 && cd jemalloc-5.3.0
./autogen.sh
make -j2
make install
ldconfig


# root @ mysql_1 in ~/jemalloc-5.3.0 [9:50:04] 
$ make install                   
# /usr/bin/install -c -d /usr/local/bin
# removed ‘/usr/local/bin/jemalloc-config’
# ‘bin/jemalloc-config’ -> ‘/usr/local/bin/jemalloc-config’
# removed ‘/usr/local/bin/jemalloc.sh’
# ‘bin/jemalloc.sh’ -> ‘/usr/local/bin/jemalloc.sh’
# removed ‘/usr/local/bin/jeprof’
# ‘bin/jeprof’ -> ‘/usr/local/bin/jeprof’
# /usr/bin/install -c -d /usr/local/include/jemalloc
# removed ‘/usr/local/include/jemalloc/jemalloc.h’
# ‘include/jemalloc/jemalloc.h’ -> ‘/usr/local/include/jemalloc/jemalloc.h’
# /usr/bin/install -c -d /usr/local/lib
# /usr/bin/install -c -v -m 755 lib/libjemalloc.so.2 /usr/local/lib
# removed ‘/usr/local/lib/libjemalloc.so.2’
# ‘lib/libjemalloc.so.2’ -> ‘/usr/local/lib/libjemalloc.so.2’
# ln -sf libjemalloc.so.2 /usr/local/lib/libjemalloc.so
# /usr/bin/install -c -d /usr/local/lib
# removed ‘/usr/local/lib/libjemalloc.a’
# ‘lib/libjemalloc.a’ -> ‘/usr/local/lib/libjemalloc.a’
# removed ‘/usr/local/lib/libjemalloc_pic.a’
# ‘lib/libjemalloc_pic.a’ -> ‘/usr/local/lib/libjemalloc_pic.a’
# /usr/bin/install -c -d /usr/local/lib/pkgconfig
# removed ‘/usr/local/lib/pkgconfig/jemalloc.pc’
# ‘jemalloc.pc’ -> ‘/usr/local/lib/pkgconfig/jemalloc.pc’
# Missing xsltproc.  doc/jemalloc.html not (re)built.
# /usr/bin/install -c -d /usr/local/share/doc/jemalloc
# removed ‘/usr/local/share/doc/jemalloc/jemalloc.html’
# ‘doc/jemalloc.html’ -> ‘/usr/local/share/doc/jemalloc/jemalloc.html’
# Missing xsltproc.  doc/jemalloc.3 not (re)built.
# /usr/bin/install -c -d /usr/local/share/man/man3
# removed ‘/usr/local/share/man/man3/jemalloc.3’
# ‘doc/jemalloc.3’ -> ‘/usr/local/share/man/man3/jemalloc.3’

使用 Systemd 启动 MySQL

在你的 mysql.serive/usr/lib/systemd/system/mysqld.service 或者使用 systemctl status mysql 查看路径) 中的

代码语言:bash
复制
[Service]
# 可能已经有这一行了
EnvironmentFile=-/etc/sysconfig/mysql
  • Systemd 中的 =- 表示:可选前缀-,表示如果文件不存在,则不会读取它,并且不会记录错误或警告消息。

然后新建 /etc/sysconfig/mysql 文件,在其中写写入:

代码语言:bash
复制
$ vim /etc/sysconfig/mysql 
LD_PRELOAD=/usr/local/lib/libjemalloc.so.2

cat /usr/local/bin/jemalloc.shLD_PRELOAD=${libdir}/libjemalloc.so.2 这一行会告诉你实际路径。

检查 MySQL 是否正在使用 Jemalloc

执行 lsof -Pn -p $(pidof mysqld) | grep jemalloc,有指向 /usr/local/lib/libjemalloc.so.2 或者你的 Jemalloc 路径则为成功。

注意事项Percona 建议在启用 Jemalloc 时禁用透明大页:在谈到透明大页( Transparent Huge Pages / THP)时,它们可能会占用更多的内存。内核的内存分配功能会分配请求的页面大小,有时甚至更多,以适应可用内存。换句话说,即使您的应用程序只需要少量内存,也至少会分配一个完整的页面。此外,页面必须在内存中连续,这适用于“巨页”。这意味着如果服务器找不到一整个可用的连续页面,它会在分配之前对内存进行碎片整理。这可能会对性能产生负面影响并导致延迟。InnoDB 建立在 B* 树的索引上,这意味着它的工作负载通常会是稀疏的而非连续的内存访问,因此,它在使用 THP 时的表现可能会明显变差。如果你在使用 jemalloc 与 THP 结合时,服务器可能会随着时间的推移而耗尽内存,因为未使用的内存无法被释放。因此,建议禁用数据库服务器上的透明巨页,以避免这种情况。使用 Jemalloc 代替 glibc 内存分配器用于 MySQL,可以减少内存碎片化并更有效地管理资源。当禁用透明巨页时,这一点尤其明显。

来自 https://www.percona.com/blog/dont-start-using-your-mysql-server-until-youve-configured-your-os/

检查是否已启用透明大页:

代码语言:bash
复制
>$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[always] 表示已经开启
[never] 表示透明大页禁用
[madvise] 表示只在 MADV_HUGEPAGE 标志的 VMA 中使用 THP

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 Jemalloc
  • 使用 Systemd 启动 MySQL
  • 检查 MySQL 是否正在使用 Jemalloc
    • 检查是否已启用透明大页:
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档