今天遇到一个奇怪的问题,后来发现和mysql打开文件有关。
遇到的奇怪问题
我在159机器上安装了mysql,在159机器上连接mysql执行sql的速度是0.9s左右。
但是我从186机器上连接159机器上的mysql执行,时间为5s多。 很是奇怪.(每次测试前我都是重启数据库、清理linux缓存)
如果是第二次查询,不管存本地159机器还是非本地的186机器,都是0.3s返回结果。
数据库版本是5.5.41-tokudb-7.5.5。
下面是非本地186机器上第一次的查询(查询前重启数据库,清理操作系统缓存):
下面是本地159机器的第一次查询(查询前重启数据库,清理操作系统缓存):
找到原因
实验一
1、先重启159机器上的mysql,并查看mysql打开文件数(目前为72个)
2、在189机器上连接159mysql并执行表上查询(这里话费了4.39s)
3、查看159机器上mysql的打开文件数
4、再次执行上面的需要5s多的SQL
说明:从上面的实验看出,时间主要消耗在打开文件上。
那本地连接后,为啥查询只需要0.9s呢? 继续实验看看
实验二
1、重启159机器 mysql,查看mysql打开文件数
2、本地连接mysql(本地第一次连接mysql时比较慢)
3、查看159机器mysql打开文件数
说明:从这个实验可以看出,mysql在本地连接时直接打开了文件。
我自己还做了实验,是这样的,如果你本地直接连接mysql的某个db,他就打开那个db下的所有文件,其他db下的文件不会打开。
实验三
1、重启159机器mysql,并查看mysql打开文件数
2、从186机器上,连接159机器上的mysql下的pvd1库
3、查看159机器上的mysql打开的文件数
说明:这个pvd1下相关的文件数有几百个,这个只多了一个。可以说明远程连接时没有去打开连接db下的所有文件。