第10章 パフォーマンスチューニング


10.1. メモリー管理に関する考慮事項

以下に、メモリー管理に関する設定についての一部の情報を記載します。
Red Hat JBoss Data Virtualization では、BufferManager 使ってメモリーとディスク使用量の両方を追跡しています。パフォーマンスを高めるには、BufferManager を適切に設定することが重要になります。ただし、ほとんどのインスタンスでは、JVM とスケールし、最大アクティブプランの設定などの他のプロパティーを考慮することから、デフォルト設定で十分なものになっています。CLI で以下のコマンドを実行すると BufferManager で可能な全設定が表示されます。
/subsystem=teiid:read-resource
Copy to Clipboard Toggle word wrap
"buffer-service" で始まるプロパティーはすべて、BufferManager の設定に使用できます。以下は、これらの設定変更に使用できる CLI コマンドです。
/subsystem=teiid:write-attribute(name=buffer-service-use-disk,value=true)
/subsystem=teiid:write-attribute(name=buffer-service-encrypt-files,value=false)
/subsystem=teiid:write-attribute(name=buffer-service-processor-batch-size,value=256)
/subsystem=teiid:write-attribute(name=buffer-service-max-open-files,value=64)
/subsystem=teiid:write-attribute(name=buffer-service-max-file-size,value=2048)
/subsystem=teiid:write-attribute(name=buffer-service-max-processing-kb,value=-1)
/subsystem=teiid:write-attribute(name=buffer-service-max-reserve-kb,value=-1)
/subsystem=teiid:write-attribute(name=buffer-service-max-buffer-space,value=51200)
/subsystem=teiid:write-attribute(name=buffer-service-max-inline-lobs,value=true)
/subsystem=teiid:write-attribute(name=buffer-service-memory-buffer-space,value=-1)
/subsystem=teiid:write-attribute(name=buffer-service-max-storage-object-size,value=8388608)
/subsystem=teiid:write-attribute(name=buffer-service-memory-buffer-off-heap,value=false)
Copy to Clipboard Toggle word wrap

警告

