## 14.4 字典对象缓存

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

字典对象缓存是一个共享的全局缓存，它将以前访问过的数据字典对象存储在内存中，以实现对象重用并最小化磁盘 I/O。与 MySQL 使用的其他缓存机制类似，字典对象缓存使用[LRU](glossary.html#glos_lru)-基于驱逐策略从内存中驱逐最近最少使用的对象。

字典对象缓存包括存储不同对象类型的缓存分区。一些缓存分区大小限制是可配置的，而另一些则是硬编码的。

-   **表空间定义缓存分区**：存储表空间定义对象。这[`表空间定义缓存`](server-system-variables.html#sysvar_tablespace_definition_cache)选项设置可以存储在字典对象缓存中的表空间定义对象的数量限制。默认值为 256。

-   **架构定义缓存分区**：存储架构定义对象。这[`schema_definition_cache`](server-system-variables.html#sysvar_schema_definition_cache)选项设置可以存储在字典对象缓存中的模式定义对象的数量限制。默认值为 256。

-   **表定义缓存分区**：存储表定义对象。对象限制设置为[`最大连接数`](server-system-variables.html#sysvar_max_connections)，其默认值为 151。

    表定义缓存分区与使用配置的表定义缓存并行存在[`table_definition_cache`](server-system-variables.html#sysvar_table_definition_cache)配置选项。两个缓存都存储表定义，但服务于 MySQL 服务器的不同部分。一个缓存中的对象不依赖于另一个缓存中对象的存在。

-   **存储程序定义缓存分区**：存储存储的程序定义对象。这[`存储程序定义缓存`](server-system-variables.html#sysvar_stored_program_definition_cache)选项设置可以存储在字典对象缓存中的存储程序定义对象的数量限制。默认值为 256。

    存储程序定义缓存分区与使用配置的存储过程和存储函数缓存并行存在[`存储程序缓存`](server-system-variables.html#sysvar_stored_program_cache)选项。

    这[`存储程序缓存`](server-system-variables.html#sysvar_stored_program_cache)选项设置每个连接的缓存存储过程或函数数量的软上限，每次连接执行存储过程或函数时都会检查该限制。另一方面，存储的程序定义缓存分区是一个共享缓存，它存储存储的程序定义对象用于其他目的。存储程序定义缓存分区中对象的存在与存储过程缓存或存储函数缓存中对象的存在无关，反之亦然。

-   **字符集定义缓存分区**：存储字符集定义对象，硬编码对象限制为 256。

-   **排序规则定义缓存分区**：存储排序规则定义对象，硬编码对象限制为 256。

    有关字典对象缓存配置选项的有效值的信息，请参阅[第 5.1.8 节，“服务器系统变量”](server-system-variables.html).
