您现在的位置: 首页  > MySQL > 性能与优化
通行证登录
 

Mysql主要配置参数1:table_cache 表缓存

作者:[51ak ]

Mysql主要参数
在优化MySQL时,有两个配置参数是最重要的,即table_cache和key_buffer_size。而具体到应用环境还有个查询参数query_cache_size直接影响查询性能。下面主要是整理的关于下面三个参数的文章
1.table_cache 表缓存
2.key_buffer_size 键缓冲
3.query_cache_size查询缓存
4.其他参数
5.参考文章

首先,在了解这些参数设置前需要明确的概念是
• 什么是mysql/l_13_1.htm" title="MYSQL" >MYSQL的缓存:在内存中预留的块
• 访问内存中的数据快于访问磁盘上的数据。
• 把数据保存在内存中更重要的是可以减少磁盘IO操作。
• 当数据变化(update insert delete...)时对应的缓存就失效
• 内存是有限的

1、table_cache 表缓存
table_cache指示表高速缓存的大小。当Mysql访问一个表时,如果在Mysql表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容。一般来说,可以通过查看数据库运行峰值时间的状态值Open_tables和Opened_tables,用以判断是否需要增加table_cache的值,即如果open_tables接近table_cache的时候,并且Opened_tables这个值在逐步增加,那就要考虑增加这个值的大小了。
mysql默认安装情况下,table_cache的值在2G内存以下的机器中的值默认时256到512,如果机器有4G内存,则默认这个值是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql对SQL响应的速度更快了,不可避免的会产生更多的死锁(dead lock),这样反而使得数据库整个一套操作慢了下来,严重影响性能。所以平时维护中还是要根据库的实际情况去作出判断,找到最适合你维护的库的table_cache值
当服务器打开表文件的时候,它试图保持这些文件的打开状态,以减少打开文件操作的数量。为了实现这样的功能,它在表缓存中维护打开文件的信息。table_cache系统变量控制着这个缓存的大小。如果服务器访问了大量的表,表缓存就会被填满,并且服务器会关闭那些有一段时间没有使用的表,为打开新表留出空间。你可以通过检查Opened_tables状态指示器来访问表缓存的效果:
SHOW STATUS LIKE ’Opened_tables’;
Opened_tables显示了某个数据表必须打开的次数(因为它还没有打开)。这个值也显示为mysqladmin状态命令的输出信息中的Opens值。如果这个数字是稳定的或缓慢增长,那么它的设置可能是正确的。如果这个数字增长得很快,就意味着这个缓存太小了,必须经常关闭数据表来为打开其它的数据表留出空间。如果你拥有文件描述信息,增加表缓存大小将减少数据表打开操作的数量。
# 注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
mysql手册上给的建议大小是:table_cache=max_connections*n
n表示查询语句中最大表数,还需要为临时表和文件保留一些额外的文件描述符。
这个数据遭到很多质疑,table_cache够用就好,检查Opened_tables值,如果这个值很大,或增长很快那么你就得考虑加大table_cache了.
在下面的条件下,未使用的表将被关闭并从表缓存中移出:
• 当缓存满了并且一个线程试图打开一个不在缓存中的表时。
• 当缓存包含超过table_cache个条目,并且缓存中的表不再被任何线程使用。
• 当表刷新操作发生。当执行FLUSH TABLES语句或执行mysqladmin flush-tables或mysqladmin refresh命令时会发生。
当表缓存满时,服务器使用下列过程找到一个缓存入口来使用:
• 当前未使用的表被释放,以最近最少使用顺序。
• 如果缓存满了并且没有表可以释放,但是一个新表需要打开,缓存必须临时被扩大。
如果缓存处于一个临时扩大状态并且一个表从在用变为不在用状态,它被关闭并从缓存中释放。
几个关于table_cache的状态值:
1  table_cache:所有线程打开的表的数目。增大该值可以增加mysqld需要的文件描述符的数量。默认值是64.
2  open_tables:当前打开的表的数量.
3  opened_tables :Number of table cache misses,如果opened_tables较大,table_cache 值可能太小.
4  Open_table_definitions : The number of cached .frm files. This variable was added in MySQL 5.1.3.
5  Opened_table_definitions : The number of .frm files that have been cached. This variable was added in MySQL 5.1.24.