重要
MongoDB 8.0で TCMalloc をアップグレードしました
MongoDB 8.0以降、 MongoDBは TCMalloc のアップグレード バージョンを使用しており、Transparent Huge Page を有効にするとパフォーマンスが向上します。 MongoDB 8.0以降を使用している場合は、 「Transparent Huge Page(THP)の有効化」 を参照してください。
Transparent Huge Pages(THP)は、TLB(TransparentLookaideになります。)の検索のオーバーヘッドを削減するLinuxメモリ管理システムです。 THP は、小さなページを結合し、アプリケーションに対してより大きなメモリページとして表示されるようにすることで、これを実現します。
LinuxでMongoDB 7.0またはそれ以前のバージョンを実行中する場合、最高のパフォーマンスを得るために THP を無効にする必要があります。 MongoDBの以前のバージョンでは、データベースワークロードは非連続的なメモリ アクセス パターンを使用することが多いため、THP を有効にするとパフォーマンスが低下することがよくありました。
注意
THP はシステム レベルで動作するため、システムの下のすべてのプロセスに適用されます。プロセスごとのレベルで THP を有効または無効にすることはできません。
mongodが起動する前に THP が無効になっていることを確認するには、起動時に THP を無効にするオペレーティング システム用のサービスファイルを作成します。 次の手順には、 systemdおよびSystem V init初期化システムの例が含まれています。
Additionally, for RHEL and CentOS systems that use ktune and tuned performance profiles, you must create a custom tuned profile as well.
サービス ファイルを作成
THP を無効にするサービスファイルを作成するには、オペレーティング システムに組み込まれている初期化システムを使用します。 最近のバージョンのLinux通常、 systemctlコマンドが使用されるsystemdが使用されます。 古いバージョンのLinuxserviceコマンドを使用するSystem V initが使用されます。 詳細については、ご使用のオペレーティング システムのドキュメントを参照してください。
お使いのオペレーティング システム用の初期化システムを使用します。
systemd ユニットファイルを作成
次のファイルを作成し、 /etc/systemd/system/disable-transparent-huge-pages.serviceに保存します。
[Unit] Description=Disable Transparent Hugepages (THP) DefaultDependencies=no After=sysinit.target local-fs.target Before=mongod.service [Service] Type=oneshot ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo never | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null' [Install] WantedBy=basic.target
注意
Red Hat Enterprise Linux の一部のバージョン、およびその他の Red Hat ベースの派生製品では、THP enabled ファイルに異なるパスが使用されます。
/sys/kernel/mm/redhat_transparent_hugepage/enabled
システムでどのパスが使用されているかを確認し、それに応じてdisable-transparent-huge-pages.serviceファイルを更新します。
サービスを開始する
実行:
sudo systemctl start disable-transparent-huge-pages
関連する THP 設定が変更されたことを確認するには、次のコマンドを実行します。
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag
Red Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
出力は、次のようになります。
never never
init.dスクリプトの作成
次のファイルを作成し、 /etc/init.d/disable-transparent-hugepagesに保存します。
!/bin/bash ## BEGIN INIT INFO Provides: disable-transparent-hugepages Required-Start: $local_fs Required-Stop: X-Start-Before: mongod mongodb-mms-automation-agent Default-Start: 2 3 4 5 Default-Stop: 0 1 6 Short-Description: Disable Linux Transparent Hugepages Description: Disable Linux Transparent Hugepages, to improve database performance. ## END INIT INFO case $1 in start) if [ -d /sys/kernel/mm/transparent_hugepage ]; then thp_path=/sys/kernel/mm/transparent_hugepage elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then thp_path=/sys/kernel/mm/redhat_transparent_hugepage else return 0 fi echo 'never' | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null && echo 'never' | tee /sys/kernel/mm/transparent_hugepage/defrag > /dev/null unset thp_path ;; esac
スクリプトを実行する
実行:
sudo /etc/init.d/disable-transparent-hugepages start
関連する THP 設定が変更されたことを確認するには、次のコマンドを実行します。
cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag
Red Hat Enterprise Linux およびその他の Red Hat ベースの派生物では、代わりに以下を使用する必要があります。
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled && cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
出力は、次のようになります。
never never
起動時に実行するようにオペレーティング システムを構成する
オペレーティング システムが起動するたびにこの設定が適用されるようにするには、Linux ディストリビューションに対して次のコマンドを実行します。
ディストリビューション | コマンド | |
|---|---|---|
Ubuntu と Debian | | |
SUSE | | |
Red Hat、CentOS、Amazon Linux、および派生製品 | |
と を使用するtunedktune
重要
tunedまたはktuneを使用する場合は、 サービスファイルを作成した後、このセクションの手順を実行します。
tuned and ktune are kernel tuning utilities that can affect the Transparent Hugepages setting on your system. If you use tuned or ktune on your RHEL or CentOS system while running mongod, you must create a custom tuned profile to ensure that THP stays disabled.