概要
本バージョンではインデックスを利用した結合処理 (Index Join) の改善により、特定条件での結合処理の高速化が行われました。
また試験的機能として、RTX使用時に並列にテーブルデータを読み出すことでクエリー実行を高速化する機能が導入されました。
加えて、本バージョンではいくつかの重要な不具合修正や細かな改善を行っています。
前バージョンを利用するすべてのユーザーは本バージョンへのアップグレードを強く推奨します。
機能追加と改善
SQL
- インデックスを利用した結合処理 (Index Join) の改善
- Index Join において、バージョン 1.0.0 から部分的に未対応であった結合演算 (インデックスキーのプレフィックスを用いた検索・結合処理)に追加で対応しました。これにより、インデックスを活用できず Shuffle Join で処理されていたクエリーの Index Join 処理が可能になり、従来より結合処理が高速化されます。
- この最適化が採用される場合、実行計画上 (
explain
)」やtgsql
コマンドのEXPLAIN
文を実行することで表示される実行計画の結合処理はjoin (join_scan)
と表示されます。 - 結合時の条件によっては、引き続き Shuffle Join が採用される可能性があります。
- インデックスを利用した結合処理 (Index Join) の改善
Transaction
- (試験的機能) RTX使用時のテーブルデータの並列読み出し
- RTX(Read Only Transaction)指定のトランザクションにおいて、SQL実行エンジン上でクエリー実行時のスキャン処理を分割し並列に実行することで、主にテーブルを全件取得したり範囲検索を伴うSELECT文の実行を高速化します。
- バージョン 1.2.0 において、本機能は試験的機能として提供されます。そのため機能上または性能上の制約が多く存在します。以下の点に注意してご利用ください。
- 本バージョンのデフォルト設定では、本機能は無効となっています。有効にするには以下の手順に従ってください。
- 構成定義ファイル
tsurugi.ini
内のsql
セクションに設定値dev_rtx_parallel_scan=true
を追加。- 本バージョンでは試験的機能のため、本機能を有効にするためには明示的な設定を必要としていますが、将来的にはデフォルトで本機能が有効となることで、本設定は不要となる予定です。
- 構成定義ファイル
tsurugi.ini
内のsql
セクションに設定値scan_default_parallel=(num of parallel)
を指定(任意)。- この値はSQL実行エンジンがスキャン処理を実行する際の最大並列実行数となります。デフォルト値は
4
です。 - 本バージョンでは並列処理制御の最適化が不十分であるため、 性能向上が見込める
sql.scan_default_parallel
の上限値は、おおよそ4
~8
程度となります。また環境やテーブル内容、クエリー内容によっては並列実行による効果が得られない場合があります。
- この値はSQL実行エンジンがスキャン処理を実行する際の最大並列実行数となります。デフォルト値は
- 構成定義ファイル
- 本バージョンではスキャンの分割処理部分が試験的な実装となっています。具体的には検索キーの値(検索キーが未指定の場合は主キーの値)から走査範囲に含まれる最大値と最小値のキーを表すバイト列を取り出し、その区間のバイト列を等間隔に分割します。このため、効果的なスキャンの分割がおこなわれるためには、以下の条件を満たす必要があります。
- 数値型系の場合、走査範囲でキーの値が一様に分布していれば、適切な粒度で分割を行えます。
- 文字列型の場合、走査範囲の文字列の先頭部分が一様に分布していれば、適切な粒度で分割を行えます。
- キーの値にヌルが含まれる場合は分布が一様ではなくなるため適切な粒度で分割されません。
- キーが複数列からなる場合は先頭に近い列から優先して範囲分割に使用されます。そのため2番目以降の列が一様に分布していても1番目の列が一様に分布していない場合は適切な分割が得られないことがあります。
- 本バージョンのデフォルト設定では、本機能は無効となっています。有効にするには以下の手順に従ってください。
- (試験的機能) RTX使用時のテーブルデータの並列読み出し
バグ修正
Transaction
- RTXとOCCの競合時に極稀に `SQL-02000: Unexpected error occurred. status:err_invalid_state が発生してRTXトランザクションが失敗することがある
- tsurugidbプロセスがSIGKILLシグナル等によって不正終了した場合、稀にトランザクションログが不整合な状態となる可能性がある
- トランザクションログ圧縮処理の実行後に不要なファイルが残り続けることがある
- セッションが存在している最中にトランザクションログ圧縮処理を実行すると、圧縮処理の開始が過剰に待たされることがある
Endpoint
- IPCセッションにおいて、稀にIPCエンドポイントが応答を返さなくなることがある
既知の問題
本バージョンに対する既知の問題、および本バージョンにて修正された問題の補足情報については、以下のリンクを参照してください。
その他
本バージョンにおける変更内容の一覧は、以下のChangelogを参照してください。
旧バージョンからのアップグレード手順については、以下のドキュメントを参照してくだいさい。