SAP テーブルバッファリング―3タイプ別解説

ABAP

本ページではSAPでアドオンテーブル作成時に設定できるバッファタイプについて解説します。

テーブルバッファリング・・・?

実はこの設定はアドオンテーブル作成時の必須項目ではないため、実は理解せずともなんとなく生きていけてしまうのですが、知っていると便利なのでこのページで解説します。

以下の解説は、アドオンテーブルとは何かをなんとなく知っている必要があります。もし、いまいち理解できていないと感じる方は以下のページを読んでから戻ってきてください。

それでは、早速解説を始めます。

スポンサーリンク
スポンサーリンク

テーブルバッファリングとは?

前提:アプリケーションサーバとDBサーバと関係性

テーブルバッファリングを理解するためには、大前提としてデータベースとアプリケーションサーバの関係性の理解が不可欠です。

以下の図をご覧ください。

基本的な理解として、データベースサーバとアプリケーションサーバは上記の図のような関係性にあります。

「3層クライアントシステム」という概念がいまいちわからない人は、ここでいうアプリケーションサーバを「プログラムを実行するサーバ」と理解してください。画面にデータを表示するためには、以下のようにアプリケーションサーバとデータベースサーバ間でやり取りを行います。

① アプリケーションサーバ(プログラム)がデータベースサーバにアクセス

② データベースサーバから命令に沿ったデータをアプリケーションサーバに返送

③ アプリケーションサーバ上で表示

※専門的なことを言うとこのページでは解説しきれなくなるので、便宜上以上の3ステップで話を進めます。

テーブルバッファリングの概念

ここまで解説した通り、アプリケーションサーバとデータベースサーバは、常に通信しあって動いていることが分かります。

しかし、この「通信量」が問題です。

一つのプログラム内で同じテーブルから取得した同じようなデータを複数回利用する場合があるとします。その際、問題になるのが、同じデータにも拘わらず、何度も通信が発生してしまうので、結果としてパフォーマンスが悪くなってしまうのです。

同じデータであれば、いっそのことアプリケーションサーバに覚えさせちゃえばいいのでは???

そうです。アプリケーションサーバにデータを覚えさせておくことを、「テーブルバッファリング」と言います。

複数回同じデータを必要とする場合、次回以降はデータベースサーバにデータを要求するのではなく、アプリケーションサーバに覚えさせたデータを読みにいくようになりパフォーマンスがなんと1000000倍ほど向上すると言われています。

テーブルバッファリングの設定

テーブルバッファリングの設定は、以下の画面アドオンテーブルの「技術設定」画面で行います。

下記の画面をご覧ください。

まず、バッファリングを不可とするか可とするかを設定します。バッファリングを有効化する場合は「バッファリング有効化済」を選択します。バッファリング有効化済を選択した場合、バッファタイプを選択する必要があります。

以下では、それぞれのバッファタイプにつて解説します。

3つのテーブルバッファタイプ

単一レコードバッファ

単一レコードバッファを指定すると、バッファ(つまりアプリケーションサーバに覚えさせること)するのは対象のテーブルの1つのレコードのみになります。

1レコードのみのバッファリングのため、次回別のレコードを読みに行く場合は再度データベースサーバにデータを要求します。

ジェネリックエリアバッファ

ジェネリックとは「一般的」という意味です。読み込みしたデータと同じような(一般的な)データをバッファします。

ジェネリックエリアバッファを利用する場合、「キー項目数」を設定します。

ジェネリックエリアバッファでは、キー項目数が例えば「2」と設定されている場合、データの左から2つの項目が一致しているデータを全てバッファすることになります。

完全にバッファ(フルバッファ)

フルバッファでは、対象のテーブルに含まれる全データをバッファします。

次回同じテーブルにあるデータはデータベースサーバに再要求する必要はありません。どのようなデータでも当該のテーブルであれば、アプリケーションサーバのバッファからデータを読み込むことになります。

テーブルバッファリングの注意点

上記説明だけで解説を終えてしまうと、「じゃあフルバッファだけ使えばいいな」となってしまうので、ここからはテーブルバッファリングの注意点を説明します。

テーブバッファは必要最低限で設定する

テーブルバッファリングを設定すると、アプリケーションサーバとデータベースサーバで一定期間同期をする必要が出てきます。

つまり、アプリケーションサーバに覚えさせたデータは常に最新のものである必要があります。このために、アプリケーションサーバのバッファとデータベースの同期をするために、一定期間で同期通信が必要になります。

この同期通信では、対象のデータが多ければ多い程同期通信の量が増出します。したがって、あまりにも大きいテーブルをバッファしてしまうと、パフォーマンス低下につながります。バッファすることによる通信量の削減を、同期通信での通信量が上回ってしまうと結果としてパフォーマンスが低下してしまいます。

読み取るデータが最新ではない可能性がある

同期通信が一定間隔で行われるため、アプリケーションサーバ上のデータとデータベースサーバの実際のデータに差異がでるタイミングがあります。したがって、バッファしたデータが最新のものではない可能性があることを考慮しなければなりません。もし実際のテーブルデータとバッファリングしているデータに差異が発生した場合は、以下のコマンドを実行します。

バッファのリセット

コマンド項目:$TAB

トランザクションコードを入力する場所に「$TAB」と入れてEnterボタンを押下し実行します。

このコマンドを1度実行すると、3~7時間ほどかかるため実行前の確認は丁寧に実行する必要があります。また、実行中はシステムパフォーマンスを大きく低下させてしまうため、非常時以外に利用することは避けるのが賢明です。

最後に

このページではテーブルバッファリングについて説明しました。

何かパフォーマンスが良くないな、と思ったら本ページを参考にしてテーブルバッファリンについて設定を考えてみてください。

タイトルとURLをコピーしました