table_definition_cache和table_open_cache以及table_open_cache_instances

本文解析了MySQL中table_definition_cache、table_open_cache及table_open_cache_instances三个参数的作用与配置建议,帮助理解如何优化表缓存以提升数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

这三者,经常有很多人搞混淆,我们先看官方文档: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_table_definition_cache,他们三个是连在一起的,所以有些相似的地方,但是也有不同。

 

1、table_definition_cache

全局参数,默认值为-1,最小是为400,描述的是.frm文件在定义换成里面存储的总量,如果你创建一个比较大的值,会加快你打开表的速度。这个表定义缓存会占据一些空间,它不同于常规的表缓存,它不会用文件描述符。

它的值,最小400,之后一般依据下面的简单计算来定:

400 + (table_open_cache / 2)

 

2、table_open_cache

这也是全局参数,默认是2000,最小值1最大值524288,这是mysql服务器当前所有线程打开的表的数据量,增加这个值会增加mysqld需要的文件描述符的数量。可以通过检查Opened_tables状态变量来检查是否需要增加表缓存。FLUSH TABLES命令会强迫所有的表去关闭然后重新打开。

但是table_open_cache一般是可以调整增加的,但是不能超过shell文件的上限,就是-ulimit -a的那个值。

 

3、table_open_cache_instances

全局参数,默认16,最小1,最大64,打开的表缓存实例的数量。为了通过减少会话间的争用来提高可伸缩性,可以将打开的表缓存划分为几个大小为table_open_cache / table_open_cache_instances的较小缓存实例。一个会话只需要锁定一个实例就可以访问DML语句。

 

MySQL参数调优策略详解 4.1 内存缓存配置 在 MySQL 中,内存缓存的优化对于提升数据库性能至关重要。以下是关键参数的优化策略: 1. 缓冲池(Buffer Pool) • InnoDB Buffer Pool (适用于 InnoDB 存储引擎): SET GLOBAL innodb_buffer_pool_size = 8589934592; 推荐值:占用 服务器物理内存的 50%-75%,但需根据业务负载进行调整。 作用:缓存数据页、索引、插入缓冲等,提高读写性能。 相关参数 : 3. 临时表优化 • SET GLOBAL tmp_table_size = 268435456 • 作用:减少磁盘临时表的使用,提高查询性能。 4. 连接缓存 SET GLOBAL table_open_cache = 4000; SET GLOBAL table_definition_cache = 2000; • 作用:减少表打开关闭的开销,提高查询性能。 4.2 并发优化处理 高并发场景下,需要优化 MySQL 的线程管理、事务处理锁机制。 1. 线程优化 SET GLOBAL thread_cache_size = 64; • 作用:减少频繁创建销毁线程的开销,提高并发处理能力。 2. 连接管理 SET GLOBAL max_connections = 500; SET GLOBAL wait_timeout = 600; • max_connections 设定最大连接数,过高可能会占用过多资源,可结合 SHOW STATUS LIKE 'Threads_connected'; 监控实际连接数。 • wait_timeout 设定连接的超时时间,避免空闲连接占用资源。 3. 事务并发控制 SET GLOBAL innodb_flush_log_at_trx_commit = 2; SET GLOBAL sync_binlog = 0; • innodb_flush_log_at_trx_commit=2 允许日志每秒写入一次磁盘,提高性能,但可能导致崩溃时数据丢失。 • sync_binlog=0 关闭 binlog 立即同步,提高事务处理速度。 4. 锁优化 SET GLOBAL innodb_lock_wait_timeout = 50; • 避免长时间锁等待影响业务。 4.3 日志与持久化 日志优化可以提高 MySQL 的数据安全性恢复速度,同时影响写入性能。 1. Redo Log(重做日志) • 作用:加速事务恢复,提高写性能。 2. Binary Log(二进制日志) SET GLOBAL binlog_format = 'ROW'; • binlog_format=ROW 适用于主从复制,提高数据一致性。 3. General Log(一般查询日志) SET GLOBAL general_log = OFF; • 避免影响性能,只有在调试时开启。 4. Slow Query Log(慢查询日志) SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1; • long_query_time=1 记录执行时间超过 1 秒的 SQL 语句,帮助优化慢查询。 介绍一下
最新发布
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值