これらのプロパティーは、プロパティー自体と発生している問題を理解するまで変更しないでください。
主な設定の説明は以下の通りです。
  • max-reserve-kb (デフォルト値は -1) - この設定により、バッファマネージャーがメモリー内に保持できるバッチの合計サイズ (キロバイト単位) が決定されます。この数字には、ソフト参照 (インデックスページなど) または弱い参照で保持される永続バッチは含まれません。-1 のデフォルト値の場合は、VM で利用可能な最大ヒープに基づいて通常の最大値が自動的に計算されます。自動計算される値では、64 ビットのアーキテクチャーを前提とし、バッファーの使用が最初の 300 メガバイト (AS とその他の Red Hat JBoss Data Virtualization 目的の使用を担う) を超えるギガバイトの 40% とそれを超えるメモリーの 50% に制限されます。他に注意すべき点は、メモリーのバッファースペースのサイズが指定されないと、最大の予約領域が実質上割り当てられることになります。バッチトラッキングのオーバーヘッドを含めるよう、最大予約には多少の調節がなされます。
    デフォルト設定で 8GB VM サイズの場合、max-reserve-kb は最大で (((1024-300) * 0.4) + (7 * 1024 * 0.5)) = 4373.6 MB または 4,478,566 KB を使用します。
  • 予約領域の 25% 以上が使用されていて有効になっていると、バッファーマネージャーは正規の値キャッシュを自動的に使用します。この結果、類似の値セットが Red Hat JBoss Data Virtualization によって読み取られる場合にメモリー使用量が大幅に削減されることがあります。ただし、ルックアップコストが発生します。Red Hat JBoss Data Virtualization を使用して小さいデータセットまたは類似性が非常に高いデータセットを処理するときにメモリーを節約する場合は、値キャッシュの有効化を検討してください。
    メモリー消費量は、実際の列値と、値キャッシュが有効であるかどうかに応じて名目ターゲットよりも大幅に大きく、または小さくなることがあります。組み込みではない大きいオブジェクトはデフォルトの推測サイズを超えることがあります。メモリー不足エラーが発生した場合は、max-reserve-kb の値を低く設定します。また、ソース LOB 値はバッチが永続化されたときに削除されなかったメモリー参照により保持されることに注意してください。LOB を大量に使用する場合は、LOB 参照に関連付けられた他のメモリーのバッファーのサイズが適切に設定されていることを確認する必要があります。
  • max-processing-kb (デフォルト値は -1) - この設定により、max-reserve-kb に基づいて保持されるメモリー以外に、1 つのアクティブな計画で使用できるバッチの合計サイズ (キロバイト単位) が決まります。すべてのアクティブな計画がアクティブな場合に Red Hat JBoss Data Virtualization で必要な通常の最小メモリーは #active-plans*max-processing-kb です。-1 のデフォルト値の場合、VM で利用可能な最大ヒープとアクティブな最大計画数に基づいて一般的な最大値が自動的に計算されます。自動計算される値では、64 ビットのアーキテクチャを前提とし、名目のバッチ処理用の容量はメモリー合計の 10% 未満に制限されます。
    20 のアクティブな計画と 8GB VM サイズを含むデフォルト設定の場合、max-processing-kb は (.07 * 8 * 1024)/20^.8 = 537.4 MB/11 = 52.2 MB または 53,453 KB (1 つの計画あたり) になります。これは、1 つの計画あたり約 53 MB で 0 から 1060 MB の名目範囲が予約されることを示しています。max-processing-kb を自分で調節することについては、慎重になってください。通常、計画でメモリーが制限され、パフォーマンスが低下している場合を除いて、調節の必要はありません。
  • max-file-size (デフォルト値は 2GB) - 各中間結果バッファー、一時 LOB、および一意なテーブルは、独自のバッファーファイルセットに格納され、各ファイルは max-file-size メガバイトに制限されます。インストールで内部実体化を使用したり、SQL/XML を頻繁に使用したり、大量の行数を処理したりする場合は、max-buffer-space を増加させて、このようなすべてのファイルに利用可能なストレージ領域を拡大することを検討してください。
  • processor-batch-size (デフォルト値は 256) - クエリプロセッサーのバッチのターゲット列の数を指定します。バッチは、保存された結果などの線形データストアや一時的な表ページの表示に使用されます。Teiid は、列のデータ幅の予測に基づいて processor-batch-size を名目予測の 2KB に対して機能するサイズに調節します。ベースとなる値は、データ幅予測によって、2 倍または最大で 3 分の 1 にすることが可能です。たとえば、(整数などの) 単一の小規模固定幅のコラムバッチは、processor-batch-size * 8 列のサイズになります。(文字列などの) 数百もの変動幅データがあるバッチは、processor-batch-size / 8 列のサイズになります。プロセッサーバッチサイズの増加で最初の 2 倍以降は、max-storage-object-size も相対的に増加させてストレージサイズが大きくなったバッチに対応してください。
    大規模な VM サイズやデータセットを使用する場合は、さらなる考慮が必要になります。Red Hat JBoss Data Virtualization には、バッチ/ページあたりおよそ 100-200 バイトという無視できないオーバーヘッドがあります。数千万の列があるデータセットの処理中にメモリー不足という問題が発生したら、processor-batch-size を増やしてより大きなバッチと表ページの割り当ての強制を検討してください。一般的なガイドラインとしては、4 GB を超える Red Hat JBoss Data Virtualization の実効ヒープを 2 倍にする場合は processor-batch-size も 2 倍にします。たとえば、8 GB ヒープでは processor-batch-size = 512、16 GB ヒープでは processor-batch-size = 1024 といったようにします。
  • max-storage-object-size (デフォルト値は 8288608 または 8MB) - バッファー済み管理オブジェクトの最大サイズ (バイト単位) で、個別のバッチページサイズを表します。processor-batch-size を増加した場合、または (数百コラムの) 非常に幅広い結果セットを使用している場合、max-storage-object-size のデフォルト設定 (8MB) は小さすぎることがあります。また、inline-lobs の設定でも、小さな lob を含むバッチのサイズを増やすことができます。max-storage-object-size のサイズはシリアライズ化されたサイズであり、max-reserve-kb に使用される Java メモリーフットプリント推定値よりもローデータサイズにもっと近いものになります。max-storage-object-size はメモリーバッファーのパフォーマンスを低下させるおそれがあるので、これを memory-buffer-space に対して大きすぎる設定にしないでください。メモリーバッファーは、memory-buffer-space の各 max-storage-object-size の 1 ライターのみを一度にサポートします。この値は、processor-batch-size を調節しなければ、変更する必要は通常ありません。これを変更する場合は、processor-batch-size の増加に合わせて調整してください。
    バッチが見つからないことで例外が発生し、サーバーログに "TEIID30001 Max block number exceeded" が表示される場合は、max-storage-object-size を増やして大きいストレージオブジェクトをサポートします。別の方法では、processor-batch-size を小さくすることもできます。memory-buffer-space (デフォルト値は -1) - Red Hat JBoss Data Virtualization バッファーマネージャーが使用するバイトバッファーとして割り当てられたオンまたはオフヒープメモリーのサイズを制御します。この設定のデフォルト値は -1 で、この場合、オンヒープまたはオフヒープであるか、または max-reserve-kb の値に基づいて設定が自動的に決定されます。メモリーバッファーは、memory-buffer-space の各 max-storage-object-size で同時ライターを 1 つだけサポートします。他のスペースは、シリアル化されたバッチのキャッシュとして使用されます。
    デフォルト設定のままにすると、計算されるメモリーバッファースペースは、max-reserve-kb サイズの約 40% となります。メモリーバッファーがオンヒープで max-reserve-kb が自動計算されると、メモリーバッファースペースから実効 max-reserve-kb が引かれます。メモリーバッファーがオフヒープで max-reserve-kb が自動計算されると、そのサイズは多少小さくなり、仮想マシン内の機能メモリーの実効性が高まります。memory-buffer-off-heap (デフォルト値は false) - ヒープに割り当てずにシステムメモリーにアクセスするバッファーマネージャーのメモリーバッファーを活用します。memory-buffer-off-heap を "true" に設定すると、Red Hat JBoss Data Virtualization のメモリーバッファーはオフヒープに割り当てられます。インストールが Red Hat JBoss Data Virtualization かどうか、また利用可能なシステムメモリーの量によって、これはオンヒープ割り当てとすることが好ましい場合もあります。第一の利点は、追加のガーベッジコレクションチューニングなしで Red Hat JBoss Data Virtualization 用にメモリー使用量を追加できることです。これは、VM に 32GB を超えるメモリーが必要な場合に特に重要です。オフヒープ割り当てを使用する場合は、java プロセスがメモリーを使用できるようにする必要があります。memory-buffer-space の値を高く設定しすぎると、VM がメモリーに留まらずにスワップすることがあります。また、オフヒープバッファーサイズが大きい場合 (数ギガバイト以上) は、VM 設定を調整する必要がある場合があります。
Sun VM の場合、該当する VM 設定は MaxDirectMemorySize と UseLargePages です。たとえば、
-XX:MaxDirectMemorySize=12g -XX:+UseLargePages
Copy to Clipboard Toggle word wrap
上記の内容を VM プロセス引数に追加すると、Red Hat JBoss EAP または EAP 内で実行中のアプリケーションで必要となる可能性がある追加の直接メモリーに対応する約 11GB の Red Hat JBoss Data Virtualization メモリーバッファー (memory-buffer-space 設定) が効果的に割り当てられます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat