Java 无论查询是什么,有时都会延迟很多时间

Java 无论查询是什么,有时都会延迟很多时间,java,mysql,centos,Java,Mysql,Centos,我在centos6.2final、mysql 5.1.66和JavaJDK1.6上编程 此代码用于获取服务器的结果 public ArrayList confirm(String key, String string) { ArrayList tmp = null; try { PreparedStatement prep = null; try { prep = Local.pre

我在centos6.2final、mysql 5.1.66和JavaJDK1.6上编程

此代码用于获取服务器的结果

public ArrayList confirm(String key, String string) {
        ArrayList tmp = null;

        try {
            PreparedStatement prep = null;
            try {
                prep = Local.prepareStatement("select distinct tags from tagDB where key=? and string!=?;");
            } catch (Exception e) {

            }

            if (prep != null) {
                prep.setString(1, key);
                prep.setString(2, string);

                int count = getRowCount(prep.executeQuery());
                if (count > 0) {
                    tmp = new ArrayList();
                    ResultSet rs = prep.executeQuery();
                    while (rs.next()) {
                        tmp.add(rs.getString("tags"));
                    }
                    return tmp;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return tmp;
    }
服务器的数据库也很好。我想是的

如果你想看mysql。我可以给你

下面是我的java日志

16:2:46:450, turnaround time :26

16:2:46:484, turnaround time :23

...

16:2:47:665, turnaround time :23

16:2:50:136, turnaround time :71

16:2:50:246, turnaround time :106

...

16:2:53:22, turnaround time :54

**16:2:58:131, turnaround time :5098**

16:2:58:157, turnaround time :22

...

16:2:58:325, turnaround time :23

**16:3:3:358, turnaround time :5028**

**16:3:8:423, turnaround time :5027**

16:3:9:525, turnaround time :22

...

16:3:10:248, turnaround time :64

**16:3:15:288, turnaround time :5032**
有时它精确地延迟了5000毫秒

所以我认为这是因为服务器的内存或缓冲区设置,比如java的GC

所以我编辑了mysql的.cnfconfig文件。 关于maxconnection的大小,最大堆大小,表大小, 最大tmp表大小、线程缓存大小等等。 我无法调整线程缓存大小和一些表的值。 my.cnf文件未调整超过两个值

比什么都没发生好

mysql的慢速查询日志无法获取任何内容

。。。任何我不能做的事。所以请。。非常感谢阅读所有

太多了。祝大家过得愉快


我的英语不好。。我知道。对此我也很抱歉。^^

为什么要运行prep.executeQuery两次?在循环通过ResultSet时,为什么还要使用计数控件?延迟可能是GC造成的。结果集通常有多少行?@petermmom,,我认为这不是java的gc。。。因为我的数据库太小了,有几千行,结果集通常最多可以得到2行。ToDo:profile Java prog,从shell运行查询,检查网络问题,…@petermm谢谢你的建议。