SQL 例
4 性能向上策
4.2 表定義プール機能
ここでは,表定義プール機能を使用して
SQL
の処理性能を向上する方法について説明し ます。4.2.1 表定義プール機能とは
操作系
SQL
の前処理を行うときに,XDBはディクショナリ表にアクセスして,SQL中 に指定されている表の表定義情報を作成します。表定義情報とは,表にアクセスすると きに必要となる情報で,表の情報だけではなく,列やインデクスの情報なども含んでい ます。一度作成した表定義情報をメモリ上に保存しておき,同じ表定義情報が必要になったと きに,保存していた表定義情報を再利用します。表定義情報を保存しておく領域を表定 義プールといい,ディクショナリ表を検索して作成した表定義情報を格納し,必要に応 じて再利用する機能を表定義プール機能といいます。表定義プール機能を使用すると,
ディクショナリ表にアクセスして表定義情報を作成する必要がなくなるため,その分の オーバヘッドが削減され,SQLの処理性能が向上します。
表定義プールがいっぱいになった場合,表定義プールに保存されている表定義情報が掃 き出されます。表定義情報は
LRU
方式で管理されているため,最も長い時間使われてい ない表定義情報が掃き出されます。表定義プール機能を使用する場合は,XDBサービス定義の
xdb_tabledefpool_size
オペ ランドを指定してください。参考
SQLの前処理時の処理の流れを次に示します。
1. SQL中に指定されている表の表定義情報が表定義プールに保存されているかどうかを検
索します。
2. 表定義情報が保存されている場合は,保存されている表定義情報を再利用します。この 場合,ディクショナリ表へのアクセスは発生しません。
3. 表定義情報が保存されていない場合は,ディクショナリ表にアクセスして表定義情報を 作成し,表定義プールに保存します。
このとき,表定義プールがいっぱいの場合は,表定義プールに保存されている表定義情 報を掃き出して空き領域を確保し,作成した表定義情報を保存します。
なお,使用中の表定義情報は表定義プールから掃き出されません。このため,掃き出す ことができる表定義情報がなかったり,掃き出しても必要な大きさの表定義プールが確 保できなかったりした場合は,その表定義情報は使用されたあとで保存されないため,
再利用されません。
4.2.2 表定義プールサイズの見積もり
次に示す計算式から表定義プールサイズの概算値を見積もってください。ここで計算し た値を
XDB
サービス定義のxdb_tabledefpool_size
オペランドに指定します。計算式
注※
ユーザが定義した表のほかに,ディクショナリ表も含まれています。
1
表当たりの表定義情報のサイズは,次に示す計算式から求めてください。計算式
変数の説明 a:表の列数
b:表に定義されているインデクス数
メモリ容量の制限などで,すべての表の表定義情報を保存できる表定義プールサイズを 確保できない場合は,頻繁にアクセスする表の表定義情報を格納できるように見積もっ てください。
表定義プールにすべての表の表定義情報が格納できない場合,SQLの前処理時にディク ショナリ表へのアクセスが発生するため,性能が低下するおそれがあります。
4.2.3 表定義プールサイズが適切かどうか確認する方法
TP1/EE
が取得するシステム統計情報を参照して,表定義プール機能の効果を確認してください。次の表に示す項目を定期的に確認し,表定義プールサイズが適切かどうか確 認して表定義プール機能のチューニングを行ってください。
表
4-3 システム統計情報で確認する項目(表定義プール機能の場合)
↑すべての表※の表定義情報のサイズ÷1024↑×1.2 (単位:キロバイト)
↑{(160×a+496×b+879)÷512}×512↑ (単位:バイト)
項番 システム統計情報 で確認する項目
項目の内容 分析時の考え方と対処方法 1 表定義情報取得要 表定義情報の取得要求回数 −
(凡例)
−:特にありません。
注※
表定義情報のヒット率は次に示す計算式から求めます。
システム統計情報の取得方法については,「7.3.2 システム統計情報に出力される
XDB
に関する情報」を参照してください。4.2.4 表定義情報の一括先読み
XDB
の開始直後は,表定義プールに表定義情報が保存されていないため,操作系SQL
が実行されると,必ず表定義情報の作成処理が行われます。したがって,XDBの開始直 後は,表定義プール機能による性能向上が期待できません。XDB
の開始直後から表定義情報を再利用して,SQLの処理性能を向上したい場合は,表 定義情報の一括先読みを行ってください。表定義情報の一括先読みとは,XDBの開始時 2 表定義情報取得要求エラー回数
存在しない表をSQL中に指 定したときのエラー回数の 累計です。
−
3 表定義プールヒッ ト回数
表定義プールから表定義情 報を再利用した回数の累計 です。
表定義情報のヒット率※を計算してくだ さい。
表定義情報のヒット率が80%以下の場 合は,表定義プールサイズを大きくする ことを検討してください。
4 表定義プール情報 掃き出し回数
表定義プールから表定義情 報が掃き出された回数の累 計です。
掃き出し回数が0の場合は問題ありませ ん。
0以外の場合は,表定義プールサイズが 不足しているおそれがあります。表定義 プールサイズを大きめにとってXDBを 稼働したあとに,「表定義プール表定義 最大サイズ」を確認してください。
5 表定義プール表定 義最大サイズ
表定義プールに保存されて いる表定義情報の合計長で す(単位:バイト)。
「表定義プール表定義最大サイズ」と見 積もった表定義プールサイズを比較して ください。
表定義情報の合計長が,表定義プールサ イズに比べて極端に小さい場合は,表定 義プールサイズが大き過ぎて,むだな領 域があると考えられます。この場合,表 定義プールサイズを表定義情報の合計長 に見合った大きさに修正してください。
表定義情報のヒット率=
(表定義プールヒット回数÷表定義情報取得要求回数)×100(単位:%)
項番 システム統計情報 で確認する項目
項目の内容 分析時の考え方と対処方法
に,ユーザが定義したすべての表とディクショナリ表の表定義情報を表定義プールに一 括して読み込み,保存しておく機能です。表定義情報の一括先読みを行う場合は,XDB サービス定義の
xdb_table_preread
オペランドにY
を指定してください。なお,表定義情報の一括先読みを使用する場合は,ユーザが定義したすべての表とディ クショナリ表の表定義情報をすべて保存できる大きさの表定義プールが必要になります。
参考
表定義情報の一括先読みの実行時に,表定義プールサイズが不足していると,すべての表定 義情報を表定義プールに保存できません。この場合,XDBは表定義プールに保存できるだ けの表定義情報を保存し,その旨のメッセージを出力します。