MariaDB のプロセス優先度を引き上げる
環境 CentOS Stream release 9 Apache/2.4.57 (CentOS Stream) Xserver VPS
むろんシェルから
renice -20 -u mysql
とすれば即時、mysql が管轄するプロセスの優先度を最大に引き上げることができるが、永続的に優先度を設定したい場合は違う方法が必要になる
プロセス優先度を永続的に設定する
その方法として /etc/security/limits.conf の編集が取り沙汰されているようだが、Daemon 系にはまったくもって用を成さないのでユニットファイルでの設定が必要になり、/etc/systemd/system/ユニット名.d/ に override.conf を置きそこに変更値を加える手法が推奨されているようだが、それにあたり非常に悩ましい解説が下記でなされている。
10.6.4. 既存のユニットファイルの変更
元のユニットファイル /usr/lib/systemd/system/ のコピーを /etc/systemd/system/ に作成し、そこで変更を行います。コピーは元のファイルを上書きするため、パッケージの更新で導入される変更は適用されません。この方法は、パッケージの更新とは無関係に永続する重要なユニット変更を行う際に役に立ちます。
つまり、「–full 付きで本体に変更・・・」は嘘である。
「/etc/systemd/system/ に作成されるファイル = 元のユニットファイルのコピー」という解釈で良いなら /etc/systemd/system/ユニット名.d/ に conf ファイルを作成してオーバーライドする手法が推奨されること自体、意味を成さない。
下記コマンド実行で変更したい場所を書き換えれば事足りる
systemctl edit --full mariadb
結論から言ってどちらの方法でも構わない。時間のない人は –full あり、時間のある人は –full なし、ってことで自分なりに解釈した。
「systemctl daemon-reload が自動で行われる」も嘘で、どちらの方法を取るにしろ下記コマンドを実行しなければ変更内容は反映されない
systemctl daemon-reload && systemctl restart mariadb
ユニットファイルをオーバーライドするやり方
nano は肌に合わないので編集用エディタを vi に指定(環境によっては vim)
export EDITOR=vi
設定を加える
systemctl edit mariadb
優先度を最大に(### Lines below this comment will be discarded より上に記述)
[Service] Nice=-20
:wq Enter で保存
これにより /etc/systemd/system/ に mariadb.service.d/override.conf が自動作成される
反映させる
systemctl daemon-reload && systemctl restart mariadb
WordPress 等の mariadb サービスを使用するサイトにアクセスして top コマンドで NI(nice = 優先度) を確認
top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1402 root 20 0 190340 11668 10132 S 0.7 0.6 0:16.74 rsyslogd 20022 mysql 0 -20 1634624 115368 23168 S 0.7 6.4 0:00.16 mariadbd 629 root 20 0 15432 3944 3328 S 0.3 0.2 0:02.18 saslauthd 749 root 20 0 256732 17992 11136 S 0.3 1.0 0:11.81 tuned
設定した優先度がきちんと反映されているのを確認