【问题标题】:How to get exec/fetch time of a JDBC query?如何获取 JDBC 查询的执行/获取时间?
【发布时间】:2012-08-26 06:49:44
【问题描述】:

DbVisualizer 之类的工具通常会在执行数据库查询后显示 exec/fetch 时间。通过 JDBC 执行查询后是否可以访问此类性能指标?

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();

// missing functionality:
float executionTime = rsmd.getExecTime();
float fetchTime = rsmd.getFetchTime();

我在ResultSetResultSetMetaData 类中都没有找到任何此类性能测量功能。没有比使用系统时钟“手动”测量经过时间更好的方法,例如How do I calculate the elapsed time of an event in java?

【问题讨论】:

    标签: java database performance jdbc time


    【解决方案1】:

    您必须衡量时机。通常您会使用System.currentTimeMillis()毫秒 为单位计时,或使用System.nanoTime() 以获得更高的分辨率/准确度。

    在很少使用的时候自动计时会很浪费。

    【讨论】:

      【解决方案2】:

      Sormula ORM 可以记录时间信息。

      description=SELECT id, firstName, lastName, graduationDate FROM Student WHERE id IN (?, ?)
      prepare    = 50% 00:00:00.000382423 n=  1 avg=00:00:00.000382423
      write      =  7% 00:00:00.000054496 n=  1 avg=00:00:00.000054496
      execute    = 25% 00:00:00.000190143 n=  1 avg=00:00:00.000190143
      read       = 19% 00:00:00.000144009 n=  2 avg=00:00:00.000072005
      total      =100% 00:00:00.000771071
      

      timing example

      【讨论】:

        【解决方案3】:

        您可以使用 log4jdbc 库记录所有 JDBC 连接,请参阅 answerlog4jdbc repository 了解更多信息

        【讨论】:

          猜你喜欢
          • 2021-09-12
          • 2016-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-11
          • 1970-01-01
          • 1970-01-01
          • 2015-04-15
          相关资源
          最近更新 更多