以下讨论可作为与Rewriter查询重写插件关联的这些组件的参考:
- 数据库中 的
Rewriter规则表query_rewrite Rewriter程序和功能Rewriter系统和状态变量
5.6.4.3.1重写器查询重写插件规则表
数据库中 的rewrite_rules表 query_rewrite为Rewriter 插件用来决定是否重写语句的规则提供持久性存储。
用户通过修改存储在此表中的规则集来与插件进行通信。该插件通过设置表的message列将信息传达给用户 。
注意
规则表通过flush_rewrite_rules存储过程加载到插件中 。除非在最近的表修改之后调用了该过程,否则表内容不一定与插件使用的规则集相对应。
该rewrite_rules表包含以下列:
-
id规则编号。此列是表的主键。您可以使用ID唯一地标识任何规则。
-
pattern指示规则匹配的语句的模式的模板。使用
?代表参数标记相匹配的数据值。 -
pattern_database该数据库用于匹配语句中不合格的表名。如果相应的数据库名和表名相同,则语句中的合格表名与模式中的合格名匹配。仅当默认数据库与默认数据库相同
pattern_database且表名相同时,语句中不合格的表名才会与模式中的不合格名匹配 。 -
replacement指示如何重写与
pattern列值匹配的语句的模板。使用?代表参数标记相匹配的数据值。在重写的语句中,插件使用与中的相应标记匹配的数据值 替换?参数标记 。replacement``pattern -
enabled是否启用规则。加载操作(通过调用
flush_rewrite_rules()存储过程执行)Rewriter仅在此列为时将规则从表中加载到 内存中的缓存中YES。通过此列,可以在不删除规则的情况下停用它:将列设置为以外的值
YES,然后将表重新加载到插件中。 -
message插件使用此列与用户交流。如果将规则表加载到内存中时未发生错误,则插件会将
message列设置为NULL。非NULL值表示错误,列内容为错误消息。在以下情况下可能会发生错误:- 模式或替换是产生语法错误的错误SQL语句。
- 替换包含的
?参数标记多于模式。
如果发生加载错误,则插件还将
Rewriter_reload_error状态变量设置为ON。 -
pattern_digest此列用于调试和诊断。如果在将规则表加载到内存时该列存在,则插件将使用模式摘要对其进行更新。如果您尝试确定为什么某些语句无法重写的情况,则此列可能很有用。
-
normalized_pattern此列用于调试和诊断。如果在将规则表加载到内存时该列存在,则插件将使用模式的规范化形式对其进行更新。如果您尝试确定为什么某些语句无法重写的情况,则此列可能很有用。
5.6.4.3.2重写器查询重写插件的过程和功能
Rewriter插件操作使用将规则表加载到其内存缓存中的存储过程以及帮助程序用户定义函数(UDF)。在正常操作下,用户仅调用存储过程。UDF旨在由存储过程而不是由用户直接调用。
-
flush_rewrite_rules()此存储过程使用
load_rewrite_rules()UDF将rewrite_rules表的内容加载到Rewriter内存中的高速缓存中。调用
flush_rewrite_rules()意味着COMMIT。修改rules表以使插件从新表内容更新其缓存后,调用此过程。如果发生任何错误,则插件会将
message表中相应规则行的列设置为,并将Rewriter_reload_error状态变量设置为ON。 -
此UDF是
flush_rewrite_rules()存储过程使用的帮助 程序。
5.6.4.3.3重写器查询重写插件系统变量
该Rewriter查询重写插件支持以下系统变量。只有安装了插件,这些变量才可用(请参见 第5.6.4.1节“安装或卸载重写器查询重写插件”)。
-
系统变量 rewriter_enabled范围 全局 动态 是 SET_VAR提示适用没有 类型 布尔型 默认值 ON无论是
Rewriter查询重写插件启用。 -
系统变量 rewriter_verbose范围 全局 动态 是 SET_VAR提示适用没有 类型 整数 供内部使用。
5.6.4.3.4重写器查询重写插件状态变量
该Rewriter查询重写插件支持以下状态变量。只有安装了插件,这些变量才可用(请参见 第5.6.4.1节“安装或卸载重写器查询重写插件”)。
-
从
rewrite_rules表成功加载到内存以供Rewriter插件使用的重写插件重写规则的数量。 -
的次数的
rewrite_rules表已经被加载到由所使用的内存中缓存Rewriter插件。 -
Rewriter_number_rewritten_queriesRewriter自从查询重写插件加载以来被 重写的查询数 。 -
rewrite_rules表 最近一次被加载到Rewriter插件使用的内存缓存中时是否发生错误 。如果值为OFF,则不会发生错误。如果值为,则ON发生错误;否则为0。检查表的message列中rewriter_rules是否有错误消息。




