从MySQL 8.0开始,这里讨论的复合部分结构变量语法用于引用多个MyISAM
密钥缓存已弃用。
对键缓存的共享访问可以提高性能,但不能完全消除会话之间的争用。它们仍然在争夺管理对关键缓存缓冲区访问的控制结构。为了进一步减少键缓存访问争用,MySQL还提供了多个键缓存。该特性使您能够向不同的键缓存分配不同的表索引。
当有多个键缓存时,服务器必须知道在处理给定的查询时使用哪个缓存MyISAM
表格默认情况下,所有MyISAM
表索引缓存在默认键缓存中。方法将表索引分配给特定的键缓存缓存索引
声明(见第13.7.8.2节,“缓存索引语句”).例如,下面的语句从表中分配索引t1
,t2
,t3
到已命名的键缓存hot_cache
:
mysql缓存索引t1, t2, t3;+---------+--------------------+----------+----------+ | 表| Op | Msg_type | Msg_text | +---------+--------------------+----------+----------+ | 测试。t1 | assign_to_keycache | status | OK | | test.输出说明t2 | assign_to_keycache | status | OK | | test.输出说明t3|assign_to_keycache | status | OK | +---------+--------------------+----------+----------+
中引用的键缓存缓存索引
语句的大小可以通过使用集全球
参数设置语句或通过使用服务器启动选项。例如:
SET GLOBAL keycache1.key_buffer_size=128*1024;
要销毁一个密钥缓存,将其大小设置为0:
设置全局keycache1.key_buffer_size=0;
不能破坏默认密钥缓存。任何这样做的尝试都会被忽略:
设置全局key_buffer_size = 0;显示变量key_buffer_size;+-----------------+---------+ | Variable_name |值 | +-----------------+---------+ | key_buffer_size | 8384512 | +-----------------+---------+
关键缓存变量是结构化的系统变量,具有名称和组件。为keycache1.key_buffer_size
,keycache1
缓存变量名称和key_buffer_size
是缓存组件。看到第5.1.9.5节“结构化系统变量”,以了解用于引用结构化键高速缓存系统变量的语法。
默认情况下,表索引分配给服务器启动时创建的主(默认)键缓存。当一个键缓存被销毁时,分配给它的所有索引都被重新分配给默认键缓存。
对于一个繁忙的服务器,你可以使用一种包含三个关键缓存的策略:
一个”热”占分配给所有密钥缓存空间的20%的密钥缓存。对于大量用于搜索但没有更新的表,可以使用此方法。
一个”冷”占分配给所有密钥缓存空间的20%的密钥缓存。将此缓存用于中等规模的、经过大量修改的表,例如临时表。
一个”温暖的”占键缓存空间60%的键缓存。将其作为默认键缓存,默认情况下将用于所有其他表。
使用三个键缓存有益的一个原因是,对一个键缓存结构的访问不会阻碍对其他键缓存结构的访问。访问分配给一个缓存的表的语句不会与访问分配给另一个缓存的表的语句竞争。性能提升还有其他原因:
热缓存仅用于检索查询,因此它的内容永远不会被修改。因此,每当需要从磁盘拉入索引块时,选择用于替换的缓存块的内容不需要首先刷新。
对于分配给热缓存的索引,如果没有需要索引扫描的查询,那么与索引b树的非叶节点对应的索引块很有可能保留在缓存中。
当更新的节点位于缓存中,且不需要首先从磁盘读取时,最常为临时表执行的更新操作执行得更快。如果临时表的索引大小与冷键缓存的大小相当,则更新节点位于缓存中的可能性非常高。
的缓存索引
语句建立表和键缓存之间的关联,但是每当服务器重新启动时,该关联就会丢失。如果您希望关联在每次服务器启动时生效,一种方法是使用选项文件:包括配置密钥缓存的变量设置和一个init_file
命名文件的系统变量,该文件包含缓存索引
要执行的语句。例如:
key_buffer_size = 4G hot_cache。key_buffer_size= 2G cold_cache.key_buffer_size = 2G init_file=/路径/来/数据目录/ mysqld_init.sql
的声明mysqld_init.sql
在每次服务器启动时执行。该文件每行应该包含一条SQL语句。下面的示例分别将几个表分配给hot_cache
而且cold_cache
:
缓存索引db1。t1, db1。t2, db2。t3IN hot_cache CACHE INDEX db1.t4, db2.t5, db2.t6 IN cold_cache