关于mysql同一个数据表打开多次的问题

netxuning 2013-02-25 10:59:19
查看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
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
netxuning 2013-02-25
  • 打赏
  • 举报
回复
引用 5 楼 rucypli 的回复:
确实 union多少就有多少打开的表 innnodb不会出现这种情况 另外flush tables可以关闭打开的表
感谢,我测试一下innodb去
rucypli 2013-02-25
  • 打赏
  • 举报
回复
确实 union多少就有多少打开的表 innnodb不会出现这种情况 另外flush tables可以关闭打开的表
netxuning 2013-02-25
  • 打赏
  • 举报
回复
引用 1 楼 rucypli 的回复:
我试了试mysql的myisam引擎的load data导入 lsof还是一个MYD打开一次
我也试了,确实跟load data无关,但跟union有绝对的关系,请看上边的回复
netxuning 2013-02-25
  • 打赏
  • 举报
回复
进一步进行测试,发现跟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条
netxuning 2013-02-25
  • 打赏
  • 举报
回复
又经过一系列的测试,发现带union的查询语句会导致这种情况的产生,Open_files也会语句的执行立刻增加,这个是mysql bug还是什么问题呢?能否解决?
rucypli 2013-02-25
  • 打赏
  • 举报
回复
我试了试mysql的myisam引擎的load data导入 lsof还是一个MYD打开一次

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