gpt4 book ai didi

java - 如何调试获取自定义对象的 hibernate/spring 数据的缓慢性能

转载 作者:行者123 更新时间:2023-11-29 04:30:55 24 4
gpt4 key购买 nike

所以我一直在努力使用 spring/hibernate 以高性能的方式获取一些数据。

版本:Spring Data 1.11.1.RELEASESpring 4.3.7.RELEASEHibernate 5.2.9.FinalMysql Conn 5.1.41

我有一个非常基本的查询

select ps.size*ps.pack, ps.uom, p.description, p.itemCode, ps.id as packSizeId, p.id as productId from PackSize ps
join product p on ps.product_id = p.id
where p.description like ?1

此查询大约需要 150 毫秒才能运行,它通常会返回大约 50-300 个结果,但会略有不同,但这些都是相当不错的一般数字。

我看到的问题是将其处理成实际记录大约需要 1 整秒。

所以现在我的代码看起来像这样。我试过通过 JPQL 查询直接创建 MinimalPackSize,我也试过直接获取真实的域实体而不手动制作它。在所有情况下,我看到的性能基本相同。处理结果所花的时间通常是查询所花时间的 8-10 倍。鉴于它返回的记录相当少,这没有意义为什么它会那么慢。

Collection<Object[]> items = internalProductRepository.findMinimalByDescriptionLike("%" + trimmed + "%");
for (Object[] item : items) {
BigDecimal totalUnits = (BigDecimal) item[0];
UnitOfMeasureEnum uom = UnitOfMeasureEnum.valueOf(item[1].toString());
String desc = item[2].toString();
String itemCode = item[3].toString();
Long psId = ((BigInteger) item[4]).longValue();
Long pId= ((BigInteger) item[5]).longValue();
products.add(new MinimalPackSize(totalUnits, uom, desc, itemCode, psId, pId));
}


@Query(value = "select ps.size*ps.pack, ps.uom, p.description, p.itemCode, ps.id as packSizeId, p.id as productId from PackSize ps " +
"join product p on ps.product_id = p.id " +
"where p.description like ?1", nativeQuery = true)
Collection<Object[]> findMinimalByDescriptionLike(String withDesc);

我已经启用了调试,但没有什么特别突出的问题。我确实验证了 internalProductRepository.findMinimalByDescriptionLike("%"+ trimmed + "%"); 实际上很慢。因此,无论我如何获得结果,它似乎都在 hibernate/ Spring 。

这是在一台速度很快的机器上,我似乎没有任何其他主要的性能问题。

关于为什么处理几个结果需要这么长时间有什么想法吗?

最佳答案

您需要有一个基准(例如,找出 1 条记录,您的代码需要 1 毫秒来处理。因此,对于 400 条记录,它不应超过 400 毫秒)。如果您看到任何退化,这将有助于确定谁是罪魁祸首。

是的,你需要考虑 -

  • 通过Jdbc驱动将数据读入java对象的时间
  • 在内存中创建对象的时间

关于java - 如何调试获取自定义对象的 hibernate/spring 数据的缓慢性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com