查看open_files,达到好几万之多mysql> show status like "open_files";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_files    | 59436 |
+---------------+-------+
1 row in set (0.00 sec)
但整个数据库目录内的文件数量不过2000。
用lsof命令查看,居然同一个.MYD文件(我用的是MyISAM引擎)被打开178次之多,而对应的.MYI文件倒是仅仅被打开了一次。非常不理解为什么mysql要对同一个文件打开这么多次,导致我把open_files_limit又上调了不少。后来想想,我插入数据的命令使用的是LOAD DATA LOCAL INFILE批量插入,会不会跟这个有关?还是别的什么问题导致的?另外:操作系统是linux,mysql版本是5.1.68

解决方案 »

  1.   

    我试了试mysql的myisam引擎的load data导入  lsof还是一个MYD打开一次 
      

  2.   

    又经过一系列的测试,发现带union的查询语句会导致这种情况的产生,Open_files也会语句的执行立刻增加,这个是mysql bug还是什么问题呢?能否解决?
      

  3.   

    进一步进行测试,发现跟union太有关系了,union了几个语句,相关的表(或分区)就会多打开几次,
    如:(select * from tbl where id = 1) UNION (select * from tbl where id = 2) UNION (select * from tbl where id = 3) UNION (select * from tbl where id = 4) UNION (select * from tbl where id = 5);
    执行后,open_files增加了,lsof相关的表会有5条
      

  4.   


    我也试了,确实跟load data无关,但跟union有绝对的关系,请看上边的回复 
      

  5.   

    确实 union多少就有多少打开的表  innnodb不会出现这种情况 另外flush tables可以关闭打开的表