当前位置: 首页 > 知识库问答 >
问题:

我是否可以为spring data jpa启用任何日志,以了解它在Tomcat中运行缓慢的原因?

武彭薄
2023-03-14

我在DBeaver中有一个查询,运行时间约为6ms,我使用常规日志提取传入的查询,该查询与我的Tomcat服务器连接的数据库相同

select min(organizati0_.Downloaded) as col_0_0_ from oss_collection_history organizati0_ 
where organizati0_.AccountingSystem='SomeSystem' 
and (organizati0_.Org in ('ID1' , 'ID2', ..., 'ID10' ))

在针对数据库的Dockerized副本运行Spring Data JPA的JUnit测试中,该查询也运行得相当快,只需60毫秒,但是在Tomcat上,它需要8-10秒以上。

所以不完全确定发生了什么。

我只是使用相同的参数来分析函数调用。

var start = System.currentTimeMillis();
consolidatedDownloadSvc.getAvailableYearsOfDownloadedForAccountingSystem(...);
System.out.println(System.currentTimeMillis() - start);

即使我设置了全局log_queries_not_using_indexes = 'ON',它也不会出现在 slowlog 上;因此,这将向我指示查询已编入索引。

所以我想知道是否有某种日志可以显示我在Spring-Data和Hibernate中可能丢失的任何额外的东西。

共有1个答案

司寇照
2023-03-14

除了@Panagiotis所建议的,让下面的统计数据了解hibernate在哪个阶段花费更多时间也是有帮助的。

spring.jpa.properties.hibernate.generate_statistics=true
logging.level.org.hibernate.stat=DEBUG

您会在日志中看到如下内容

2021-12-29 10:54:52.408  INFO 31972 - – [           main] i.StatisticalLoggingSessionEventListener : Session Metrics {
    5070899 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    4359903 nanoseconds spent preparing 20 JDBC statements;
    76117198 nanoseconds spent executing 20 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    132026893 nanoseconds spent performing 40 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    838900 nanoseconds spent performing 19 L2C misses;
    0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
    16900 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}
 类似资料:
  • 问题内容: 简而言之,我需要能够将已编译的可执行文件粘贴到Java jar文件中,然后能够从Java运行它(可能通过)。 的 原因 ,是我想使用Java来包裹ImageMagick的可执行文件成分的图像处理弹性的Map Reduce任务。EMR只希望获取一个jar文件,因此我认为没有空间在旋转的数据节点上安装软件。 问题答案: jar中的可执行文件是一种资源,您可以通过Stream访问它,并将可执

  • 导致生成完全失败(不是以正确的方式): 失败:生成失败,出现异常。 *错误:任务“:app:compiledebugjava”执行失败。 是否不支持adding-werror?

  • 通常在大口大口的任务看起来像这样: 是否可以将命令行标志传递给gulp(这不是任务)并让它基于此有条件地运行任务?例如 然后在我的gulpfile.js:

  • 问题内容: 有没有一种方法可以缓慢地运行使用量角器编写的Angular E2E测试,以便我可以观察发生了什么? 问题答案: 下面是我的解决方案。因此,基本上,我为当前的控制流功能创建了一个装饰器,该装饰器现在另外在每个已排队的操作之前排队100ms的延迟。 这需要在调用任何测试之前运行(外部块)

  • 问题内容: 是否可以在tomcat的URL中关闭jsessionid?jsessionid似乎对搜索引擎不太友好。 问题答案: 你可以使用此过滤器仅对搜索引擎禁用,但我建议对所有响应都使用它,因为它比不友好的搜索引擎更糟糕。它公开了可用于某些安全漏洞的会话ID(更多信息)。 Tomcat 6(6.0.30之前的版本) 你可以使用tuckey重写过滤器。 Tuckey过滤器的示例配置: Tomcat