暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库海量数据插入优化

原创 bxf3000 2022-06-30
7365

1、目标需求

1. 单表1亿条(包含10个列,字段包含int、varchar、date等常用类型)

2. 多表10亿条(10个1亿的表)

3. 写入方式不限


2、方案原理

1.  for in 循环,实现自动循环插入数据。

2.  insert /*+ append */ into,提升了数据插入效率。

    Append使用时注意以下3点:

    a. 非归档模式下,只需append就能大量减少redo的产生;

    b. 归档模式下,只有append+nologging才能大量减少redo。

    c. insert /*+ append */ 直接路径加载,从HWM的位置开始插入,速度比常规加载方式更效率。

3.  通过备份还原的方式实现多表10亿条数据。

4.  通过对单表的1次备份多次还原实现多表10亿条数据。


3、单表1亿条数据的操作步骤

1、查看数据库当前归档模式。

备注:归档模式和非归档模式都可以。


2、创建测试表TEST_01。

-- CREATE TABLE

CREATE TABLE TEST_01

(

"序号" INT,

"姓名" VARCHAR(20),

"工号" CHAR(8),

"性别" CHAR(2),

"年龄" CHAR(3),

"部门" VARCHAR(40),

"工资" DEC(8,2),

"工作地点" VARCHAR(20),

"建档时间" DATE,

"备注" TEXT

);


3、创建用于提供序列号的表T_SEQ。

--创建一个临时表,用于在循环插入数据时提供序列号

CREATE GLOBAL TEMPORARY table T_SEQ(SEQ NUMBER(10) NOT NULL)ON COMMIT PRESERVE ROWS;


4、向TEST_01中插入数据。

--开始插入数据

BEGIN

DELETE FROM T_SEQ;

FOR I IN 1..1000000 LOOP

INSERT INTO T_SEQ(SEQ) VALUES(I);

END LOOP;

FOR I IN 1..100 LOOP

INSERT /*+ APPEND */ INTO TEST_01

SELECT SEQ,'张三', 10001, '男', 38, '销售部', 8000, '武汉', SYSDATE, NULL FROM T_SEQ;

COMMIT;

END LOOP;

END;

/

插入操作耗时:42分200毫秒。


5、验证数据条数。


4、多表10亿条的操作步骤

1、创建10张空表,表结构与TEST_0相同。

CREATE TABLE TEST_02 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_03 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_04 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_05 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_06 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_07 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_08 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_09 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_10 AS SELECT * FROM TEST_01 WHERE 2=1;

CREATE TABLE TEST_11 AS SELECT * FROM TEST_01 WHERE 2=1;

以上操作耗时趋近于0。


2、备份表TEST_01。

BACKUP TABLE "TEST_01" TO "TAB_TEST_01_BAK";

备份耗时:12分21秒558毫秒。


3、将TEST_01的备份集还原到TEST_02至TEST_11这10张表中。

restore table "TEST_02" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_03" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_04" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_05" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_06" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_07" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_08" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_09" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_10" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

restore table "TEST_11" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;

每张表还原耗时:11分57秒。

完成10张1亿条数据表的还原,总共耗时约2小时。


4、验证数据条数。



社区地址:https://eco.dameng.com

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论