MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
次の説明は、Rewriter クエリーリライトプラグインに関連付けられたこれらの要素への参照として機能します:
query_rewrite データベースの Rewriter ルールテーブル
Rewriter プロシージャおよび関数
Rewriter のシステム変数とステータス変数
query_rewrite データベースの rewrite_rules テーブルは、Rewriter プラグインがステートメントをリライトするかどうかを決定するために使用するルールの永続記憶域を提供します。
ユーザーは、このテーブルに格納されているルールのセットを変更することによって、プラグインと通信します。 プラグインは、テーブル message カラムを設定することによって、ユーザーに情報を伝達します。
ルールテーブルは、flush_rewrite_rules ストアドプロシージャによってプラグインにロードされます。 最新のテーブルの変更後にプロシージャがコールされていないかぎり、テーブルの内容がプラグインが使用しているルールのセットに対応しているとはかぎりません。
rewrite_rules テーブルには、次のカラムがあります:
id
ルール ID。 このカラムはテーブルの主キーです。 この ID を使用して、任意のルールを一意に識別できます。
pattern
ルールが一致するステートメントのパターンを示すテンプレート。 ? を使用して、データ値と一致するパラメータマーカーを表します。
pattern_database
ステートメントの未修飾のテーブル名を照合するために使用されるデータベース。 ステートメントの修飾テーブル名は、対応するデータベース名とテーブル名が同一の場合、パターンの修飾名と一致します。 ステートメント内の修飾されていないテーブル名は、デフォルトのデータベースが pattern_database と同じで、テーブル名が同一の場合にのみ、パターン内の修飾されていない名前と一致します。
replacement
pattern のカラム値と一致するステートメントのリライト方法を示すテンプレート。 ? を使用して、データ値と一致するパラメータマーカーを表します。 リライトされたステートメントでは、pattern の対応するマーカーに一致するデータ値を使用して、replacement の ? パラメータマーカーがプラグインによって置換されます。
enabled
ルールが有効かどうか。 (flush_rewrite_rules() ストアドプロシージャの起動によって実行される) ロード操作では、このカラムが YES の場合にのみ、ルールがテーブルから Rewriter インメモリーキャッシュにロードされます。
このカラムでは、ルールを削除せずに非アクティブ化できます: カラムを YES 以外の値に設定し、プラグインにテーブルをリロードします。
message
プラグインは、ユーザーとの通信にこのカラムを使用します。 ルールテーブルがメモリーにロードされたときにエラーが発生しない場合、プラグインは message カラムを NULL に設定します。 NULL 以外の値はエラーを示し、カラムの内容はエラーメッセージです。 エラーは、次の状況で発生する可能性があります:
パターンまたは置換のいずれかが、構文エラーを生成する不適切な SQL ステートメントです。
置換には、パターンより多くの ? パラメータマーカーが含まれています。
ロードエラーが発生した場合、プラグインは Rewriter_reload_error ステータス変数も ON に設定します。
pattern_digest
このカラムは、デバッグおよび診断に使用されます。 ルールテーブルがメモリーにロードされたときにカラムが存在する場合、プラグインはそれをパターンダイジェストで更新します。 このカラムは、一部のステートメントのリライトに失敗した理由を判断しようとする場合に役立つことがあります。
normalized_pattern
このカラムは、デバッグおよび診断に使用されます。 ルールテーブルがメモリーにロードされたときにカラムが存在する場合、プラグインは正規化された形式のパターンで更新します。 このカラムは、一部のステートメントのリライトに失敗した理由を判断しようとする場合に役立つことがあります。
Rewriter プラグイン操作では、ルールテーブルをインメモリーキャッシュにロードするストアドプロシージャとヘルパーユーザー定義関数 (UDF) を使用します。 通常の操作では、ユーザーはストアドプロシージャのみを起動します。 UDF は、ユーザーが直接呼び出すのではなく、ストアドプロシージャによって呼び出されることを意図しています。
flush_rewrite_rules()
このストアドプロシージャは、load_rewrite_rules() UDF を使用して、rewrite_rules テーブルの内容を Rewriter インメモリーキャッシュにロードします。
flush_rewrite_rules() のコールは、COMMIT を暗黙的に意味します。
ルールテーブルを変更した後にこのプロシージャを起動して、プラグインが新しいテーブルの内容からキャッシュを更新するようにします。 エラーが発生した場合、プラグインはテーブル内の適切なルール行の message カラムを設定し、Rewriter_reload_error ステータス変数を ON に設定します。
この UDF は、flush_rewrite_rules() ストアドプロシージャで使用されるヘルパールーチンです。
Rewriter クエリーリライトプラグインでは、次のシステム変数がサポートされます。 これらの変数は、プラグインがインストールされている場合にのみ使用できます (セクション5.6.4.1「リライタのクエリーリライトプラグインのインストールまたはアンインストール」 を参照)。
| システム変数 | rewriter_enabled |
|---|---|
| スコープ | グローバル |
| 動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
| 型 | Boolean |
| デフォルト値 | ON |
Rewriter クエリーリライトプラグインが有効かどうか。
| システム変数 | rewriter_verbose |
|---|---|
| スコープ | グローバル |
| 動的 | はい |
SET_VAR ヒントの適用 |
いいえ |
| 型 | Integer |
内部使用。
Rewriter クエリーリライトプラグインでは、次のステータス変数がサポートされます。 これらの変数は、プラグインがインストールされている場合にのみ使用できます (セクション5.6.4.1「リライタのクエリーリライトプラグインのインストールまたはアンインストール」 を参照)。
Rewriter プラグインで使用するために rewrite_rules テーブルからメモリーに正常にロードされたリライトプラグインのリライトルールの数。
Rewriter プラグインで使用されるインメモリーキャッシュに rewrite_rules テーブルがロードされた回数。
Rewriter_number_rewritten_queries
Rewriter クエリーリライトプラグインがロードされてからリライトされたクエリーの数。
Rewriter プラグインで使用されるインメモリーキャッシュに rewrite_rules テーブルが最後にロードされたときにエラーが発生したかどうか。 値が OFF の場合、エラーは発生していません。 値が ON の場合、エラーが発生しました。rewriter_rules テーブルの message カラムでエラーメッセージを確認してください。