5.5.4.3 Rewriter Query Rewrite 插件参考
以下讨论可作为与Rewriter
查询重写插件相关联的这些组件的参考:
-
query_rewrite
数据库中的Rewriter
规则 table -
Rewriter
程序和功能 -
Rewriter
系统和状态变量
5.5.4.3.1 重写器查询重写插件规则 table
query_rewrite
数据库中的rewrite_rules
table 为Rewriter
插件用来决定是否重写语句的规则提供永久存储。
用户通过修改存储在此 table 中的规则集来与插件进行通信。该插件通过设置 table 的message
列将信息传达给用户。
Note
规则 table 通过flush_rewrite_rules
存储过程加载到插件中。除非在最近的 table 修改之后调用了该过程,否则 table 内容不一定与插件使用的规则集相对应。
rewrite_rules
table 具有以下列:
id
规则编号。此列是 table 的主键。您可以使用 ID 唯一地标识任何规则。
pattern
指示规则匹配的语句的模式的模板。使用?
代 table 与数据值匹配的参数标记。
pattern_database
该数据库用于匹配语句中不合格的 table 名。如果相应的数据库名和 table 名相同,则语句中的合格 table 名与模式中的合格名匹配。仅当默认数据库与pattern_database
相同且 table 名相同时,语句中不合格的 table 名才会与模式中的不合格名匹配。
replacement
指示如何重写与pattern
列值匹配的语句的模板。使用?
table 示与数据值匹配的参数标记。在重写的语句中,插件使用与pattern
中的相应标记匹配的数据值替换replacement
中的?
参数标记。
enabled
是否启用规则。加载操作(通过调用flush_rewrite_rules()
存储过程执行)仅在此列为YES
时将规则从 table 中加载到Rewriter
内存中高速缓存中。
通过此列,可以在不删除规则的情况下停用规则:将列设置为YES
以外的值,然后将 table 重新加载到插件中。
message
插件使用此列与用户交流。如果将规则 table 加载到内存中时没有发生错误,则插件会将message
列设置为NULL
。非NULL
值 table 示错误,并且列内容是错误消息。在以下情况下可能会发生错误:
-
模式或替换是产生语法错误的错误 SQL 语句。
- 替换包含的
?
参数标记多于模式。
- 替换包含的
如果发生加载错误,插件还将Rewriter_reload_error status 变量设置为ON
。
pattern_digest
此列用于调试和诊断。如果在将规则 table 加载到内存时该列存在,则插件将使用模式摘要对其进行更新。如果您尝试确定为什么某些语句无法重写的情况,那么此列可能会很有用。
normalized_pattern
此列用于调试和诊断。如果在将规则 table 加载到内存时该列存在,则插件将使用模式的规范化形式对其进行更新。如果您尝试确定为什么某些语句无法重写的情况,那么此列可能会很有用。
5.5.4.3.2 重写器查询重写插件的过程和功能
Rewriter
插件操作使用将规则 table 加载到其内存缓存中的存储过程,以及一个辅助用户定义函数(UDF)。在正常操作下,用户仅调用存储过程。 UDF 旨在由存储过程而不是由用户直接调用。
flush_rewrite_rules()
此存储过程使用load_rewrite_rules() UDF 将rewrite_rules
table 的内容加载到Rewriter
内存缓存中。加载 table 后,它还会清除查询缓存。
呼叫flush_rewrite_rules()
table 示COMMIT。
修改 rulestable 以使插件从新 table 内容更新其缓存后,调用此过程。如果发生任何错误,该插件会为 table 中的相应规则行设置message
列,并将Rewriter_reload_error status 变量设置为ON
。
此 UDF 是flush_rewrite_rules()
存储过程使用的帮助程序。
5.5.4.3.3 重写器查询重写插件系统变量
Rewriter
查询重写插件支持以下系统变量。这些变量仅在安装了插件的情况下可用(请参见第 5.5.4.1 节“安装或卸载重写器查询重写插件”)。
Property | Value |
---|---|
System Variable | rewriter_enabled |
Scope | Global |
Dynamic | Yes |
Type | Boolean |
Default Value | ON |
是否启用了Rewriter
查询重写插件。
Property | Value |
---|---|
System Variable | rewriter_verbose |
Scope | Global |
Dynamic | Yes |
Type | Integer |
供内部使用。
5.5.4.3.4 重写器查询重写插件状态变量
Rewriter
查询重写插件支持以下状态变量。这些变量仅在安装了插件的情况下可用(请参见第 5.5.4.1 节“安装或卸载重写器查询重写插件”)。
从rewrite_rules
table 成功加载到内存中供Rewriter
插件使用的重写插件重写规则的数量。
rewrite_rules
table 已被加载到Rewriter
插件使用的内存缓存中的次数。
自加载Rewriter
查询重写插件以来重写的查询数。
rewrite_rules
table 最近一次加载到Rewriter
插件使用的内存缓存中时是否发生错误。如果值为OFF
,则不会发生错误。如果值为ON
,则发生错误;否则为 0.检查rewriter_rules
table 的message
列中是否有错误消息。