文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  Rewriter 查询重写插件参考

7.6.4.3 Rewriter 查询重写插件参考

以下讨论是对与 Rewriter 查询重写插件相关的这些元素的参考

  • query_rewrite 数据库中的 Rewriter 规则表

  • Rewriter 过程和函数

  • Rewriter 系统和状态变量

7.6.4.3.1 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

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

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

  • message

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

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

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

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

  • pattern_digest

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

  • normalized_pattern

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

7.6.4.3.2 Rewriter 查询重写插件过程和函数

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

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

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

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

Rewriter 查询重写插件支持以下状态变量。这些变量仅在安装了插件后才可用(请参阅 第 7.6.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,则表示发生了错误;请检查 rewriter_rules 表的 message 列以获取错误消息。