我是靠谱客的博主 怕孤单西装,最近开发中收集的这篇文章主要介绍mysql cache 配置_MySQL参数table_open_cache的设置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MySQL默认的table_open_cache为64,这个数值是偏小的,如果max_connections较大,则容易引起性能问题。

为了避免线程相互干扰,每个访问表的线程各自维护一个文件描述符,多耗了内存但是提高了性能,即一个sql若调用了2次表,也需要分配2个文件描述符;对于MyISAM表,第一次打开时需要两个描述符,其中一个为索引文件(可被后续线程共享);假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);倘若cache已满且没有可清理的对象,则会临时调大该值,类似于oracle的pga设置;可通过监控系统状态变量opened_tables查看此cache的繁忙程度,如果opened_tables不断飙升且系统不运行flush tables,则考虑加大table_open_cache值;

当无法为新连接分配足够的描述符时,会遭遇ERROR '...' not found (errno: 23)或者 Can't open file: ... (errno: 24),此时可考虑减小table_open_cache或max_connections。也可以通过open_files_limit调大mysqld可打开的文件数目。

关于table_open_cache设置较小的案列如下:

数据库查询效率慢,show processlist 发现比较多的查询正在opening table。

进一步确认,执行以下语句:

mysql> show global status like 'open%tables%';

+---------------+---------+

| Variable_name | Value   |

+---------------+---------+

| Open_tables   | 345     |

| Opened_tables | 9734116 |

+---------------+---------+

Opened_tables数值非常大,说明cache太小,导致要频繁地open table,可以查看下当前的table_open_cache设置:

mysql> show variables like '%table_open_cache%';

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| table_open_cache |     64|

+------------------+-------+

默认是64,一些资料推荐把这个数值设置为(max_connections* 查询同时用到的表数)。我实践中发现,一般设置为max_connections就没问题了(如果还不够,可以继续加大,但不能设置大得离谱,可能会引发其他问题)。即时生效的设置:

mysql> set global table_open_cache=1024;

Query OK, 0 rows affected (0.00 sec)

设置后可以观察一下,如果opening table不再怎么出现,说明此修改是有效的,将其添加到mysql的配置文件,这样数据库重启后仍可保留此设置。

阅读(5880) | 评论(0) | 转发(1) |

最后

以上就是怕孤单西装为你收集整理的mysql cache 配置_MySQL参数table_open_cache的设置的全部内容,希望文章能够帮你解决mysql cache 配置_MySQL参数table_open_cache的设置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部