小编Mar*_*nee的帖子

使用 Hibernate 执行数千次插入时 CPU 利用率高

我们最近使用 Hibernate 和 EntityManager(无 Spring)实现了数据库绑定,以将记录写入数据库。为了简单起见,我将只讨论仅执行插入的过程的变体。(另一个非常相似的过程更新现有记录一次以设置状态,但除此之外,仅插入一堆记录。)

此过程可以在每个事务中插入多达 10,000 条记录,但平均值低于此值,可能至少是一半。我们可能会在同一 JVM 下同时在不同线程中运行该进程的几个实例。

我们遇到了一个生产问题,运行该进程的服务正在占用机器上的所有 24 个核心。(他们添加了 12 个只是为了尝试适应这一点。)我们已将这种高利用率缩小到 Hibernate。

我花了几天时间研究,除了使用 hibernate.jdbc.batch_size 和 hibernate.order_inserts 之外,找不到任何可以提高性能的东西。不幸的是,我们使用 IDENTITY 作为生成策略,因此 Hibernate 可以/不会批处理这些插入。

我花了几天时间进行研究,但在进行大量插入时没有发现任何其他性能提示。(我见过很多关于读取、更新和删除的提示,但关于插入的提示却很少。)

我们有一个根 JobPO 对象。我们简单地调用合并,所有插入都是通过级联注释处理的。我们需要在单个事务中完成此操作。

我们只有 8 个不同的表需要插入,但记录的层次结构有点复杂。

public void saveOrUpdate(Object dataHierarchyRoot) {
    final EntityManager entityManager = entityManagerFactory.createEntityManager();
    final EntityTransaction transaction = entityManager.getTransaction();

    try {
        transaction.begin();

        // This single call may result in inserting up to 10K records
        entityManager.merge(dataHierarchyRoot);
        transaction.commit();
    } catch (final Throwable e) {
        // error handling redacted for brevity
    } finally {
        entityManager.close(); …
Run Code Online (Sandbox Code Playgroud)

java performance hibernate jpa transactions

2
推荐指数
1
解决办法
4592
查看次数

超出“比较”文件夹,“比较”显示没有差异的文件

我正在使用Beyond Compare 4(64位版本,版本4.1.5,内部版本21031)。这对我来说是一个新应用。

我想比较两个文件夹(当前源代码树与先前版本)。除了查看单个差异之外,我还想知道哪些文件已更改。

我选择了“查看”->“忽略不重要的差异”。列表中有许多文件以红色显示,好像它们有所不同。但是,当我查看文件上的实际差异时,它显示没有区别。(它在左上角显示一个“ +”,文字为“ 110过滤线”。)

实际上,看起来每个文件似乎都以红色显示在列表视图中。(我假设红色表示存在差异。)

我还尝试通过会话->文本比较报告创建报告。...它显示在顶部的“模式:差异”和“忽略不重要”,但它列出了看起来像所有文件的文件。

如果重要的话,这些文件是.java文件。

如何查看仅具有重要差异的那些文件的列表?

beyondcompare beyondcompare4

2
推荐指数
1
解决办法
1920
查看次数