目次
事象
- S/4HANA 2020において大量レコードを持つ標準テーブルにアクセスするABAPプログラムが不定期に処理が長時間化する
- APサーバ、DBサーバともにCPUメモリはひっ迫していない
原因
大量レコードを持つSAP標準テーブルに対しバッファリング設定がされていた
バッファリングの解説
SAPシステムにおけるバッファリングとは、アプリケーションサーバのメモリ上にデータを一時的に保存し、データベースへのアクセスを減らす仕組みです。
主に読み取り処理の高速化を目的として使用され、特にマスターデータや定数テーブルなど、更新頻度が低く参照頻度が高いテーブルに適用されます。
バッファリングを活用することで、システム全体のレスポンスを向上させることができます。
SAPで使われる3種類のバッファ方式
SAPでは、用途やデータ特性に応じて下記の3種類のバッファ方式が用意されています。
フルバッファリングとは
テーブル全体を一括でメモリにロードする方式です。
小規模で更新の少ない定数テーブルに適しており、アクセス時のレスポンスが最も高速になります。
ジェネラルバッファリングとは
一部の範囲(主キーの特定値など)をメモリにロードする方式です。
中規模テーブルに向いており、フルバッファと比べてメモリ消費を抑えつつも高速性を実現できます。
シングルレコードバッファリングとは
主キー単位で個別のレコードを都度メモリに保持する方式です。
大量データを扱うテーブルでも一定のパフォーマンス改善が見込めます。
S/4HANAでは原則バッファなし
HANAが非常に高速であるため、DBアクセスのコストが下がり、むしろアプリ層のバッファを使うことで整合性のリスクや管理負荷が増えるケースがあります。
そのため、S/4HANAにおいてはSAP標準設定で「非バッファ」がデフォルトになっています。
テーブルごとのバッファ可否の判断基準
更新がほぼ発生しない小規模の定数テーブルは、引き続きバッファリングを活用することで効果を得られることがあります。
逆に、今回のような大量にレコードを持つテーブルにおいてはバッファリングは非推奨です。
更新頻度・参照頻度・データ量のバランスで判断
- 参照頻度が高く、更新頻度が極めて低い → バッファ有効
- 更新が頻繁 → バッファ無効が基本
- データ量が多すぎる → メモリ負荷増 → バッファ非推奨
バッファ設定方法
- Tr-cd:SE11を実行
- オブジェクトタイプ:「データベーステーブル」を選択
- テーブル名を入力
- 「変更」ボタンを押下
- メニューバーから「テーブル → テクニカル設定」を選択
- 「バッファ許可」にチェックを入れる(または外す)
- バッファリング方式を選択(チェックありの場合のみ)
- 「バッファ数」「クライアント依存」なども必要に応じて設定
- 「保存(Ctrl + S)」を実行
- 「アクティベート(Ctrl + F3)」を実行