我在使用基于 servlet 的现有应用程序(一个旧的应用程序(时遇到了一个奇怪的问题。
如果 mysql 准备语句运行速度慢于 10 秒,我无法让任何 servlet 完成操作(我在这个应用程序中只有准备好的语句(。
我对更快的查询(少于 10 秒(没有问题。
Catelina.out没有任何跟踪,也没有任何浏览器界面。当我通过提琴手检查浏览器请求时,它显示
"本届会议尚未完成。按 F5 在会话时刷新 完成更新的统计信息。请求计数:发送 1 个字节:
437(标头:437;正文:0(接收的字节数:0(标头:0;正文:0(">
MySQL"显示完整进程列表"命令显示(慢速查询(运行约12秒的套接字连接,命令="执行"和状态="发送数据",然后更改为COMMAND="睡眠"和STATE="并保持这种状态很长时间(超过500秒(。理想情况下,此连接不应长时间保持为 SLEEP,而是在发送数据完成后关闭。
netstat -ab 命令显示与 tomcat6.exe 和 mysqld.exe 下的 ESTABLISHED 相同的连接。理想情况下,一旦查询执行完成,这应该保持TIME_WAIT,直到"TcpTimedWaitDelay"值。
此查询的预期有效负载非常名义(大约 2KB(。
MySQL connect_timeout=100 和 Tomcat connectionTimeout="100000"(对于我正在运行应用程序的端口 8000(。
我没有尝试更改的一件事是JDBC DriverManager.setLoginTimeout属性,因为它仅在获得连接之前受到关注。
直到几天前,这个应用程序运行良好。 但是我没有关于那些日子的查询执行时间的任何统计数据。
我正在运行Windows 2008 R2标准版,tomcat 6和MySQL 5.5。
我无法将这种行为与任何原因联系起来。 非常感谢您的帮助。
这似乎是与MySQL连接器相关的问题。我们使用的是旧连接器(版本 3.1.x(。最新稳定版(5.1.20(修复了该问题。