首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制open_files_limit或table_open_cache的更高值?

如何强制open_files_limit或table_open_cache的更高值?
EN

Database Administration用户
提问于 2013-10-29 20:33:13
回答 2查看 13.7K关注 0票数 1

我遇到了一个令人沮丧的问题,就是将my.cnf设置为比我目前拥有的值更高的值并不是“接受”。

这是MySQL 5.6.14 on MacOS X 10.8.3

我试图解决掉的连接和其他看似与容量相关的问题。

例如:我的数据库的当前统计数据是:

代码语言:javascript
复制
mysql> SHOW GlOBAL STATUS LIKE "%open%";

+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| Com_ha_open                | 0      |
| Com_show_open_tables       | 0      |
| Innodb_num_open_files      | 1581   |
| Open_files                 | 5557   |
| Open_streams               | 0      |
| Open_table_definitions     | 4199   |
| Open_tables                | 5000   |
| Opened_files               | 54805  |
| Opened_table_definitions   | 4247   |
| Opened_tables              | 8515   |
| Slave_open_temp_tables     | 0      |
| Table_open_cache_hits      | 104991 |
| Table_open_cache_misses    | 8479   |
| Table_open_cache_overflows | 3459   |
+----------------------------+--------+

我当前的my.cnf值是:

代码语言:javascript
复制
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
max_allowed_packet=128M
wait_timeout=57600
table_open_cache = 5000
table-definition-cache = 10000
open_files_limit = 10000
max-connections = 15
thread-cache-size = 16K
max-heap-table-size = 6024M
tmp-table-size = 6024M
query-cache-size = 256K
query-cache-limit = 16M
key_buffer = 512M
long-query-time = 5
join-buffer-size = 1M
innodb_buffer_pool_size = 3046M

这就产生了:

代码语言:javascript
复制
mysql> SHOW VARIABLES LIKE '%open%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| have_openssl               | DISABLED |
| innodb_open_files          | 5000     |
| open_files_limit           | 10025    |
| table_open_cache           | 5000     |
| table_open_cache_instances | 1        |
+----------------------------+----------+
5 rows in set (0.00 sec)

应该是的。

我想提高我的开放限额

代码语言:javascript
复制
table_open_cache = 10000
table-definition-cache = 20000
open_files_limit = 60000

但是,当我这样做时,my.cnf似乎是无效的,mysql报告:

代码语言:javascript
复制
mysql> SHOW VARIABLES LIKE '%open%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| have_openssl               | DISABLED |
| innodb_open_files          | 400      |
| open_files_limit           | 256      |
| table_open_cache           | 400      |
| table_open_cache_instances | 1        |
+----------------------------+----------+
5 rows in set (0.00 sec)

这显然会杀死我的服务器。

EN

回答 2

Database Administration用户

发布于 2013-10-29 21:33:19

从你的数字看,你一定是碰到了一些错误或GA前的行为。为什么?

根据MySQL文档,对于GA版本MySQL 5.6,table_open_cache的缺省值是-1。这告诉mysqld选择一个公平的起始值,给出当前的操作系统条件。让这个值变得奇怪的是400是MySQL5.6.7的缺省值.这个事实。第一次GA释放为5.6.8。这可能是个巧合,但我猜你把table_open_cache设得太高了。显然,对于您的DB Server来说,5000是一个可容忍的值。

建议

尝试将表格设置为2或4,然后重新启动mysql并查看。

票数 1
EN

Database Administration用户

发布于 2013-10-29 21:55:18

您可能已将每个进程打开的文件描述符的总数最大化。我发现了关于FreeBSD的类似讨论,它涉及16万个描述符,但我认为像MacOS这样的“消费者”操作系统的限制比较保守。问一下ulimitsysctl你的限制是什么。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/52447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档