您的位置:首页 > 其它

转载的一篇表缓存的文章

2016-01-16 16:04 281 查看
Mysql主要参数

在优化MySQL时,有两个配置参数是最重要的,即table_cache和key_buffer_size。而具体到应用环境还有个查询参数query_cache_size直接影响查询性能。下面主要是整理的关于下面三个参数的文章

1.table_cache 表缓存

2.key_buffer_size 键缓冲

3.query_cache_size查询缓存

4.其他参数

5.参考文章

首先,在了解这些参数设置前需要明确的概念是

• 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: