3

在以下状态中,我打开的文件数量为'95349'。 这个值正在迅速增加。在mysql中打开文件和打开文件的区别

的MySQL>show global status like 'open_%';

Open_files = 721个

Open_streams = 0

Open_table_definitions = 706个

Open_tables = 741个

Opened_files = 95349

Opened_table_definitions = 701个

opened_tables的= 2851

也看到这一点。

的MySQL>show variables like '%open%';

have_openssl = DISABLED

innodb_open_files = 300

open_files_limit = 8502

table_open_cache = 4096

max_connection = 300

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

这里该命令

的ulimit -n;

1024是服务器经常挂计数

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

+0

此问题属于[ServerFault](http://serverfault.com/)。 – wallyk

回答

2

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可以保留更多的开放表句柄,并且可能会降低更新率。

+0

我发现只有当从应用程序调用特定的复杂查询时,opens_files数才会增加。我会尽量优化查询。但我有疑问。关于opens_files,我的目标应该是什么?我应该把这个数字归零。 – siva

+0

我发现根据来自“Percona MySQL for MySQL”的报告,对于这种硬件配置,我无法再增加table_open_cache。所以如果我优化复杂的查询,我的opens_files数是否会保持为0.(只是想了解在mysql性能调优中监控opens_files数的目的)。注意:open_file稳定在限制之下。所以我没有问题。 – siva

0

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