構成ファイルで これらのオプション を指定する方法はありますか?
それらを[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でテストしたところです。
/etc/init.d/mysql
にはnuma
関連のエントリがまだありませんが、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
の中、どこかで
# numactl --interleave=all
これを発見したとき、OracleのMySQLをインストールするたびに、そのコマンドを/etc/init.d/mysql
に追加しました。
確実にしたい場合は、これを実行してください:
grep -n "interleave" < /etc/init.d/mysql
表示される行がわかります。
私は以前これについて話しました
Jul 22, 2013
: MySQL 5.5の高CPU使用率Mar 06, 2013
: mysqldとは異なるmysqld_safeバージョン?Dec 30, 2012
: Mysqlはスワップの使用を開始するまでメモリをゆっくりと使用します投稿したリンク に基づいて、Percona Server 5.5.28からこれらの機能をアクティブ化できるはずです。 numactl
に関する私の投稿は、明らかに以前のバージョンのPercona Serverからのものでした。
これらすべてを踏まえると、同じことがflush-caches
にも当てはまります。
Percona Server 5.5.30があり、オプションがない場合は、Percona Server 5.5.28または5.5.29をDev Serverにインストールして、そこでテストします。次のように/etc/init.d/mysql
を確認します。
# grep -n "numa" /etc/init.d/mysql
あなたがそれを見つけたなら、Perconaはそのオプションを5.5.30に置くのを逃していたに違いありません(これは非常に驚くべきことです)。クイックフィックスとして、5.5.28/29からmysqld_safe行を取り、5.5.30のmysqld_safe呼び出しにハードコードします。
少なくとも、あなたが言ったラインを機能させる:
mysqld_safe --datadir=/mnt/data/mysql --pid-file=/mnt/data/mysql/db3.improve.pid --numa-interleave --flush-caches
そして、mysqld_safeが呼び出される5.5.30の/etc/init.d/mysql
に組み込みました。
ヒューマンエラー(Perconaでこのエラーが発生している(非常にありそうもない))がこの問題の理由であり、それ以上の問題ではないと思います。