我有一个5亿行的表格(并且还在不断增长)
我做了以下事情来提高插入的性能:
在数据库方面:
- 删除所有索引和约束
- 禁用日志记录
在应用程序方面:
- 从JPA管理的实体切换到本机插入查询,向查询添加了APPEND Oracle提示
- 尝试每1k / 2k / 3k行批量提交
- 尝试并行写入(多线程,线程数=服务器上的核心数)到一张表
这使我每秒大约300行
另外尝试:
- 批量并行写入多个表(使用UNION分组然后返回结果)
这使我每秒大约有1000行,但在空表上。但是,当我用虚拟数据(每个200百万个)填充表时,插入速度下降到每秒250-300个。
有人可以建议我做些什么来加快插入速度吗?基本上,我想首先了解瓶颈(可能是什么)。
UPD: 表格按插入日期进行分区,表格约有60列-大多数列为VARCHAR2(2000 BYTE)
/*+APPEND*/
在单行插入中,提示将被忽略(如果没有,则INSERT INTO ... SELECT
不必对append进行打扰)。(3)您应该设置一个SQL * Loader示例,direct=true
以按照@parsifal的建议建立基线。