外部表へのアクセスの性能を決定する要因には次の三つがあります。性能設計では,これらを考慮して,設計する必要があります。
- HiRDB内部処理の性能
HiRDB内部処理とは,外部表へのアクセスを含む問合せを処理する場合に必要なHiRDB内の処理です。HiRDB内部処理の性能を上げるには,外部表へのアクセス性能のチューニングが必要になります。外部表へのアクセス性能のチューニングについては,「2.3.3 外部表へのアクセス性能のチューニング」を参照してください。
- 外部サーバ内処理の性能
外部サーバ内処理とは,外部サーバとして使用しているDBMS個々の処理です。外部サーバ内処理の性能を上げるには,外部サーバに発行されるSQLを外部サーバのチューニングツールで解析する必要があります。外部サーバに発行されるSQLは,アクセスパス表示ユティリティ(pdvwoptコマンド)で取得できます。
アクセスパス表示ユティリティについては,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
- ネットワーク通信の性能
外部サーバへのアクセス時,ネットワーク通信で性能が低くなるのは次のような場合です。
- HiRDB,外部サーバ間で大量のデータが転送される場合
大量データの通信は,外部サーバからHiRDBに渡される問合せの中間結果が大きい場合,またはHiRDBから外部サーバに渡される中間結果のデータが大きい場合に発生します。
(例1)外部サーバからHiRDBに渡される問合せの中間結果が大きい場合
例えば,外部表T1のデータが大量の場合,次の問合せは大量のデータ通信が発生します。
SELECT * FROM T1;
また,外部表T1と外部表T2が異なる外部サーバに存在して,それらのデータが大量の場合,次の問合せは大量のデータ通信が発生します。ここで,T1.C1は外部表T1の中の列C1を,T2.C2は外部表T2の中の列C2を意味します。
SELECT * FROM T1, T2 WHERE T1.C1=T2.C2;
(例2)外部サーバからHiRDBに渡される問合せの中間結果が小さくなる場合
次のように外部サーバで中間結果が(COUNT(*)の結果だけに)絞り込まれる場合は,通信量が少なくなります。
SELECT COUNT(*) FROM T1;
次の問合せも,外部サーバで「T1.C1 = 10」の絞り込みを行い,T1とT3を結合した結果がHiRDBに転送されるため,通信量が少なくなります。ここで,外部表T1と外部表T3は,同一の外部サーバにあるものとします。
SELECT * FROM T1, T3 WHERE T1.C1=10 AND T1.C1=T3.C1;
- HiRDB,外部サーバ間で多数の通信が行われる場合
大容量の回線でも,長距離ネットワークのように通信遅延時間が大きい場合には,通信回数の増加によって処理性能が下がります。多数の通信は,サーバ間で大量のデータが転送される場合,または,分散ネストループジョインで外部サーバに対するSQL文の問合せ発行回数が多くなる場合にも発生します。
(例1)サーバ間で大量のデータ転送を行う場合
例えば,外部表T1のデータが大量の場合,次の問合せの結果を1行ずつ転送すると,多数の通信が発生します。
SELECT * FROM T1;
(例2)分散ネストループジョインによる大量のSQL文発行を伴う場合
例えば,次の問合せが,T1を外表,T2を内表とする分散ネストループジョインで実行される場合を考えます。
SELECT * FROM T1, T2 WHERE T1.C1 = 10 AND T1.C2 = T2.C2;
「T1.C1 = 10」の絞込み後の中間結果行数が多くなると,その行数文だけT2を持つ外部サーバへSQL文が発行されるため,HiRDBと外部サーバ間で多数の通信が発生します。