4.5.4 フロータブルサーバの割り当て方法(HiRDB/パラレルサーバ限定)
- 〈この項の構成〉
(1) HiRDBでの問合せ処理方式
HiRDB/パラレルサーバでのSQL文の問合せ処理は,主に3ステップに分けて実行しています。HiRDB/パラレルサーバでのSQL文の問合せ処理方式を次の図に示します。
- [説明]
-
-
バックエンドサーバでデータを取り出します。2表以上の問合せの場合,結合方式によってはバックエンドサーバ間でデータの通信が実行され,ステップ1.が更に数段階になるときがあります。
-
フロータブルサーバでグループ化,ソート,重複排除,集合演算処理などをします。処理方式によっては,フロータブルサーバを使用しない場合や,フロータブルサーバ間でデータの通信が実行され,ステップ2.が更に数段階になるときがあります。
-
フロントエンドサーバで問合せ結果を集めて,クライアントに転送します。
-
HiRDBでは,ステップ2で使用するフロータブルサーバは,SQLごとにそのSQLでアクセスしないバックエンドサーバを自動的に割り当てます。ただし,SQL最適化オプションを指定した場合には,フロータブルサーバの割り当て方法を変更できます。
フロータブルサーバを使用するSQLと,フロータブルサーバの割り当てに関する最適化を次に示します。なお,これらの最適化の特徴については,「フロータブルサーバの割り当てに関する最適化の特徴」を参照してください。
-
フロータブルサーバ対象拡大(データ取り出しバックエンドサーバ)
-
フロータブルサーバ対象限定(データ取り出しバックエンドサーバ)
-
データ収集用サーバの分離機能
また,次の最適化を適用すると,フロータブルサーバの割り当て台数を最大値まで増やせます。なお,この最適化の特徴については,「フロータブルサーバの割り当て候補数に関する最適化の特徴」を参照してください。
-
フロータブルサーバ候補数の拡大
(2) フロータブルサーバを使用するSQL
次のどれかの条件に当てはまる場合,SQL文の問合せ処理でフロータブルサーバを使用します。
-
UNION [ALL]句又はEXCEPT [ALL]句を指定して検索する場合
-
SELECT文で次に示す指定をする場合
-
複数の表を結合して検索するとき
-
インデクスを定義していない列に対してORDER BY句を指定するとき
-
横分割表に対してORDER BY句を指定するとき
-
選択式中に集合関数を含む値式を指定しているとき
-
選択式中にウィンドウ関数COUNT(*) OVER()を含む値式を指定しているとき
-
GROUP BY句を指定するとき
-
DISTINCT句を指定するとき
-
FOR UPDATE句を指定するか又はこのカーソルを使用した更新があり,インデクスを定義した列に検索条件を指定するとき
-
FOR READ ONLY句を指定するとき
-
限定述語の副問合せを指定するとき
-
-
INSERT文の挿入元の問合せ本体に,次に示す指定をする場合
-
外への参照がある副問合せに更新表を指定するとき
-
挿入元の問合せ式本体の主問合せに更新表を指定するとき
-
-
UPDATE文に次に示す指定をする場合
-
探索条件中又は更新値中に,外への参照がある副問合せを指定し,その副問合せ中に更新表を指定するとき
-
探索条件中に限定述語の副問合せを指定するとき
-
-
DELETE文に次に示す指定をする場合
-
探索条件中の外への参照がある副問合せに,更新表を指定するとき
-
探索条件中に限定述語の副問合せを指定するとき
-
(3) フロータブルサーバの割り当てに関する最適化の特徴
フロータブルサーバの割り当てに関する最適化の特徴を次の表に示します。
最適化方法 |
長 所 |
短 所 |
---|---|---|
省略した場合 |
データ取り出しバックエンドサーバに,ソートなどの負荷が掛かる処理を割り当てないため,同時に同じバックエンドサーバからデータを取り出すSQL文を実行した場合,高速に検索できます。 |
データ取り出し以外のバックエンドサーバをフロータブルサーバとして割り当てるため,通信負荷が高くなります。 |
「フロータブル候補数の拡大」と組み合わせると,フロータブルサーバをすべてのバックエンドサーバに割り当てるため,フロータブルサーバでのソートなどの並列処理の効果が高くなります。 |
複数のSQL文を同時に実行する場合,同一フロータブルサーバに複数の処理が割り当てられるため,同時実行性が損なわれます。また,通信負荷も高くなります。 |
|
検索に使用する表が定義されているバックエンドサーバにだけ,フロータブルサーバを割り当てるため,表定義によって使用するバックエンドサーバを使い分けることができます。 |
分割数が少ない表に大量のデータが格納されている場合は,使用できるフロータブルサーバが少なくなるため,すべてのバックエンドサーバを有効に使用できなくなります。 |
|
データ収集用サーバにデータを送る場合,同じサーバと別サーバから同時にデータが転送されると,同じサーバからの転送を優先します。これによって,別サーバの処理は後になってしまいます。データ収集用サーバの分離機能を適用すると,すべてのサーバを別サーバとして扱うことができるので,すべてのサーバから均等にデータを受け取れるようになります。 |
1SQL文中に集合演算,副問合せを伴った検索など,問合せが複数個ある場合は,常に同じフロータブルサーバが使用されるため,同時実行性が損なわれます。 |
(4) フロータブルサーバの割り当て候補数に関する最適化の特徴
フロータブルサーバの割り当て候補数に関する最適化の特徴を次の表に示します。
最適化方法 |
長 所 |
短 所 |
---|---|---|
省略した場合 |
データ件数が多い検索では,フロータブルサーバの割り当て台数を多くします。データ件数が少ない検索では,フロータブルサーバの割り当て台数を少なくします。 |
探索条件に=やBETWEENなどの絞り込める述語を指定している場合,HiRDBはデータ件数が少ないと判断します。実際に=やBETWEENなどであまり絞り込めない場合でも,フロータブルサーバの割り当て台数を少なくするため,サーバの処理負荷が高くなります。 |
データ件数が多い検索では,すべてのフロータブルサーバを使用して効率的に検索できます。 |
データ件数が少ない検索でもすべてのフロータブルサーバを使用するため,SQL文の同時実行性が損なわれます。また,サーバ間の通信経路が複雑になるため,表の分割数が多い場合には,通信負荷も高くなります。 |
(5) 各最適化でのフロータブルサーバの割り当て方法
(a) 最適化方法を省略した場合
最適化方法を省略した場合のフロータブルサーバの割り当てを次の図に示します。
- [説明]
-
「フロータブルサーバ候補数の拡大」を指定しない場合は,FLT1及びFLT2から,HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし,FLT1及びFLT2の両方を割り当てるとは限りません。
「フロータブルサーバ候補数の拡大」を指定した場合は,FLT1及びFLT2の両方を割り当てます。
表を定義していないバックエンドサーバがある場合で,複数のSQLから同じデータを取り出し,データ取り出しバックエンドサーバをデータ取り出し処理にだけ使用するときに適用してください。
(b) フロータブルサーバ対象拡大(データ取り出しバックエンドサーバ)を適用する場合
フロータブルサーバ対象拡大(データ取り出しバックエンドサーバ)を適用する場合のフロータブルサーバの割り当てを次の図に示します。
- [説明]
-
「フロータブルサーバ候補数の拡大」を指定しない場合は,BES1,BES2,BES3,FLT1,及びFLT2から,HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし,すべてのサーバを割り当てるとは限りません。
「フロータブルサーバ候補数の拡大」を指定した場合は,BES1,BES2,BES3,FLT1,及びFLT2を割り当てます。
SQL文を単独で実行する場合で,すべてのバックエンドサーバを効率的に使用するときに適用してください。
(c) フロータブルサーバ対象限定(データ取り出しバックエンドサーバ)を適用する場合
フロータブルサーバ対象限定(データ取り出しバックエンドサーバ)を適用する場合のフロータブルサーバの割り当てを次の図に示します。
- [説明]
-
「フロータブルサーバ候補数の拡大」を指定しない場合は,BES1,BES2,及びBES3から,HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし,BES1,BES2,及びBES3すべてを割り当てるとは限りません。
「フロータブルサーバ候補数の拡大」を指定した場合は,BES1,BES2,及びBES3を割り当てます。
複数のSQL文を実行する場合で,それぞれの検索が別のバックエンドサーバに定義されている表をアクセスし,表ごとに使用するバックエンドサーバを分けて運用するときに適用してください。
(d) データ収集用サーバの分離機能を適用する場合
データ収集用サーバの分離機能を適用する場合のフロータブルサーバの割り当てを次の図に示します。
- [説明]
-
複数のBESから1か所のBESにデータを集める(データ収集処理)必要のあるSQLに対しては,FLT1,FLT2,及びFLT3から,データ収集用にFLT3を割り当てます。SQL文中でデータ収集処理を複数回実行する場合は,必ずこのデータ収集用サーバ(FLT3)を割り当てます。
データ収集以外の処理をする場合,「フロータブルサーバ候補数の拡大」を指定しないときは,BES1,BES2,BES3,FLT1,及びFLT2から,HiRDBがフロータブルサーバとして必要と判断した台数を割り当てます。ただし,BES1,BES2,BES3,FLT1,及びFLT2すべてを割り当てるとは限りません。
「フロータブルサーバ候補数の拡大」を指定した場合は,BES1,BES2,BES3,FLT1,及びFLT2を割り当てます。
SQL文中にデータ収集処理がない場合は,「フロータブルサーバ対象拡大(バックエンドサーバ)」を適用したときと同じ動作となります。