gpt4 book ai didi

java - Hibernate Java批量操作死锁

转载 作者:行者123 更新时间:2023-12-01 05:42:22 26 4
gpt4 key购买 nike

我们有使用 Hibernate 和 struts 构建的 J2EE 应用程序。我们有基于 RMI 注册表的业务功能实现。

在我们的应用程序中,大约 250 个并发用户将上传包含名为 BATCHDET 的大量数据的批处理。这些批处理首先根据 30 次验证进行验证,然后将它们插入到我们具有父子关系的表中。类似的还有其他需要大量处理的操作。例如打印等。

有一个表包含 1000 万条记录,所有类型的事务都会访问该表,并且每个进程都会插入和更新该表。该表已成为瓶颈。我们还添加了所有必需的索引。

运行 30 分钟后,系统 JVM 将使用所有分配的 6GB RAM,并进入无响应状态。当我们试图找出根本原因时,我们意识到数据库站点存在锁定,并且与 BATCHDET 表相关的所有更新查询都处于等待状态。我们尽了一切努力,但没有运气。

系统在 50 个并发用户尝试时运行顺利,但在 250 个用户(预期)时崩溃。 BATCHDET 几乎对​​每个模块都有很大的依赖性,没有心情重写实现,能否请您提供快速修复。

我们在 Hibernate 中使用 HIbernateUtil.java 实现了基于线程的事务划分。事务隔离是已提交读。有什么方法可以为所有搜索操作定义无锁。我们有 Oracle 10G RDBMS。

如果您需要任何其他详细信息,请告诉我。

~阿马尔

最佳答案

“有什么方法可以为所有搜索操作定义无锁。我们有 Oracle 10G RDBMS。”

Oracle 不会锁定选择,因此实际上这已经就位。

Oracle 还在行级别锁定,因此您需要停止将表视为一个整体,而开始考虑各个行。

您需要与您的 DBA 交谈。 Oracle 中的系统和 session 级别都有大量内容需要监控。 DBA 将能够查看 v$session 并告诉您各个 session 正在等待什么。可能存在锁,可能是磁盘瓶颈,可能是索引争用,也可能是数据库闲置而所有低效率都在 java 层。

关于java - Hibernate Java批量操作死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781138/

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