12.18.5 共用表を検索するバックエンドサーバの割り当て規則
共用表を検索するバックエンドサーバの割り当て規則について説明します。1SQL中に共用表だけが指定されている場合と,1SQL中に共用表を含む複数の表が指定されている場合とで割り当て規則が異なります。それぞれの割り当て規則について説明します。
(1) 1SQL中に指定されている表が共用表だけの場合
1SQL中に指定されている表が共用表だけの場合,共用表を検索するバックエンドサーバの割り当ては,同一トランザクション内の直前のSQLでどのような検索を行ったかなどの条件によって決まります。
共用表を検索するバックエンドサーバの割り当て規則(1SQL中に指定されている表が共用表だけの場合)を次の表に示します。項番1が最も優先順位が高くなっています。
項番 |
検索条件 |
割り当てられるバックエンドサーバ |
---|---|---|
1 |
次に示すどちらかの条件を満たす場合
|
更新可能バックエンドサーバを割り当てます。 |
2 |
同一トランザクション内の(又は複数のトランザクションにわたって※1)異なるSQL内で共用表※2を使用している場合 |
同一トランザクション内の共用表検索のうち,直前に実行したSQL文内で共用表へのアクセスに使用したバックエンドサーバを割り当てます。 バックエンドサーバの割り当ての例については,例1を参照してください。 |
3 |
同一トランザクション内の(又は複数のトランザクションにわたって※1)異なるSQL内で横分割表※3を使用し,分割列に1バックエンドサーバだけの検索が行われる制限条件※4がある場合 |
同一トランザクション内の分割列に,1バックエンドサーバだけの検索が行われる制限条件がある横分割表検索のうち,直前に実行したSQL文内で横分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。 バックエンドサーバの割り当ての例については,例2を参照してください。 |
4 |
同一トランザクション内の(又は複数のトランザクションにわたって※1)異なるSQL内で非分割表※5を使用している場合 |
同一トランザクション内の非分割表検索のうち,直前に実行したSQL文内で非分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。 バックエンドサーバの割り当ての例については,例3を参照してください。 |
5 |
同一トランザクション内の(又は複数のトランザクションにわたって※1)異なるSQL内で横分割表を使用している場合 |
同一トランザクション内の横分割表検索のうち,直前に実行したSQL文内で横分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。 バックエンドサーバの割り当ての例については,例4を参照してください。 |
6 |
接続したフロントエンドサーバと同じユニットにバックエンドサーバがある場合 |
フロントエンドサーバと同じユニット内にあるバックエンドサーバの中からランダムに割り当てます。 バックエンドサーバの割り当ての例については,例5を参照してください。 |
7 |
項番1〜6に該当しない場合 |
バックエンドサーバをランダムに割り当てます。 バックエンドサーバの割り当ての例については,例6を参照してください。 |
(a) 例1
- 〔説明〕
-
-
SQL1で共用表S1へのアクセスに使用したバックエンドサーバをBES2とします。
-
SQL2で横分割表Dへのアクセスに使用したバックエンドサーバをBES1,BES2,及びBES3とします。
-
SQL1,SQL2の直後に,SQL3で共用表S2にアクセスする場合,共用表S1へのアクセスに使用したBES2を割り当てます。
-
(b) 例2
- 〔説明〕
-
-
SQL1では,分割列に1バックエンドサーバだけの検索が行われる制限条件を付けて横分割表D1と,横分割表D2を検索します。横分割表D1へのアクセスに使用したバックエンドサーバをBES2,横分割表D2へのアクセスに使用したバックエンドサーバをBES3とします。
-
SQL2で,非分割表Nへのアクセスに使用したバックエンドサーバをBES1とします。
-
SQL1,SQL2の直後に,SQL3で共用表Sにアクセスする場合,横分割表D1,及び横分割表D2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。
-
(c) 例3
- 〔説明〕
-
-
SQL1では,非分割表N1と,非分割表N2を検索します。非分割表N1へのアクセスに使用したバックエンドサーバをBES2,非分割表N2へのアクセスに使用したバックエンドサーバをBES3とします。
-
SQL2で,横分割表Dへのアクセスに使用したバックエンドサーバを,BES1,BES2,及びBES3とします。
-
SQL1,SQL2の直後に,SQL3で共用表Sにアクセスする場合,非分割表N1と,非分割表N2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。
-
(d) 例4
- 〔説明〕
-
-
SQL1では,横分割表D1と横分割表D2を検索します。横分割表D1へのアクセスに使用したバックエンドサーバをBES1及びBES2,横分割表D2へのアクセスに使用したバックエンドサーバをBES2及びBES3とします。
-
SQL2で,横分割表D3へのアクセスに使用したバックエンドサーバをBES1及びBES2とします。
-
SQL1,SQL2の直後に,SQL3で共用表Sにアクセスする場合,横分割表D3へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES1となる場合もあります)。
-
(e) 例5
- 〔説明〕
-
トランザクションを開始した直後に共用表Sにアクセスする場合,フロントエンドサーバと同じユニットにあるバックエンドサーバBES2を割り当てます。
(f) 例6
- 〔説明〕
-
トランザクションを開始した直後に共用表Sにアクセスする場合,ランダムに選んだバックエンドサーバBES2を割り当てます(ランダムに割り当てるため,BES1又はBES3となる場合もあります)。
(2) 1SQL中に共用表を含む複数の表が指定されている場合
1SQL中に指定されている表が共用表を含む複数の表の場合,共用表を検索するバックエンドサーバの割り当ては,同一SQL内でどのような検索を行ったかなどの条件によって決まります。なお,1SQL中に共用表と非共用表の両方を含む場合には,非共用表にバックエンドサーバを割り当てた後,共用表にバックエンドサーバを割り当てます。
共用表を検索するバックエンドサーバの割り当て規則(1SQL中に共用表を含む複数の表が指定されている場合)を次の表に示します。項番1が最も優先順位が高くなっています。
項番 |
検索条件 |
割り当てられるバックエンドサーバ |
---|---|---|
1 |
次に示すどちらかの条件を満たす場合
|
更新可能バックエンドサーバを割り当てます。 |
2 |
同一SQL内で共用表※1を使用している場合 |
同一SQL内で共用表を複数使用している場合は,同じバックエンドサーバを割り当てます。すべての表が共用表の場合は,表「共用表を検索するバックエンドサーバの割り当て規則(1SQL中に指定されている表が共用表だけの場合)」に従って割り当てます。 バックエンドサーバの割り当ての例については,例7を参照してください。 |
3 |
同一SQL内で横分割表※2を使用し,分割列に1バックエンドサーバだけの検索が行われる制限条件※3がある場合 |
同一SQL内で使用している横分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。 バックエンドサーバの割り当ての例については,例8を参照してください。 |
4 |
同一SQL内で非分割表※4を使用している場合 |
同一SQL内で使用している非分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。 バックエンドサーバの割り当ての例については,例9を参照してください。 |
5 |
同一SQL内で横分割表を使用している場合 |
同一SQL内で使用している横分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。 バックエンドサーバの割り当ての例については,例10を参照してください。 |
(a) 例7
- 〔説明〕
-
同一SQL内で共用表S1,及び共用表S2を検索します。
-
共用表S1へのアクセスに使用したバックエンドサーバをBES2とします。
-
1.の直後に共用表S2にアクセスする場合,共用表S1へのアクセスに使用したバックエンドサーバBES2を割り当てます。
-
(b) 例8
- 〔説明〕
-
同一SQL内で,横分割表D1,横分割表D2,共用表Sを検索します。
-
分割列に1バックエンドサーバだけの検索が行われる制限条件を付けて横分割表D1を検索します。横分割表D1へのアクセスに使用したバックエンドサーバをBES2とします。
-
分割列に1バックエンドサーバだけの検索が行われる制限条件を付けて横分割表D2を検索します。横分割表D2へのアクセスに使用したバックエンドサーバをBES3とします。
-
1.,2.の直後に共用表Sにアクセスする場合,横分割表D1,及び横分割表D2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。
-
(c) 例9
- 〔説明〕
-
同一SQL内で,非分割表N1,非分割表N2,共用表Sを検索します。
-
非分割表N1へのアクセスに使用したバックエンドサーバをBES2とします。
-
非分割表N2へのアクセスに使用したバックエンドサーバをBES3とします。
-
1.,2.の直後に共用表Sにアクセスする場合,非分割表N1と非分割表N2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。
-
(d) 例10
- 〔説明〕
-
同一SQL内で,横分割表D1,横分割表D2,共用表Sを検索します。
-
横分割表D1へのアクセスに使用したバックエンドサーバをBES1及びBES2とします。
-
横分割表D2へのアクセスに使用したバックエンドサーバをBES2及びBES3とします。
-
1.,2.の直後に共用表Sにアクセスする場合,横分割表D1,横分割表D2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES1又はBES3となる場合もあります)。
-