Hitachi

ノンストップデータベース HiRDB Version 10 システム導入・設計ガイド(UNIX(R)用)


11.18.5 共用表を検索するバックエンドサーバの割り当て規則

共用表を検索するバックエンドサーバの割り当て規則について説明します。1SQL中に共用表だけが指定されている場合と,1SQL中に共用表を含む複数の表が指定されている場合とで割り当て規則が異なります。それぞれの割り当て規則について説明します。

〈この項の構成〉

(1) 1SQL中に指定されている表が共用表だけの場合

1SQL中に指定されている表が共用表だけの場合,共用表を検索するバックエンドサーバの割り当ては,同一トランザクション内の直前のSQLでどのような検索を行ったかなどの条件によって決まります。

共用表を検索するバックエンドサーバの割り当て規則(1SQL中に指定されている表が共用表だけの場合)を次の表に示します。項番1が最も優先順位が高くなっています。

表11‒10 共用表を検索するバックエンドサーバの割り当て規則(1SQL中に指定されている表が共用表だけの場合)

項番

検索条件

割り当てられるバックエンドサーバ

1

次に示すどちらかの条件を満たす場合

  • 検索対象の共用表に対して,IN EXCLUSIVE MODE指定のLOCK TABLE文を実行している

  • FOR UPDATE句による検索を行っている

更新可能バックエンドサーバを割り当てます。

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を参照してください。

注※1

バックエンドサーバ接続保持機能,ホールダブルカーソル,及びAP単位のローカルバッファの使用時を指します。

注※2

IN EXCLUSIVE MODE指定のLOCK TABLE文を実行している共用表,及びFOR UPDATE句による検索を行う共用表を除きます。

注※3

フレキシブルハッシュ分割,及び1バックエンドサーバ内での分割の場合を除きます。

注※4

探索条件中の一つの表の列だけを指定した条件(述語,又はOR演算された述語)です。

注※5

IN EXCLUSIVE MODE指定のLOCK TABLE文を実行している共用表,及びFOR UPDATE句による検索を行う共用表を含みます。

(a) 例1

[図データ]

〔説明〕
  1. SQL1で共用表S1へのアクセスに使用したバックエンドサーバをBES2とします。

  2. SQL2で横分割表Dへのアクセスに使用したバックエンドサーバをBES1,BES2,及びBES3とします。

  3. SQL1,SQL2の直後に,SQL3で共用表S2にアクセスする場合,共用表S1へのアクセスに使用したBES2を割り当てます。

(b) 例2

[図データ]

〔説明〕
  1. SQL1では,分割列に1バックエンドサーバだけの検索が行われる制限条件を付けて横分割表D1と,横分割表D2を検索します。横分割表D1へのアクセスに使用したバックエンドサーバをBES2,横分割表D2へのアクセスに使用したバックエンドサーバをBES3とします。

  2. SQL2で,非分割表Nへのアクセスに使用したバックエンドサーバをBES1とします。

  3. SQL1,SQL2の直後に,SQL3で共用表Sにアクセスする場合,横分割表D1,及び横分割表D2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。

(c) 例3

[図データ]

〔説明〕
  1. SQL1では,非分割表N1と,非分割表N2を検索します。非分割表N1へのアクセスに使用したバックエンドサーバをBES2,非分割表N2へのアクセスに使用したバックエンドサーバをBES3とします。

  2. SQL2で,横分割表Dへのアクセスに使用したバックエンドサーバを,BES1,BES2,及びBES3とします。

  3. SQL1,SQL2の直後に,SQL3で共用表Sにアクセスする場合,非分割表N1と,非分割表N2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。

(d) 例4

[図データ]

〔説明〕
  1. SQL1では,横分割表D1と横分割表D2を検索します。横分割表D1へのアクセスに使用したバックエンドサーバをBES1及びBES2,横分割表D2へのアクセスに使用したバックエンドサーバをBES2及びBES3とします。

  2. SQL2で,横分割表D3へのアクセスに使用したバックエンドサーバをBES1及びBES2とします。

  3. SQL1,SQL2の直後に,SQL3で共用表Sにアクセスする場合,横分割表D3へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES1となる場合もあります)。

(e) 例5

[図データ]

〔説明〕

トランザクションを開始した直後に共用表Sにアクセスする場合,フロントエンドサーバと同じユニットにあるバックエンドサーバBES2を割り当てます。

(f) 例6

[図データ]

〔説明〕

トランザクションを開始した直後に共用表Sにアクセスする場合,ランダムに選んだバックエンドサーバBES2を割り当てます(ランダムに割り当てるため,BES1又はBES3となる場合もあります)。

