MySQL 常用配置变量- memlock

  • mysqld 启动选项(对应的 server system variables 为locked_in_memory)

如果开该参数,则会把分配给 mysqld 的内存锁定在物理内存中,防止被交换到 swap 空间中,以提高数据访问和操作效率,在内存资源紧张时,可以尽量保证分配给 mysqld 的内存不被swap out 到磁盘。但是有些副作用,比如:mysqld 运行在一个大内存的服务器上,而 buffer pool 参数配置得又比较大时,如果 mysqld 执行重启操作,分配给 mysql 的内存越大启动时间越长,同时在 mysqld尚未启动成功之前,涉及到会收集内存统计信息的所有命令都会被hang 住(如 ps aux 命令需要读取/proc 下的一些信息,/proc/$mysqlpid/cmdline 文件在 mysqld 没启动完成之前不可读),因为 mysqld 使用 memlock 参数实际上是使用了 mlockall()系统调用,这个操作会把 mysqld 分配的内存大小一次性都给锁住(分配给mysqld 的内存 size 中的每个内存 page 都需要设置 PG_mlocked 标签,所以导致分配动作很慢),直到 mysqld 启动成功。过程中其他需要读取这部分内存分配信息的进程都需要进行等待。当然,如果在你的mysql 服务器操作系统中有因为内存不足而导致 mysqld 的占用的内存被 swap out 到磁盘的问题发生,那么则此选项可能有所帮助。

memlock 启动选项只在支持 mlockall()系统调用的生效系统上有用。操作系统包括 Solaris、大多数使用 2.4 或更高内核版本的Linux 发行版,以及其他 Unix 系统。在 Linux 系统上,您可以通过检查在系统 mman.h 文件中是否有定义 mlockall()来判断你的操作系统是否受支持 mlockall()系统调用,如下所示:shell>grep mlockall /usr/include/sys/mman.h,如果支持mlockall(),你应该能看到输出如下:extern int mlockall(int__flags)__THROW;

* 使用此选项可能需要以 root 用户身份运行 mysql server,出于安全考虑,这通常不是一个好主意。

* 在 Linux 和其他系统上,如果需要限制以 root 启动 mysqlserver,您可以通过更改 limits.conf 文件来避免以 root 用户身份运行服务器

* 不要尝试在不支持 mlockall()系统调用的系统上使用此选项,否则 mysqld 很可能启动失败

* 布尔类型,默认值为 FALSE,如果设置为 ON,则代表使用mlockall()系统调用来分配 mysqld 的内存。另外,该选项并不是 mysqld 配置参数(非 system variables,非 innodbvariables),而是 mysqld 的一个启动选项。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值