PHP远程链接MySQL速度慢的解决方法

由于应用服务器和数据库服务器是独立的,发现链接到MySQL数据库的时候PHP处理数据时页面执行的很慢,如果应用和数据库在同一个服务器上时,则速度很正常,很快,这是为什么呢?

查了下资料发现,默认安装的 MYSQL开启了DNS的反向解析,MySQL 官方文档中关于MySQL如何使用DNS的说明:

当一个新的客户端连接到mysqld时,mysqld会产生一个新的线程来处理这个请求。这个线程首先会检查主机名是否在缓存中存在,如果不存在,它将尝试解析这个主机名。

如果操作系统支持线程安全的gethostbyaddr_r() 和gethostbyname_r() 调用,这个线程会使用它们执行主机名解析。

如果操作系统不支持线程安全的调用,这个线程就会锁定一个互斥体并换为调用gethostbyaddr() 和gethostbyname() 。在这种情况下,第一个线程解锁互斥体之前,其他的线程将不能解析在缓存中不存在的主机名。

你可以通过添加–skip-name-resolve参数启动mysqld来禁用 DNS 主机名查询。但是这将导致你在MySQL的授权表中只能使用IP数字。

如果你使用一个很慢的DNS和许多主机,你可以通过添加–skip-name-resolve禁用域名查询或通过增加 HOST_CACHE_SIZE 定义的值(默认值: 128)并重新编译mysqld来提升性能。

你可以通过–skip-host-cache参数禁用主机名缓存。要清空主机名缓存,可以执行一个 FLUSH HOSTS 语句或执行mysqladmin中的flush-hosts命令实现。

要完全禁用ICP/IP连接,请添加 –skip-networking 启动mysqld。

好了,这样就知道原因了,解决方法(UNIX或LINUX系统下)my.cnf里面添加

[mysqld]
skip-name-resolve
skip-grant-tables

禁用DNS解析,这样连接速度正常的快很多了。

 

未经允许不得转载:SuperMan's blog » PHP远程链接MySQL速度慢的解决方法

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址