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