4.2.1 表定義プール機能とは

操作系SQLの前処理を行うときに,XDBはディクショナリ表にアクセスして,SQL中に指定されている表の表定義情報を作成します。表定義情報とは,表にアクセスするときに必要となる情報で,表の情報だけではなく,列やインデクスの情報なども含んでいます。

一度作成した表定義情報をメモリ上に保存しておき,同じ表定義情報が必要になったときに,保存していた表定義情報を再利用します。表定義情報を保存しておく領域を表定義プールといい,ディクショナリ表を検索して作成した表定義情報を格納し,必要に応じて再利用する機能を表定義プール機能といいます。表定義プール機能を使用すると,ディクショナリ表にアクセスして表定義情報を作成する必要がなくなるため,その分のオーバヘッドが削減され,SQLの処理性能が向上します。

表定義プールがいっぱいになった場合,表定義プールに保存されている表定義情報が掃き出されます。表定義情報はLRU方式で管理されているため,最も長い時間使われていない表定義情報が掃き出されます。

表定義プール機能を使用する場合は,XDBサービス定義のxdb_tabledefpool_sizeオペランドを指定してください。

参考
SQLの前処理時の処理の流れを次に示します。
  1. SQL中に指定されている表の表定義情報が表定義プールに保存されているかどうかを検索します。
  2. 表定義情報が保存されている場合は,保存されている表定義情報を再利用します。この場合,ディクショナリ表へのアクセスは発生しません。
  3. 表定義情報が保存されていない場合は,ディクショナリ表にアクセスして表定義情報を作成し,表定義プールに保存します。
    このとき,表定義プールがいっぱいの場合は,表定義プールに保存されている表定義情報を掃き出して空き領域を確保し,作成した表定義情報を保存します。

なお,使用中の表定義情報は表定義プールから掃き出されません。このため,掃き出すことができる表定義情報がなかったり,掃き出しても必要な大きさの表定義プールが確保できなかったりした場合は,その表定義情報は使用されたあとで保存されないため,再利用されません。