SQLオブジェクト用バッファ長(pd_sql_object_cache_sizeオペランドの値)のチューニング方法を説明します。SQLオブジェクトで使用するバッファをチューニングするときには,次に示す内容を考慮してください。
- ●SQLオブジェクトとSQLオブジェクト用バッファの関係
- HiRDBでは,UAP中のSQL文をSQL文ごとに解析して,UAPを実行するときに,実行形式のSQLオブジェクトを作成しています。このため,同じUAPを異なるユーザが後から実行する場合,発行したSQL文に対応するSQLオブジェクトが,既にSQLオブジェクト用バッファにあると,SQLオブジェクトを作成する時間を削減でき,発行したSQL文の処理時間を短縮できます。
- したがって,SQLオブジェクト用バッファのヒット率が低い場合,バッファから出力されたSQL文のSQLオブジェクトは,再度同じSQL文を実行するときにSQL文を解析して,SQLオブジェクトを作成します。このため,データベースに対するアクセス件数が少ないSQL文の実行時には,長い処理時間が必要となります。
- また,SQLオブジェクト作成に関しては,SQL文の解析時にアクセスする表の定義情報が表定義情報バッファにない場合,ディクショナリ表に対するアクセスを必要とするため,アクセスする表の数や列数,アクセス件数が多いときは排他に要するリソースが増え,長い処理時間が必要となります。
- ●SQLオブジェクト用バッファの考え方
- HiRDB/パラレルサーバでは,一つのSQL文に対して複数のSQLオブジェクトを作成しています。次にバックエンドサーバとフロントエンドサーバでの,SQLオブジェクトの特長を示します。
- バックエンドサーバの場合
該当するバックエンドサーバ(フロータブルサーバを含みます)ごとに実行する形式として作成されています。このため,バックエンドサーバのSQLオブジェクト用バッファには,フロントエンドサーバでバッファリングしているSQLオブジェクトのうち,該当するバックエンドサーバのSQLオブジェクトだけがバッファリングされるため,必要なSQLオブジェクト用バッファはフロントエンドサーバよりも少なく済みます。
- フロントエンドサーバの場合
フロントエンドサーバでは,バックエンドサーバのすべてのSQLオブジェクトをSQLオブジェクト用バッファに格納しています。このため,コストベース最適化によって,選択できるアクセス手順にSQLオブジェクトが作成されるため,相当量のSQLオブジェクト用バッファがないと効果がありません。
なお,ストアドプロシジャ及びストアドファンクションについても同様のことが言えます。ストアドプロシジャ及びストアドファンクションの場合,通常のSQLと比べて特にSQLオブジェクトサイズが大きくなるため注意してください。
なお,次に示す統計情報と合わせて解析すると効率良く性能を向上できます。
- SQLオブジェクトに関する情報
SQLオブジェクトごとに使用するバッファ長を解析するときに取得します。
- SQLに関する情報
バッファ長が小さ過ぎるかどうかを解析するために取得します。
- <この項の構成>
- (1) チューニング方法(その1)
- (2) 解析方法(その2)
- (3) 解析方法(その3)
- (4) 解析方法(その4)
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.