Oracle 12C:截断后,插入脚本会花费太多时间

时间:2019-06-06 13:34:15

标签: sql oracle performance

我们拥有使用Oracle 12C的生产环境。它具有两个实例,并且正在使用Oracle Data Guard在另一台服务器中具有副本。 每次发布新版本时,都必须截断一些没有索引的表,并使用inserts语句执行多个脚本,如下所示:

ALTER TABLE T_I18N DISABLE ALL TRIGGERS;
TRUNCATE TABLE T_I18N;
INSERT INTO T_I18N VALUES ('sp', 'Table 1', '0', 'Tabla 1');
INSERT INTO T_I18N VALUES ('sp', 'Table 2', '0', 'Tabla 2');
INSERT INTO T_I18N VALUES ('sp', 'Table 3', '0', 'Tabla 3');
.
.
ALTER TABLE HIS_I18N ENABLE ALL TRIGGERS;

以前,我们还禁用了所有主键和外键。为了提供更多信息,表结构如下:

CREATE TABLE "T_I18N" 
   ("T_CODE" VARCHAR2(5 BYTE), 
    "T_KEY" VARCHAR2(200 BYTE), 
    "T_C_ID" NUMBER(6,0), 
    "T_VALUE" VARCHAR2(500 BYTE), 
     CONSTRAINT "HIN_PK" PRIMARY KEY ("T_CODE", "T_KEY", "T_C_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TB1"  ENABLE, 
     CONSTRAINT "HIN_CEN_FK" FOREIGN KEY ("T_C_ID")
      REFERENCES "TB1"."T_CEN" ("T_C_ID") ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "TB1";

包含更多Insert语句的脚本大约有20K,执行大约需要12分钟。我认为,这花费了太多时间,所以我采用了另一种方法。我试图删除表,重新创建它,然后执行脚本,只花了40秒。

我一直在Oracle网站上进行搜索,以了解为什么drop / recreate和truncate之间有如此大的差异,但是很遗憾,我找不到任何线索。

非常感谢。任何信息或建议,将不胜感激。

干杯!

0 个答案:

没有答案