问题描述:
由于MySQL是使用Docker容器搭建起来的,在今天的数据库连接中,发现比平时的连接速度变慢了很多,每次连接大概延迟了10秒左右。
排查过程
1、 服务器资源
查看系统的CPU、网络等负载,无异常。
2、数据库连接池
一开始怀疑是连接数过多导致,登入MySQL后发现连接数有近200,于是kill掉一部分,发现还是连接缓慢。
排除连接数导致缓慢。
3.、网络问题
在ping服务器的时候并没有出现数据包延迟、丢包现象。
网络问题排除。
4、MySQL DNS解析
查阅了相关资料,觉得可能是MySQL的DNS解析配置。于是我从内网连接MySQL,居然也是一样慢,一下又没了头绪。
突然想起自己是使用的Docker搭建的MySQL,于是我连入容器内部连接MySQL,秒连!定位到问题所在了,就是MySQL的DNS解析配置问题。
查找了一些相关资料,这是MySQL文档关于DNS的部分说明:
How MySQL uses DNS
When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the hostname cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
If the operating system doesn’t s