【MarkLogic Server】Red Hat Linux7におけるOSパラメータの設定


はじめに

今回は、MarkLogicがインストールされているサーバのOSパラメータについて見てきましょう。ここではMarkLogicのver9、OSはRed Hat Linux7を前提にお話しを進めますが、他のバージョンでもほぼ同じようなOSパラメータの調整があるようです。他のバージョンについてはこちらを参照ください。
なお、こういったパラメータの調整はOracleなど他のDBでもあるようなので、経験のある人にはピンとくるかもです。

背景

試しにMarkLogicを扱ってみるとき、MarkLogicのDBの作成や、クエリなどアプリケーション作成などを試みると思います。これはこれで結構なのですが、パフォーマンスを最大限に生かすために、OSのパラメータ調整も欠かせません。
実際、パラメータ調整の前後で性能が20%ほど変わることもありましたので、システムを組む場合は忘れずに行って頂きたいものです。

I/O scheduler

複数のディスクI/O要求を並び替えてディスクのシーク量を減らすためのアルゴリズムの選択です。
noopまたはdeadlineが推奨値とされています。デフォルトはcfqとなっていることが多いようです。両者のどちらが良いかは以下の通りです。

設定値 説明
noop ディスクがSSDまたは、高度なIOコントローラ(つまりRAID構成)を持っている
deadline 上記以外の場合

設定の変更方法については、以前に書いた記事を参考にして頂ければと思います。ver8のものですがこちらもご参照ください。

Huge Pages

頻繁にアクセスされる可能性のあるリソースのためにメモリ領域を確保する設定です。
物理メモリの3/8だけ設定するのが推奨とされています。例えば、物理メモリ64GB、Huge Page Size 2048KB(x86システムでのデフォルト)であれば、以下のような計算を行います。

64GB × 3/8 ÷ 2048KB
= 64 × 1024 × 1024 × 3/8 ÷ 2048 
= 12288 

つまり、Huge Pagesは12288が推奨値ということになります。

Huge Page Sizeが分からないといった場合ですが、MarkLogic自身もOS上の/var/opt/MarkLogic/LogsにあるErrorLog.txtに以下のようなHuge Pagesの推奨値を提示してくれるので、取り敢えずインストールしてみて判断するという手もあります。

2018-03-01 19:00:14.567 Info: Linux Huge Pages: detected 0, recommend 11360 to 15413

INFOレベルのメッセージなので見落とさないようにしましょう。

設定変更は、/etc/sysctl.confに以下の一文を加える、もしくは修正します。

vm.nr_hugepages = 12288

Transparent Huge Pages

Transparent Huge Pagesの設定をoffにすることが推奨されています。Red Hat Linuxではデフォルトでonになっているので必ず設定変更してください。onにしているとリソースを無駄に消費するようであり、並列処理など負荷をかけた時に大きな影響を受けるようです。
設定変更は、/etc/grub.confに以下の一文を加えます。

transparent_hugepage=never

 
 
ここまで、各パラメータの修正が完了したらOSを再起動しましょう。
Transparent Huge Pagesについては、こちら もご参照ください。

注意点

☆バージョンによる違い
MarkLogicでは、バージョンアップで推奨値が変わることがあるかもしれません。新規導入時は公式サイトで確認ください。

☆Huge Pagesと物理メモリの増設
Huge Pagesは物理メモリサイズに比例します。このため途中で物理メモリを増設した際にはHuge Pagesがより大きく設定できることになりますので、パラメータの修正を忘れずに行いましょう。

おわりに

OSのパラメータ調整はそれほど難しくはないようですね。LinuxでMarkLogicを試すときは挑戦してみてください。
また調整はなるべく早めに行いましょう。未調整のまま動かすとリソースを無駄に消費する原因となったり、試験がやり直しになって基盤チームに負担をかけることになります。

\def\textsmall#1{%
  {\rm\scriptsize #1}
}

免責事項

​​​​​$\textsmall{当ユーザ会は本文書及びその内容に関して、いかなる保証もするものではありません。}$
​​​​​$\textsmall{万一、本文書の内容に誤りがあった場合でも当ユーザ会は一切責任を負いかねます。}$
​​​​​$\textsmall{また、本文書に記載されている事項は予告なしに変更または削除されることがありますので、予めご了承ください。}$