在进行数据库迁移、数据库表备份、表重建以及批量数据加载时,我们经常希望数据
处理过程能更快点。特别是在 DBA 在线进行表重建的过程中,要求重建时间窗口最少。
这里将介绍如何在不同的场景下选择合适的 GBase 8s 数据加载工具,以及如何合理地使用
这些工具。
unload/load
unload/load 是最常使用的最简单的数据导入、导出工具,支持的数据格式为以固定分
隔符(如“|”为默认的分隔符)分隔的文本文件。
unload 数据导出
使用方法如下:
UNLOAD TO 'filename' [DELIMITER 'delimiter'] SELECT Statement
其中 filename 可以为全路径或者相对路径文件名;DELIMITER 选项,定义数据列分
隔符,默认为“|”;SELECT 项为 SQL 子句,可以是任何形式的 SQL 语句,这一特征也是 unload 工具的优势,我们可以利用 unload 导出任意 SQL 语句执行的返回结果到文本文件中。
以下例子为使用 unload 进行数据导出:
unload to '/data/t_customer0.unl' select * from t_customer
可以通过提高抽取数据的 SQL 语句的执行性能来提高 unload 导出数据的性能。对于包含过滤条件等较为复杂的 SQL 语句,我们可以通过查看其执行计划,确定是否需要进行优化。如果导出数据较大,则在可以利用 PDQ 的情况下,设置 PDQ 的优先级,多线程并发执行 SELECT,以加快 SQL 的执行速度。另外,我们通常使用 Light Scan 来提高速度。
load 数据导入
Load 是一种快速而简单的数据导入工具
Load From 'filename' Delimiter 'delimiter'
Insert Into Tablename/SynonymName/ViewName(column);
其中 delimiter 定义分隔符,默认为“|”。另外,可以根据数据文件格式指定相应的字段信息。
以下例子为使用 load 进行数据导入:
Load from '/opt/data.unl' insert into tab1;
Load from './data.unl' insert into tabl(c1,c2,c3);
Load from '/opt/data.unl' Delimiter '|' Insert into tab1;
如何提高 load 数据导入的速度?若要导入较大数量的数据(例如导入 100 万记录),则一般可以通过取消表的日志、临时使索引失效及 PDQ 三种途径,其本质上都加速了 insert记录的性能。
通过语句 alter table tabname type(raw)将表的日志取消,使得在数据导入的过程中,对表的 DML 语句不再记录日志,以获取较高的性能改善。在导入完成后,可以通过语句alter
table tabname type(standard)修改为标准的模式。
暂时取消索引,可以在导入过程中减少索引变化所带来的开销,一般只在导入记录非常大或者重建表的过程中考虑。
另外,对于分片表,可以通过设置 PDQ 来提高并行处理能力以及导入性能。