【发布时间】:2011-05-24 09:57:06
【问题描述】:
如果我在本地服务器上使用 Java 连接到 MySQL,我会立即访问。
但是如果我在本地主机之外,从网络 PC (192.168.1.100) 连接,它会非常慢(4-5 秒)。
而且,如果我从公共 IP 连接到我的 SQL 服务器,它也很慢(6 秒或更长时间)。
【问题讨论】:
标签: java mysql jdbc connection performance
如果我在本地服务器上使用 Java 连接到 MySQL,我会立即访问。
但是如果我在本地主机之外,从网络 PC (192.168.1.100) 连接,它会非常慢(4-5 秒)。
而且,如果我从公共 IP 连接到我的 SQL 服务器,它也很慢(6 秒或更长时间)。
【问题讨论】:
标签: java mysql jdbc connection performance
“为什么”已经得到解答。这只是网络延迟。
您可能还对如何“修复”它感兴趣。答案是:使用connection pool。如果您正在运行 Java Web 应用程序,请使用 Web 服务器提供的连接池工具。以Tomcat为例,请查看this manual。如果您正在运行 Java 桌面应用程序,请使用像 c3p0(教程 here)这样的体面的连接池实现。
【讨论】:
因为您的计算机需要时间将数据包发送到外部服务器,并且它们需要时间将数据包发送回。这称为网络延迟,并不是 Java 特有的问题,而是一般的网络问题。
【讨论】:
通过网络建立连接总是比在本地建立相同连接花费更长的时间。但是,假设您有一个相当典型的本地网络,4-5 秒听起来有点极端。我的猜测(这只是一个猜测)是大部分额外时间都被网络名称解析(即 DNS 和/或 netbios)所消耗。
我建议您尝试使用数字 IP 地址而不是名称进行连接。
【讨论】:
我猜是网络延迟加上连接创建时间。我不知道您在客户端机器和 MySQL 服务器之间还有什么。
【讨论】:
连接 4 秒可能是 DNS 问题,而不仅仅是纯粹的网络延迟。 尝试使用“skip-name-resolve”参数启动 MySQL 服务器以跳过将客户端的 IP 解析为主机名。在此之前,请确保您的授权表基于 IP 和“本地主机”而不是符号名称。
【讨论】: