Documentation Home

5.5.4.3 Rewriter Query Rewrite 插件参考

以下讨论可作为对与Rewriter查询重写插件关联的这些元素的参考:

  • 数据库 中 的Rewriter规则表 query_rewrite

  • Rewriter程序和功能

  • Rewriter系统和状态变量

5.5.4.3.1 重写器查询重写插件规则表

数据库中的rewrite_rules表 为 插件用来决定是否重写语句 query_rewrite的规则提供持久存储。Rewriter

用户通过修改存储在该表中的规则集与插件进行通信。该插件通过设置表的 message列向用户传达信息。

笔记

规则表由 flush_rewrite_rules存储过程加载到插件中。除非在最近的表修改之后调用了该过程,否则表内容不一定与插件使用的规则集相对应。

rewrite_rules表有以下列:

  • id

    规则 ID。此列是表主键。您可以使用 ID 来唯一标识任何规则。

  • pattern

    指示规则匹配的语句模式的模板。用于?表示匹配数据值的参数标记。

  • pattern_database

    用于匹配语句中非限定表名的数据库。如果相应的数据库和表名相同,则语句中的限定表名与模式中的限定名匹配。仅当默认数据库相同 pattern_database且表名相同时,语句中的非限定表名才匹配模式中的非限定名。

  • replacement

    指示如何重写匹配pattern列值的语句的模板。用于 ?表示匹配数据值的参数标记。在重写的语句中,插件使用与 中相应标记匹配的数据值 替换?参数标记 。 replacementpattern

  • enabled

    规则是否启用。仅当此列为 时,加载操作(通过调用flush_rewrite_rules() 存储过程执行)才将规则从表加载到 Rewriter内存缓存中YES

    此列可以在不删除规则的情况下停用规则:将列设置为除以外的值 YES并将表重新加载到插件中。

  • message

    该插件使用此列与用户进行通信。如果将规则表加载到内存中时没有发生错误,插件会将message 列设置为NULL. 非NULL值表示错误,列内容是错误消息。在这些情况下可能会发生错误:

    • 模式或替换是产生语法错误的不正确 SQL 语句。

    • 替换包含? 比模式更多的参数标记。

    如果发生加载错误,插件还会将 Rewriter_reload_error 状态变量设置为ON

  • pattern_digest

    此列用于调试和诊断。如果在将规则表加载到内存中时该列存在,插件将使用模式摘要更新它。如果您试图确定某些语句无法重写的原因,则此列可能很有用。

  • normalized_pattern

    此列用于调试和诊断。如果在将规则表加载到内存中时该列存在,插件将使用模式的规范化形式更新它。如果您试图确定某些语句无法重写的原因,则此列可能很有用。

5.5.4.3.2 重写器查询重写插件程序和功能

Rewriter插件操作使用一个将规则表加载到其内存缓存中的存储过程,以及一个辅助加载函数。在正常操作下,用户只调用存储过程。该函数旨在由存储过程调用,而不是直接由用户调用。

  • flush_rewrite_rules()

    此存储过程使用 load_rewrite_rules() 函数将 rewrite_rules表的内容加载到 Rewriter内存缓存中。加载表后,它还会清除查询缓存。

    呼唤flush_rewrite_rules()暗示 COMMIT

    修改规则表后调用此过程,使插件从新表内容更新其缓存。如果发生任何错误,插件会 message为表中适当的规则行设置列,并将 Rewriter_reload_error 状态变量设置为ON

  • load_rewrite_rules()

    此函数是 flush_rewrite_rules()存储过程使用的辅助例程。

5.5.4.3.3 重写器查询重写插件系统变量

Rewriter查询重写插件支持以下系统变量 。只有安装了插件,这些变量才可用(请参阅 第 5.5.4.1 节,“安装或卸载重写器查询重写插件”)。

5.5.4.3.4 重写器查询重写插件状态变量

Rewriter查询重写插件支持以下状态变量 。只有安装了插件,这些变量才可用(请参阅 第 5.5.4.1 节,“安装或卸载重写器查询重写插件”)。

  • Rewriter_number_loaded_rules

    重写插件重写规则的数量成功地从rewrite_rules表中加载到内存中供Rewriter 插件使用。

  • Rewriter_number_reloads

    rewrite_rules 表被加载到 Rewriter插件 使用的内存缓存中的 次数。

  • Rewriter_number_rewritten_queries

    Rewriter查询重写插件加载 后重写的查询数 。

  • Rewriter_reload_error

    最近一次将 rewrite_rules表加载到Rewriter 插件使用的内存缓存中时是否发生错误。如果值为OFF,则没有发生错误。如果值为ON,则发生错误;检查表的message列中rewriter_rules是否有错误消息。