MYSQL ErrorCode:24 too many opened files

问题:MySql 打开文件错误:“outof resources when opening file‘C:\WINDOWS\TEMP\#sql3308_675_0.MYI’(ErrorCode:24 too many opened files )  ”


当遇到问题时,我们首先要进行的是分析问题:此时mysql出错了,显示打开了太多的文件,而打不开新的文件了,那么解决此问题就会有两种解决的方案:

第一种:将打开文件的限制数调大,调大满足个人需求的位置

第二种:将打开的文件关闭


解决方案一:在mysql 的my.ini配置文件中,[mysqld]中添加open_files_limit = 30000 这个数字最大可以设置为65535,重启mysql服务,可以使用show variables like 'open%';查看设置成功没

mysql> show variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 32048 |
+------------------+-------+
你会奇怪这个值为什么是32048,多了2048个,这个目前还不知道如何解释,不过测试了之后文件确实也只能打开30000个。

可以使用show status like 'open%' 去查看现在打开了多少个文件 open_files 就是目前打开的文件数,open_table_definitions 是目前打开了多少个表,使用show open tables 可以查看打开了那些表,opened_files 是自从mysql服务启动打开了多少个文件。

mysql> show status like 'open%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Open_files               | 24272 |
| Open_streams             | 0     |
| Open_table_definitions   | 176   |
| Open_tables              | 171   |
| Opened_files             | 62969 |
| Opened_table_definitions | 0     |
| Opened_tables            | 0     |
+--------------------------+-------+

同时这个打开文件的限制数的设置还会受到另一个的限制数的限制, max_prepared_stmt_count ,如果这个值大于

open_files_limit , 系统会以max_prepared_stmt_count这个设置限制数为标准。查看max_prepared_stmt_count这个数的设置可以使用show variables like 'max_prepared%';进行查看

mysql> show variables like 'max_prepared%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| max_prepared_stmt_count | 16382 |
+-------------------------+-------+


NOTE:当然这个数的设置,存在着一定的分险,因为这个数值可能在业务增多时,还是会超过最大值,而出错,所以我提倡用第二种。


解决方案二:使用 flush tables 进行对打开表的缓存进行清空。






猜你喜欢

转载自blog.csdn.net/invisible_sky/article/details/77947152