共用バッファは、データベースをアクセスする際のバッファとして利用されます。このバッファは、複数のアプリケーションで共有されるバッファです。
アプリケーションの要求でデータベースをアクセスしますが、アプリケーションが要求するデータ(レコード)が共用バッファ上に存在すれば、ディスクへのI/Oを行わずにそのデータにアクセスすることができます。したがって、共用バッファをチューニングすることによって、アプリケーションのレスポンスの改善、単位時間当たりのトランザクション実行数を向上させることができます。たとえば、アプリケーションの処理で必要なデータがすべて共用バッファ上に存在するように共用バッファ数をチューニングすることによって、データベースの検索をディスクへのI/Oなしで行うことができます。
このように、データベースのチューニングにおいては、共用バッファのチューニングが非常に効果的です。
なお、共用バッファを大きくしても、ディスク量が大きく、バッファヒット率が向上しない場合、表のデータ圧縮機能の利用を検討してください。表のデータ圧縮を行うことにより、バッファに展開されるデータ量が増加し、バッファヒット率が向上します。また、ディスクからデータを取得する場合のI/O量が削減されるため、データアクセス性能が向上する可能性があります。ただし、CPUの使用率が上昇します。
Symfoware/RDBでは、データベース管理者による共用バッファの作成が行われなくても、小規模なデータベースが動作する程度の共用バッファが用意されています。これを、デフォルトバッファと呼びます。通常、共用バッファのチューニングは、このデフォルトバッファの枚数を増やすというのではなく、表やインデックスに対してどんなアクセスを行うのかを考えます。その表やインデックスごとに、またはいくつかの表やインデックスのグループごとにバッファプールを作成し、そのバッファプール内の共用バッファ枚数や、危険値、安全値を設定していくことを共用バッファのチューニングと呼びます。
共用バッファのチューニングでは、まず、データベースのバッファとしてどの程度のメモリを割り当てるべきかを決める必要があります。共用バッファに使用すべきメモリ量は、データベースの使い方やアプリケーションの実行多重度により大きく変動しますが、一般的なケースでは、そのマシンに実装される実メモリ、または、Symfoware/RDB処理に割り当てられるメモリ量の半分以下が適切と考えられます。それ以上をこの共用バッファに割り当てても性能向上にはならず、逆に、SQL処理で使用するソートやワークのメモリ量が少なくなることから性能が非常に悪くなります。
表やインデックスの使い方(参照方法、更新方法など)を考えることによって、共用バッファの割付け枚数をどうすれば良いかがわかります。
共用バッファ枚数のチューニングは、以下の手順で行います。
表やインデックスのDSIごとに一律共用バッファ数を割り当ててください。
共用バッファ数は、以下のように考えられます。
各表やインデックスの共用バッファ数 = アプリケーションの実行多重度×n
nは、DSI数、使用可能メモリ量を考え、適当な値を取ってください。
表やインデックスのアクセスパターンに応じて、1.の共用バッファ数を調整してください。
アクセス頻度の高い表やインデックスに多く共用バッファを割り付けます。
頻繁にアクセスされるもので、小規模なマスタ表または小規模なインデックスは、メモリに常駐できるだけの共用バッファ数を割り当ててください。中規模なインデックスで、すべてをメモリ常駐できない場合は、少なくともINDEX部だけはメモリ常駐させることを考えて共用バッファ数を割り当ててください。
この作業を行いながら、アクセスパターンに応じてバッファプールとDSIの関係を考えてください。
1つのDSIを1つのバッファプールに割当てるパターン
アクセスの方法が次のパターンのときに採用される割当て方です。
そのDSIのデータをメモリに常駐させたい場合
他の表やインデックスへのアクセスの影響を受けさせたくない場合
複数の表やインデックス、またはDSIを1つのバッファプールに割り当てるパターン
アクセスの方法が次のパターンのときに採用される割当て方です。
運用テストを行い、共用バッファ数を再調整してください。
運用テストでは、rdbsarコマンドを使って、オンバッファヒット率、バッファ枯渇回数、未使用バッファ最低枚数などの情報をみて、共用バッファプール内のページ数、危険値、安全値、および、共用バッファとDSIの関係づけを再検討してください。
rdbsarコマンドの使い方の詳細は、“12.4 性能監視”を参照してください。
共用バッファは、次の2つのRDBコマンドを使って作成します。
rdbcrbfコマンドにより、バッファプールを作成します。
共用バッファプール内のページ数、安全値、危険値を設定します。
rdbconbfコマンドにより、バッファプールとDSIとを関係づけます。
バッファプール内の共用バッファのサイズと、DSIのページサイズは一致している必要があります。
共用バッファは、次の2つのRDBコマンドを使って削除します。
rdbdisbfコマンドにより、バッファプールとDSIとの関係を削除します。
rdbdrbfコマンドにより、バッファプールを削除します。