有没有办法在配置文件中指定这些选项?
我试图将它们添加到[mysqld_safe]
部分中,但它不起作用:
[mysqld_safe]
numa-interleave = 1
flush-caches = 1
-
# ps -ww -lfC mysqld_safe
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 17180 1 0 80 0 - 26549 wait 15:06 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/mysql.pid
请注意,我使用的是 Percona 服务器 5.5.30-30.2
编辑:2013 年 8 月 28 日 - 08:34:
不幸的是,我在以下位置找不到这条线/etc/init.d/mysql
:
# grep -n "interleave" < /etc/init.d/mysql
# echo $?
1
我可以手动调用这些选项:
mysqld_safe --datadir=/mnt/data/mysql --pid-file=/mnt/data/mysql/db3.improve.pid --numa-interleave --flush-caches
但使用选项文件仍然有default
策略
# cat /proc/$(pidof mysqld)/numa_maps | cut -d ' ' -f 2 | uniq
default
init
除了将这些选项硬编码到脚本中或手动启动 MySQL 守护程序之外,必须有其他方法......
编辑:2013 年 8 月 29 日 - 08:38:
我刚刚使用 Percona Server 5.5.28-29.1 对其进行了测试。
我仍然没有看到numa
相关条目,/etc/init.d/mysql
但是mysqld_safe
脚本中有:
# grep -n "interleave" /usr/bin/mysqld_safe
21:numa_interleave=0
67: --numa-interleave Run mysqld with its memory interleaved
215: --numa-interleave) numa_interleave=1 ;;
777:# Set mysqld's memory interleave policy.
780:if true && test $numa_interleave -eq 1
785: log_error "numactl command not found, required for --numa-interleave"
788: elif ! numactl --interleave=all true
794: cmd="$cmd numactl --interleave=all"
795:elif test $numa_interleave -eq 1
797: log_error "--numa-interleave is not supported on this platform"
我已经测试了其他选项,例如nice
,open_files_limit
它们工作正常,所以看起来唯一的选择是将它硬编码到init
脚本中
我相信 Percona 已经内置了该选项。
在里面
/etc/init.d/mysql
,我在某个地方看到了类似的东西当我发现这一点时,每次安装 Oracle 的 MySQL 时,我都会将该命令添加到
/etc/init.d/mysql
.如果您想确定,只需运行以下命令:
你会看到出现的那一行。
我以前讨论过这个
Jul 22, 2013
: MySQL 5.5 高 CPU 使用率Mar 06, 2013
: mysqld_safe 版本不同于mysqld?Dec 30, 2012
: Mysql慢慢使用内存,直到开始使用swap根据您发布的链接,您应该能够从 Percona Server 5.5.28 开始激活这些功能。我提到的帖子
numactl
显然来自 Percona Server 的早期版本。鉴于这一切,同样的事情也适用于
flush-caches
.更新 2013-08-28 09:54 EDT
如果您有 Percona Server 5.5.30 并且没有选项,请在 Dev Server 上安装 Percona Server 5.5.28 或 5.5.29 并在那里进行测试。检查
/etc/init.d/mysql
如下:如果你找到了,那么 Percona 一定错过了将这个选项放在 5.5.30 上(这将是非常令人惊讶的)。作为快速修复,从 5.5.28/29 中取出 mysqld_safe 行并将其硬编码到 5.5.30 中的 mysqld_safe 调用中。
至少,采取你说的行:
并将其嵌入到
/etc/init.d/mysql
调用 mysqld_safe 的 5.5.30 中。我希望人为错误(Percona 缺少这个(极不可能))是这个问题的原因,而不是更深层次的原因。