首页 > 解决方案 > 甲骨文-Java | 在 30 分钟到 1 小时内更新 6000 行| 非主非索引复合键

问题描述

它需要

2021-03-10 15:48:07,593 INFO  [com.ery.integrator.erpcrm.schedular.CustomerTeamsJmsServiceImpl] (EJB default - 2) In CustomerTeamsJmsServiceImpl: ******************************** Batch Processing Started ********************************
2021-03-10 15:48:07,593 INFO  [com.ery.integrator.erpcrm.schedular.CustomerTeamsJmsServiceImpl] (EJB default - 2) In CustomerTeamsJmsServiceImpl: ******************************** Batch No. 22| Total 182| Size:5000 Started ********************************
2021-03-10 16:14:11,227 INFO  [com.ery.integrator.erpcrm.schedular.CustomerTeamsJmsServiceImpl] (EJB default - 2) In CustomerTeamsJmsServiceImpl: ******************************** Batch No.22 Pushed and Flushed ********************************

在我们插入和更新的数据库级别不涉及复合键。

 CREATE TABLE "MDATA"."CUSTOMER_TEAMS" 
   (    "ACCOUNT_REGISTRY_ID" VARCHAR2(30 BYTE), 
    "EDGE_ACCOUNT_ID" VARCHAR2(150 BYTE), 
    "ACCOUNT_OWNER_EMAIL" VARCHAR2(250 BYTE), 
    "CRT_MEMBER_EMAIL" VARCHAR2(250 BYTE), 
    "ROLE_NAME" VARCHAR2(150 BYTE), 
    "SOURCE" VARCHAR2(30 BYTE), 
    "PERSON_PARTY_ID" NUMBER(15,0), 
    "DELETED_IN_TERP" VARCHAR2(30 BYTE), 
    "DELETED_DATE" DATE, 
    "LAST_MODIFIED_DATE" DATE NOT NULL ENABLE
   )

但在 JPA 中,我们在前四列上有复合键。@Id 和更新发生在这四个复合键上

如何对数据库表进行性能调优以使过程快速进行?到目前为止,数据库级别没有主键,也没有索引。请建议

标签: oraclejpacompositedatabase-tuning

解决方案


首先为您的表创建一些约束和索引是一个很好的做法(我会说默认做法)。如果您UPDATE有一个WHERE子句(可能它有),则索引的存在是一个重要因素。

然后你可以考虑以下几点: 在 Oracle 中有一种叫做“批量处理”的东西。如果您在同时选择/插入/更新大量记录时使用它,则操作的性能会好得多。

在谈论 Oracle 的性能时,还需要考虑其他因素:

  • Oracle 版本:例如,Oracle Enterprise 和 Oracle XE 在优化特性方面存在巨大差距。
  • 硬件:硬盘 I/O 速度、CPU 和 RAM 也很重要。

如果您仍然无法获得可接受的时间,您可以尝试更深入地挖掘并为您的会话启用跟踪,以便您可以使用更多数据:使用 Oracle 跟踪


推荐阅读