Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


2.8.3 データベースの検索処理方式(非順序実行方式)

HADBには,データベースの検索処理方式として非順序実行方式が実装されています。非順序実行方式は,大規模なデータベースを高速に検索するために考案された処理方式です。

〈この項の構成〉

(1) 非順序実行方式の考え方

リレーショナルデータベースでは,検索処理は行の集合演算であり,ソート処理などを除いて,DBMSが返却する検索結果の順序に規定はありません。非順序実行方式は,この点に着目して考案されています。非順序実行方式の考え方を次の図に示します。

図2‒32 非順序実行方式の考え方

[図データ]

(2) 非順序実行方式による検索処理

非順序実行方式では,ハードウェア資源を有効に活用することで,大規模なデータベースに対しても高速な検索ができます。非順序実行方式による検索処理を,非順序実行方式でない場合と比較して,次の図に示します。

図2‒33 非順序実行方式による検索処理(非順序実行方式でない場合との比較)

[図データ]

非順序実行方式でない場合,1つのスレッドに1つの検索処理だけが割り当てられます。また,発行したI/Oが完了してから新たなI/Oが発行されます。そのため,ストレージのI/O性能の上限を下回る回数でしかI/Oを発行できません。結果として,データベースのデータ量が大規模になると,I/O完了待ちの時間が長くなってしまい,検索処理に時間が掛かります。

非順序実行方式では,検索処理が行単位に分割され,各スレッドに割り当てられます。割り当てられた検索処理はスレッドごとに独立して実行されます。また,各スレッドの処理はI/Oの進捗に応じて非順序に実行されます。つまり,各スレッドはI/Oを発行したあと,そのI/Oの完了を待たないで,別のスレッドに処理を切り替えながら並列に動作します(非同期I/O処理)。これによって,高速な検索を実現します。

(3) 非順序実行方式で使用するスレッド

HADBでは,依存関係のない処理を次に示す複数のスレッドに割り当て,I/Oおよび処理を並列化しています。非順序実行方式で使用するスレッドを次に示します。

(4) 非順序実行方式が適用されない場合

次のどれかの場合は,非順序実行方式は適用されないで,SQLが実行されます。

(5) 非順序実行方式と待ち状態の関係

SQL文の実行時に使用する処理リアルスレッド数が確保できない場合に発生する待ち状態と,非順序実行方式の関係について説明します。

(a) SQL文を実行する場合

SQL文の実行時に使用する処理リアルスレッド数を確保できない場合,そのSQL文は待ち状態になります。待ち状態になったSQL文は,必要な処理リアルスレッド数が確保されたあとに,実行されます。

なお,先発のSQL文またはコマンドが待ち状態になった場合,後発のSQL文はすべて待ち状態になります(後発のSQL文に必要な処理リアルスレッド数が確保できる場合でも,待ち状態になります)。この場合,先発のSQL文またはコマンドの待ち状態が解放されたあとに,後発のSQL文の待ち状態が解放されます。

■クライアントグループ機能を適用しているとき

グループに所属しているHADBクライアントが実行するSQL文が待ち状態になった場合,同じグループ内のほかのHADBクライアントが実行するSQL文は,すべて待ち状態になります。この場合,先発のSQL文の待ち状態が解放されたあとに,後発のSQL文の待ち状態が解放されます。

なお,あるグループに所属しているHADBクライアントが実行するSQL文が待ち状態になった場合でも,ほかのグループに所属しているHADBクライアントが実行するSQL文は影響を受けません。

SQL文の実行時に使用する処理リアルスレッドについては,「7.2.2 性能に関するオペランド(set形式)」のadb_sql_exe_max_rthd_numオペランドを参照してください。

メモ

対象のSQL文が待ち状態かどうかを確認する方法については,「10.8.2 処理リアルスレッドの確保待ちの発生状況を確認する方法」を参照してください。

(b) コマンドを実行する場合

adbimportコマンドなど,一部のコマンドの実行時には,処理リアルスレッドが使用されます。ただし,使用する処理リアルスレッド数を確保できない場合,そのコマンドは待ち状態になります。該当するコマンドについては,「7.2.2 性能に関するオペランド(set形式)」のadb_sys_rthd_numオペランドの対象のコマンドを参照してください。

なお,先発のコマンドまたはSQL文が待ち状態になった場合,後発のコマンドはすべて待ち状態になります(後発のコマンドに必要な処理リアルスレッド数が確保できる場合でも,待ち状態になります)。この場合,先発のコマンドまたはSQL文の待ち状態が解放されたあとに,後発のコマンドの待ち状態が解放されます。

■クライアントグループ機能を適用しているとき

グループに所属しているコマンドが待ち状態になった場合,同じグループ内のほかのコマンドを実行しても,すべて待ち状態になります。この場合,先発のコマンドの待ち状態が解放されたあとに,後発のコマンドの待ち状態が解放されます。

コマンド実行時に使用する処理リアルスレッドについては,マニュアルHADB コマンドリファレンスの各コマンドを参照してください。

メモ

対象のコマンドが待ち状態かどうかを確認する方法については,「10.8.2 処理リアルスレッドの確保待ちの発生状況を確認する方法」を参照してください。