触发更新¶
客户端可以同时对一个表发出查询。为了避免可伸缩性问题,每个线程处理查询都有自己的表实例。服务器使用一个特殊的缓存,称为表缓存,其中包含打开的表实例。缓存的使用避免了为每条语句打开和关闭表所付出的资源代价。
的table_open_cache系统变量对缓存大小设置软限制。如果当前执行的查询需要比指定的更多的打开表,则可以临时超过此限制。但是,当这些查询完成时,服务器将使用最近最少使用(LRU)算法从缓存中关闭未使用的表实例。
的table_open_cache_instances系统变量显示打开的表缓存实例的数量。
有关更多信息,请参见MySQL如何打开和关闭表。
在table Cache中打开带有触发器的表还会解析触发器定义,并将打开的表实例与其自己的已定义触发器主体实例相关联。当连接执行DML语句并且必须运行触发器时,该连接将获得该特定打开表实例的触发器主体的自己实例。这种方法的结果是,缓存打开表实例和为每个触发器缓存关联的触发器体会消耗大量内存。
版本相关信息¶
雷竞技下载官网Percona Server for MySQL 8.0.31增加了以下功能:
- 避免通过只读查询使用带有完全加载和解析触发器的表实例
- 显示触发CREATE语句,即使该语句不可解析
当包含触发器定义的表也是重要只读工作负载的一部分时,附加的系统变量减少了服务器上的表缓存内存消耗。
系统变量¶
table_open_cache_triggers¶
| 选项 | 描述 |
|---|---|
| 命令行 | ——table-open-cache-triggers |
| 动态 | 是的 |
| 范围 | 全球 |
| 数据类型 | 整数 |
| 默认的 | 524288 |
| 最小值 | 1 |
| 最大值 | 524288 |
此变量允许您设置表缓存中打开表的最大值的软限制,其中包含完全加载的触发器。缺省情况下,该值为最大值,以避免现有用户观察到行为的变化。
如果具有全负载触发器的打开表实例的数量超过该值,则删除具有全负载触发器的未使用的表实例。该操作采用LRU (least recently used)方式管理存储区域。
可以是启动选项,也可以动态修改。
状态变量¶
以下状态变量可用:
| 变量名 | 描述 |
|---|---|
table_open_cache_triggers_hits |
命中意味着该语句需要一个已加载触发器的打开表实例,并且能够从table_open_cache。 |
table_open_cache_triggers_misses |
类型中没有找到要求具有完全加载触发器的打开表实例的语句table_open_cache。语句可以找到一个没有完全加载触发器的表实例,并为其完成加载。 |
table_open_cache_triggers_overflows |
溢出指示从触发器中驱逐的带有触发器的未使用表实例的数量table_open_cache由于table_open_cache_triggers软限制。这个变量可以证明table_open_cache_triggers价值应该增加。 |
显示CREATE触发器语句的变化¶
的显示创建触发器statement显示用于创建触发器的CREATE语句。该语句还显示了不能再解析的定义。例如,您可以显示在更改触发器语法的服务器升级之前创建的触发器的定义。