java - 如何查找应用程序的数据库往返次数

标签 java oracle profiling

我是一名 Java 程序员,我想知道我的应用程序完成了多少次数据库调用/访问。我们使用 Oracle 作为我们的关系数据库。
使用 Oracle,我了解了一种更改 session 统计信息和生成跟踪文件的方法。以下是要触发的查询:

ALTER SESSION SET TIMED_STATISTICS = TRUE;

 ALTER SESSION SET SQL_TRACE = TRUE;

生成跟踪文件后,可以使用 TKProf 实用程序读取它们。但是不能使用这种方法,因为:

  1. 我的应用程序使用 hibernate 和 spring 框架,因此应用程序没有 session 句柄。
  2. 即使我们获得了跟踪文件,我也需要知道这组查询是一次性(批量)触发还是单独触发。我不确定 TkProf 输出是否有助于理解这一点。

有没有人有更好的建议?

最佳答案

在 TkProf 中,您基本上可以将往返次数视为“调用”次数(尽管存在异常(exception)情况,因此需要较少的往返次数,例如,理论上,单行选择的解析/执行/获取是,可能在单次往返中,即所谓的 oracle 的“精确获取”功能)。然而,作为估计,tkprof 数据已经足够好了。

如果跟踪等待事件,您应该直接在原始跟踪中看到“SQL*Net from/to client”等待事件,但我认为 tkprof 没有显示它(不确定,试一试)。

另一种方法是查看 session 统计信息:

select value
  from v$mystat ms, v$statname sn
 where ms.value > 0
   and ms.statistic#=sn.statistic#
   and sn.name IN ('SQL*Net roundtrips to/from client')

但是,如果您在您的应用中这样做,您的应用会变慢,并且您收到的数字将包括该选择的往返次数。

A 写了一些关于往返优化的文章:

关于java - 如何查找应用程序的数据库往返次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4853495/

相关文章:

java - Selenium 网络驱动程序 : Able to open Firefox browser but unable to load Url

java - 当 Java 编译器在一行中看到许多字符串连接时会发生什么?

java - Spring Boot 中的拆分单元测试和集成测试

oracle - Maximo 的出站集成 : Is there a reason why materialized views are not a suitable choice?

oracle - 使用 ODBC 连接到 Oracle DB

java - 如何使用额外选项(如全景)实现相机功能?

sql - 在Oracle SQL Developer中,当我复制结果时,如何也复制列标题?

java - 在 Object.<init> (hprof) 中花费的时间

c# - 在 C# 中显式释放内存

c# - 分析期间出现未知函数 CoUninitializeE