今回はHANAの重要パラメータ「statement_memory_limit」を取り上げます。
HANAは従来アプリケーションサーバで行っていた処理をデータベース上で実行することができます(コードプッシュダウン)。これによりデータ処理のパフォーマンスが向上することになりますが、同時に大量のHANAメモリを消費するクエリが実行される可能性を意味します。
HANAメモリの大量消費によるシステム障害防止のため、クエリに対するメモリを制限するパラメータがstatement_memory_limitです。
語ると長くなりますので、今回もChatGPTさんに要約してもらいました(かなり加筆修正を入れていますが..)。
概要
- 目的:
statement_memory_limit
は、SAP HANAで実行される個々のSQLステートメントが消費することができるメモリの最大量を指定します。これにより、特定のクエリがシステムリソースを過度に消費するのを防ぐことができます。 - 影響範囲: このパラメータは個々のSQLステートメントに影響を及ぼし、システム全体のメモリ制限とは異なります。
設定方法
- SAP HANA Studio:
- HANA Studioを使用して、
Administration Console
で対象のシステムを選択。 Configuration
タブに移動し、global.ini
->memorymanager
を選択。statement_memory_limit
を検索し、値を変更。
- SQLコマンド:
- 値の変更
ALTER USER SET PARAMETER STATEMENT MEMORY LIMIT = '値'
- 値のクリア
ALTER USER <user_name> CLEAR PARAMETER STATEMENT MEMORY LIMIT
- 参照:https://help.sap.com/docs/SAP_HANA_ONE/1c837b3899834ddcbae140cc3e7c7bdd/7b3e645df1d044cead4d208ed62e8ef7.html
初期値
- HANA2.0 SPS05までは
0
(制限なし)に設定されています。 - HANA2.0 SPS06以降は
-1
(global_allocation_limit の25%)が設定されます。 - 参照:https://userapps.support.sap.com/sap/support/knowledge/en/3211034
推奨値
- 推奨値は、システムのサイズ、使用状況、利用可能なリソースに依存します。
- 但し、HANA2.0 SPS06以降はglobal_allocation_limit の25%がデフォルト値であることから、同程度の値が妥当であると考えられます。
注意事項
- 過剰制限: あまりに低い値に設定すると、正常に機能するクエリが不足によって失敗する可能性があります。
- 監視: 設定後は、システムのパフォーマンスとクエリの動作を監視し、必要に応じて調整することが重要です。
- 前提条件: global.iniの以下のパラメータがonになっている必要があります。
enable_tracking = on
memory_tracking = on
よくあるトラブル
- クエリの失敗: メモリ制限が原因でクエリが失敗することがあります。これは、
statement_memory_limit
が低すぎる場合に発生する可能性があります。 - パフォーマンス問題: 制限が高すぎると、他のプロセスやクエリのパフォーマンスに影響を与えることがあります。制限が無い場合、システム障害に発展する可能性があります。
関連パラメータとの関連性
global_allocation_limit
: システム全体のメモリ使用量を制御します。statement_memory_limit
はこの全体的な制限の中で動作します。
SAP HANAのメモリ管理とパラメータ設定は複雑なトピックであり、特定の環境と要件に合わせて慎重に調整する必要があります。専門家の助言やSAPの公式ドキュメントを参照することをお勧めします。