5

在以下状态下,我打开的文件计数为“95349”。这个值正在迅速增加。

mysql>show global status like 'open_%';

打开文件 = 721

Open_streams = 0

Open_table_definitions = 706

打开_tables = 741

已打开文件 = 95349

Opened_table_definitions = 701

已打开表 = 2851

也看到这个。

mysql>show variables like '%open%';

have_openssl = 禁用

innodb_open_files = 300

open_files_limit = 8502

table_open_cache = 4096

最大连接 = 300

与打开的文件和打开的文件有什么关系。是否会因为增加 opens_files 值而出现任何性能问题。这是一个 8 GD RAM 和 500 GB 硬盘的服务器,处理器:Intel(R) Xeon(R) CPU E3-1220 V2 @ 3.10GHz。它是一个专用的 mysql 服务器。

这里是命令

极限-n;

1024 是计数

服务器经常挂起。使用一些在线工具,我已经优化了一些参数。需要知道还有什么需要优化的吗?在什么情况下打开的文件数会减少?是否有必要将打开的文件数限制在一定范围内。如果是这样,如何为我的服务器找到适当的限制。如果不清楚某些地方,请通过提出更多问题来帮助我。

4

2 回答 2

4

Opened_files 是自上次重新启动 mysqld 以来您打开表的次数的计数器(请参阅状态变量 Uptime 以了解自上次重新启动以来的秒数)。

Open_files 不是计数器;它是当前打开文件的数量。

如果您的 Opened_files 计数器快速增加,您可以通过增加table_open_cache.

有关此变量的性能影响的一些提示(以及有关将其设置得太高的一些注意事项),请参阅:


回复您的评论:

您误解了计数器的用途。它总是增加。它计算自上次重新启动 mysqld 以来特定操作发生的次数。在这种情况下,打开一个表的文件。

在计数器中具有高值不一定是问题。这可能只是意味着您的 mysqld 已经运行了很多天或几周而没有重新启动。因此,您必须将该数字与您的正常运行时间(即 MySQL 状态变量Uptime,而不是 Linux 正常运行时间)进行比较。

更有意义的是计数器的增长速度,即它在给定的时间间隔内增长的速度。这可能表明您正在快速重新打开表格。

通常,MySQL 不必重新打开表,因为它为每个表保留一个打开的表句柄。但它只能有有限的数量。这就是 table_open_cache 的用途。在您的情况下,您的 MySQL 实例可以“记住”它一次已打开多达 4096 个表。如果您需要打开另一个表,它会关闭其中一个文件描述符并打开您请求的表。

因此,如果您有数千个表(或表的分区)并且您快速访问其中的各种表,您可能会在该表打开缓存中看到大量周转。这将通过计数器Opened_tables 迅速增加来表明。

因此,将 table_open_cache 设置得更高意味着 MySQL 可以保留更多的打开表句柄,并可能降低周转率。

于 2014-03-06T07:55:21.427 回答
0

所以解决方案是增加我的硬件(尤其是 RAM),以便我能够将 table_open_cache 增加到 4096 以上或优化查询。

于 2014-03-07T06:37:11.173 回答