联合体insert性能疑问

现有情况为A库及B库互相做联合体insert语句如下,数据量约400W+:INSERT INTO EC_CUST_CGT_LMT_TEST (ORG_CODE,CUST_CODE,CGT_CODE,QTY_LMT,NOTE,UP_TIME)  SELECT COM_ID,CUST_ID,ITEM_ID,LMT_QTY,NOTE,'2014-02-11 16:35:02'    FROM SRM_XSM_CUST_IT...显示全部
现有情况为A库及B库互相做联合体insert语句如下,数据量约400W+:
INSERT INTO EC_CUST_CGT_LMT_TEST (ORG_CODE,CUST_CODE,CGT_CODE,QTY_LMT,NOTE,UP_TIME)
  SELECT COM_ID,CUST_ID,ITEM_ID,LMT_QTY,NOTE,'2014-02-11 16:35:02'
    FROM SRM_XSM_CUST_ITEM_LMT
    WHERE COM_ID='11230101'


其中SRM_XSM_CUST_ITEM_LMT表在A库,EC_CUST_CGT_LMT_TEST 表在B库
该SQL在A库执行需要大约18分钟,在B库执行仅需要2-3分钟,请问下解决思路?程序是写在A库执行的,有什么办法可以优化吗?附件附上A库及B库的访问计划,请教各位大神,谢谢!

附件:

附件图标lmt_A.out (6.54 KB)

附件图标lmt_B.out (7.97 KB)

附件图标limit_A_test1.out (7.1 KB)

收起
参与22

查看其它 19 个回答fengwhq的回答

fengwhqfengwhq数据库管理员某城商行
回复 12# zhenda


   2台机器物理配置一样的,缓冲池参数SRM_XSM_CUST_ITEM_LMT表所在表空间使用的缓冲池大小为480M,EC_CUST_CGT_LMT_TEST 表所在表空间使用的缓冲池大小为240M,B库中EC_CUST_CGT_LMT_TEST 表是我参考生产表创建的测试表,插入的时候该表是空表,该表没runstats,但是生产表runstats了,是否runstats测试好像没什么影响。

   另外SQL快照,A机器如下:
Number of executions               = 1
Number of compilations             = 1
Worst preparation time (ms)        = 3
Best preparation time (ms)         = 3
Internal rows deleted              = 0
Internal rows inserted             = 0
Rows read                          = 6308346
Internal rows updated              = 0
Rows written                       = 0
Statement sorts                    = 0
Statement sort overflows           = 0
Total sort time                    = 0
Buffer pool data logical reads     = 156042
Buffer pool data physical reads    = 10
Buffer pool temporary data logical reads   = 0
Buffer pool temporary data physical reads  = 0
Buffer pool index logical reads    = 0
Buffer pool index physical reads   = 0
Buffer pool temporary index logical reads  = 0
Buffer pool temporary index physical reads = 0
Buffer pool xda logical reads      = 0
Buffer pool xda physical reads     = 0
Buffer pool temporary xda logical reads    = 0
Buffer pool temporary xda physical reads   = 0
Total execution time (sec.microsec)= 1041.804537
Total user cpu time (sec.microsec) = 82.227238
Total system cpu time (sec.microsec)= 59.639625
Total statistic fabrication time (milliseconds) = 0
Total synchronous runstats time  (milliseconds) = 0
Statement text                     = insert INTO EC_CUST_CGT_LMT_TEST (ORG_CODE,CUST_CODE,CGT_CODE,QTY_LMT,NOTE,UP_TIME)    SELECT COM_ID,CUST_ID,ITEM_ID,LMT_QTY,NOTE,'2014-02-11 16:35:02'      FROM SRM_XSM_CUST_ITEM_LMT      WHERE COM_ID='11230101'



B机器抓快照报私有内存不足,还没找到怎么解决,报错及db2diag.log如下,麻烦看下是什么原因呢?
$ db2 get snapshot for dynamic sql on xsmec
SQL0083C  A memory allocation error has occurred.



2014-02-20-15.44.03.185970+480 E331230024A1156    LEVEL: Error (OS)
PID     : 1016682              TID  : 1           PROC : db2bp
INSTANCE: db2inst3             NODE : 000
EDUID   : 1
FUNCTION: DB2 UDB, SQO Memory Management, sqloLogMemoryCondition, probe:100
CALLED  : OS, -, malloc
OSERR   : ENOMEM (12) "There is not enough memory available now."
MESSAGE : Private memory and/or virtual address space exhausted, or data ulimit
          exceeded
DATA #1 : Soft data resource limit, PD_TYPE_RLIM_DATA_CUR, 8 bytes
134217728
DATA #2 : Requested size, PD_TYPE_MEM_REQUESTED_SIZE, 8 bytes
269815808
DATA #3 : Current set size, PD_TYPE_SET_SIZE, 8 bytes
90963968
CALLSTCK:
  [0] 0x090000000051DD50 sqloLogMemoryCondition + 0x274
  [1] 0x090000000051DA24 sqloLogMemoryCondition@glue30B + 0x78
  [2] 0x090000000062479C sqlogmblkEx + 0x11C
  [3] 0x0900000000BEA954 sqloMemBlockReallocate + 0x100
  [4] 0x00000001000F0834 clpbp_exe_sqlmonss__Fv + 0x394
  [5] 0x00000001000015F0 clp_bp_con__Fv + 0x630
  [6] 0x0000000100000A78 main + 0x1F8
  [7] 0x0000000100000320 __start + 0x98
  [8] 0x0000000000000000 ?unknown + 0x0
  [9] 0x0000000000000000 ?unknown + 0x0

2014-02-20-15.44.03.187008+480 E331231181A561     LEVEL: Warning
PID     : 1016682              TID  : 1           PROC : db2bp
INSTANCE: db2inst3             NODE : 000
EDUID   : 1
FUNCTION: DB2 UDB, SQO Memory Management, sqloMemLogPoolConditions, probe:30
DATA #1 :
Out of memory failure for Private Heap.
Requested block size           : 269774247 bytes.
Physical heap size             : 90505216 bytes.
Configured heap size           : 1099511627776 bytes.
Unreserved memory used by heap : 0 bytes.
Unreserved memory left in set  : 0 bytes.




$ ulimit -a
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         131072
stack(kbytes)        32768
memory(kbytes)       32768
coredump(blocks)     2097151
nofiles(descriptors) 2000


是否需要增大data的limits?
银行 · 2014-02-20
浏览1080

回答者

fengwhq
数据库管理员某城商行

fengwhq 最近回答过的问题

回答状态

  • 发布时间:2014-02-20
  • 关注会员:2 人
  • 回答浏览:1080
  • X社区推广