关于大数据插入的性能调优

最近碰到一个关于DB2调优的问题,具体程序段如下:LOAD FROM /dev/null of del replace into A ;INSERT INTO A(col1,col2,col3,col4)SELECT B.col1,B.col2,C.col1,C.col2FROM B,CWHERE B.KEY_NO=C.KEY_NOwith ur;其中B表中数据量为3700W,C表中数据量为1900W,B表和C表均建立了K...显示全部
最近碰到一个关于DB2调优的问题,具体程序段如下:
LOAD FROM /dev/null of del replace into A ;

INSERT INTO A(col1,col2,col3,col4)
SELECT B.col1,B.col2,C.col1,C.col2
FROM B,C
WHERE B.KEY_NO=C.KEY_NO
with ur;

其中B表中数据量为3700W,C表中数据量为1900W,B表和C表均建立了KEY_NO相应索引,两表中KEY_NO数据类型一致,A表中也建了部分索引,
B、C表所在表空间的页大小为32K,缓冲池空间足够,日志空间足够。

该语句在非业务时间正常运行时间为40分钟,但是在业务时间运行的话,写入速度很慢,并在数据已插入量达到3000W之后,速度降到100条/s,

db2top 可以看到I/O占用非常小,前台应用连接数据库也不多,但CPU一直很低;查看数据库日志无任何异常。
db2expln 查看程序执行计划,显示两表是通过HSJOIN方式进行全表扫描,并没有使用索引,默认使用散列方式JOIN,不知道是不是因为通过使用该方式读入内存的数据量太大而导致速度变慢。

请问各位大神,有否优化的建议。谢谢!收起
参与24

查看其它 20 个回答ecjtucxj的回答

ecjtucxjecjtucxj软件开发工程师yxyc
回复 3# leo


    您所说的“分块”,是否是将C表中的数据分块,插入N个临时表中(成多个小表),然后分开与B表关联,插入A表中?这个我还真没想过~应该不错!

    A表确实建有索引,因为前台业务使用也会访问该表,后续程序也从该表读取数据,如果在一个作业中先去掉索引,导入数据完成后再重建,做一下runstats,导入数据确实可以提升,非业务时间应该还是可取的,谢谢!
互联网服务 · 2013-03-26
浏览476

回答者

ecjtucxj
软件开发工程师yxyc

ecjtucxj 最近回答过的问题

回答状态

  • 发布时间:2013-03-26
  • 关注会员:3 人
  • 回答浏览:476
  • X社区推广