(2) 1SQL中に共用表を含む複数の表が指定されている場合

1SQL中に指定されている表が共用表を含む複数の表の場合,共用表を検索するバックエンドサーバの割り当ては,同一SQL内でどのような検索を行ったかなどの条件によって決まります。なお,1SQL中に共用表と非共用表の両方を含む場合には,非共用表にバックエンドサーバを割り当てた後,共用表にバックエンドサーバを割り当てます。

共用表を検索するバックエンドサーバの割り当て規則(1SQL中に共用表を含む複数の表が指定されている場合)を次の表に示します。項番1が最も優先順位が高くなっています。

表11‒11 共用表を検索するバックエンドサーバの割り当て規則(1SQL中に共用表を含む複数の表が指定されている場合)

項番

検索条件

割り当てられるバックエンドサーバ

1

次に示すどちらかの条件を満たす場合

  • 検索対象の共用表に対して,IN EXCLUSIVE MODE指定のLOCK TABLE文を実行している

  • FOR UPDATE句による検索を行っている

更新可能バックエンドサーバを割り当てます。

2

同一SQL内で共用表※1を使用している場合

同一SQL内で共用表を複数使用している場合は,同じバックエンドサーバを割り当てます。すべての表が共用表の場合は,表「共用表を検索するバックエンドサーバの割り当て規則(1SQL中に指定されている表が共用表だけの場合)」に従って割り当てます。

バックエンドサーバの割り当ての例については,例7を参照してください。

3

同一SQL内で横分割表※2を使用し,分割列に1バックエンドサーバだけの検索が行われる制限条件※3がある場合

同一SQL内で使用している横分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。

バックエンドサーバの割り当ての例については,例8を参照してください。

4

同一SQL内で非分割表※4を使用している場合

同一SQL内で使用している非分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。

バックエンドサーバの割り当ての例については,例9を参照してください。

5

同一SQL内で横分割表を使用している場合

同一SQL内で使用している横分割表へのアクセスに使用したバックエンドサーバの中から,ランダムに割り当てます。

バックエンドサーバの割り当ての例については,例10を参照してください。

注※1

IN EXCLUSIVE MODE指定のLOCK TABLE文を実行している共用表,及びFOR UPDATE句による検索を行う共用表を除きます。

注※2

フレキシブルハッシュ分割,及び1バックエンドサーバ内での分割の場合を除きます。

注※3

探索条件中の一つの表の列だけを指定した条件(述語,又はOR演算された述語)です。

注※4

IN EXCLUSIVE MODE指定のLOCK TABLE文を実行している共用表,及びFOR UPDATE句による検索を行う共用表を含みます。

(a) 例7

[図データ]

〔説明〕

同一SQL内で共用表S1,及び共用表S2を検索します。

  1. 共用表S1へのアクセスに使用したバックエンドサーバをBES2とします。

  2. 1.の直後に共用表S2にアクセスする場合,共用表S1へのアクセスに使用したバックエンドサーバBES2を割り当てます。

(b) 例8

[図データ]

〔説明〕

同一SQL内で,横分割表D1,横分割表D2,共用表Sを検索します。

  1. 分割列に1バックエンドサーバだけの検索が行われる制限条件を付けて横分割表D1を検索します。横分割表D1へのアクセスに使用したバックエンドサーバをBES2とします。

  2. 分割列に1バックエンドサーバだけの検索が行われる制限条件を付けて横分割表D2を検索します。横分割表D2へのアクセスに使用したバックエンドサーバをBES3とします。

  3. 1.,2.の直後に共用表Sにアクセスする場合,横分割表D1,及び横分割表D2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。

(c) 例9

[図データ]

〔説明〕

同一SQL内で,非分割表N1,非分割表N2,共用表Sを検索します。

  1. 非分割表N1へのアクセスに使用したバックエンドサーバをBES2とします。

  2. 非分割表N2へのアクセスに使用したバックエンドサーバをBES3とします。

  3. 1.,2.の直後に共用表Sにアクセスする場合,非分割表N1と非分割表N2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES3となる場合もあります)。

(d) 例10

[図データ]

〔説明〕

同一SQL内で,横分割表D1,横分割表D2,共用表Sを検索します。

  1. 横分割表D1へのアクセスに使用したバックエンドサーバをBES1及びBES2とします。

  2. 横分割表D2へのアクセスに使用したバックエンドサーバをBES2及びBES3とします。

  3. 1.,2.の直後に共用表Sにアクセスする場合,横分割表D1,横分割表D2へのアクセスに使用したバックエンドサーバのうち,ランダムに選んだBES2を割り当てます(ランダムに割り当てるため,BES1又はBES3となる場合もあります)。