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
カラムでエラーメッセージを確認してください。