#### 5.6.4.3 重写器查询重写插件参考

以下讨论可作为与这些元素相关的参考`重写器`查询重写插件：

-   这`重写器`规则表中`查询重写`数据库

-   `重写器`程序和功能

-   `重写器`系统和状态变量

##### 5.6.4.3.1 重写器查询重写插件规则表

这`重写规则`表中的`查询重写`数据库为规则提供持久存储`重写器`插件用于决定是否重写语句。

用户通过修改存储在此表中的规则集与插件进行通信。该插件通过设置表的`信息`柱子。

笔记

规则表由`刷新重写规则`存储过程。除非在最近的表修改之后调用了该过程，否则表内容不一定对应于插件使用的规则集。

这`重写规则`表有这些列：

-   `id`

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

-   `图案`

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

-   `模式数据库`

    用于匹配语句中不合格的表名的数据库。如果相应的数据库和表名相同，则语句中的限定表名与模式中的限定名匹配。仅当默认数据库与`模式数据库`并且表名相同。

-   `替换`

    指示如何重写匹配语句的模板`图案`列值。采用`?`表示与数据值匹配的参数标记。在重写的语句中，插件替换`?`参数标记在`替换`使用与相应标记匹配的数据值`图案`.

-   `启用`

    规则是否启用。加载操作（通过调用`flush_rewrite_rules()`存储过程）将表中的规则加载到`重写器`仅当此列为内存缓存时`是的`.

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

-   `信息`

    该插件使用此列与用户交流。如果规则表加载到内存时没有发生错误，则插件设置`信息`列到`空值`.一个非`空值`value 表示错误，列内容是错误消息。在以下情况下可能会发生错误：

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

    -   替换包含更多`?`参数标记比模式。

        如果发生加载错误，插件还会设置[`Rewriter_reload_error`](rewriter-query-rewrite-plugin-reference.html#statvar_Rewriter_reload_error)状态变量为`在`.

-   `模式摘要`

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

-   `标准化模式`

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

##### 5.6.4.3.2 重写器查询重写插件过程和函数

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

-   `flush_rewrite_rules()`

    此存储过程使用[`load_rewrite_rules()`](rewriter-query-rewrite-plugin-reference.html#function_load-rewrite-rules)加载内容的函数`重写规则`表入`重写器`内存缓存。

    打电话`flush_rewrite_rules()`暗示[`犯罪`](commit.html).

    在您修改规则表以使插件从新表内容更新其缓存后调用此过程。如果发生任何错误，插件会设置`信息`表中相应规则行的列，并设置[`Rewriter_reload_error`](rewriter-query-rewrite-plugin-reference.html#statvar_Rewriter_reload_error)状态变量为`在`.

-   [](<>) [`load_rewrite_rules()`](rewriter-query-rewrite-plugin-reference.html#function_load-rewrite-rules)

    [](<>)[](<>)

    该函数是一个辅助例程，由`flush_rewrite_rules()`存储过程。

##### 5.6.4.3.3 重写器查询重写插件系统变量

这`重写器`查询重写插件支持以下系统变量。这些变量仅在安装插件时可用（请参阅[第 5.6.4.1 节，“安装或卸载重写器查询重写插件”](rewriter-query-rewrite-plugin-installation.html)）。

-   [](<>) [`rewriter_enabled`](rewriter-query-rewrite-plugin-reference.html#sysvar_rewriter_enabled)

    [](<>)[](<>)

    | 系统变量 | `[rewriter_enabled]（rewriter-query-rewrite-plugin-reference.html#sysvar_rewriter_enabled）` |
    | ---- | ------------------------------------------------------------------------------------------ |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在` |

    是否`重写器`查询重写插件已启用。

-   [](<>) [`rewriter_verbose`](rewriter-query-rewrite-plugin-reference.html#sysvar_rewriter_verbose)

    [](<>)[](<>)

    | 系统变量 | `[rewriter_verbose](rewriter-query-rewrite-plugin-reference.html#sysvar_rewriter_verbose)` |
    | ---- | ------------------------------------------------------------------------------------------ |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |

    供内部使用。

##### 5.6.4.3.4 重写器查询重写插件状态变量

这`重写器`查询重写插件支持以下状态变量。这些变量仅在安装插件时可用（请参阅[第 5.6.4.1 节，“安装或卸载重写器查询重写插件”](rewriter-query-rewrite-plugin-installation.html)）。

-   [](<>) [`Rewriter_number_loaded_rules`](rewriter-query-rewrite-plugin-reference.html#statvar_Rewriter_number_loaded_rules)

    [](<>)[](<>)

    成功加载的重写插件重写规则的数量`重写规则`表到内存中供使用`重写器`插入。

-   [](<>) [`Rewriter_number_reloads`](rewriter-query-rewrite-plugin-reference.html#statvar_Rewriter_number_reloads)

    [](<>)[](<>)

    的次数`重写规则`表已加载到由`重写器`插入。

-   [](<>) [`Rewriter_number_rewritten_queries`](rewriter-query-rewrite-plugin-reference.html#statvar_Rewriter_number_rewritten_queries)

    [](<>)[](<>)

    被重写的查询数`重写器`查询重写插件，因为它被加载。

-   [](<>) [`Rewriter_reload_error`](rewriter-query-rewrite-plugin-reference.html#statvar_Rewriter_reload_error)

    [](<>)[](<>)

    是否在最近一次发生错误`重写规则`表已加载到由`重写器`插入。如果值为`离开`，没有发生错误。如果值为`在`，发生错误；检查`信息`的列`重写器规则`错误信息表。
