IT分销/经销数据库

select syscat.tables 很慢的一个摄取量

dblook 导出表结构很慢,很慢
查看了 执行了的sql,这个sql执行了  几百次,感觉上 导出一张表,就执行下面的sql一次
怀疑是下面这个sql执行的:
DECLARE THIS_TABLE_ALIAS CURSOR FOR            
with iv (tabname, tabschema, base_tabname, base_tabschema, remarks,create_time, definer) as
     ((SELECT  tabname, tabschema, base_tabname, base_tabschema, remarks,create_time, definer
                   FROM    SYSCAT.TABLES              
                   WHERE   type = 'A' and   base_tabname = :H00005   
                   and                      base_tabschema = :H00007 )      
     union all              
     (select st.tabname, st.tabschema, st.base_tabname, st.base_tabschema, st.remarks,st.create_time, st.definer
                   from iv,  SYSCAT.TABLES st              
                   where iv.tabname = st.base_tabname and  iv.tabschema = st.base_tabschema and  st.type = 'A'))        
select tabname,
tabschema,
base_tabname,
base_tabschema,
remarks,
create_time,
definer
from iv
ORDER BY tabschema, tabname FOR READ ONLY



我执行了一下这个sql的部分
Statement:
  DECLARE C1 CURSOR
  FOR
     SELECT tabname, tabschema, base_tabname, base_tabschema, remarks,
             create_time, definer
     FROM SYSCAT.TABLES
     WHERE type ='A' and base_tabname ='a' and base_tabschema ='a'

Section Code Page = 1208
Estimated Cost = 56141.507812              --这么高的cost
Estimated Cardinality = 0.000000
(    2) Access Table Name = SYSIBM.SYSTABLES  ID = 0,5
        |  Index Scan:  Name = SYSIBM.INDTABLES09  ID = 9
        |  |  Regular Index (Not Clustered)
        |  |  Index Columns:
        |  |  |  1: AUDITPOLICYID (Ascending)
        |  #Columns = 7
        |  Evaluate Block/Data Predicates Before Locking Committed Row
        |  Evaluate Predicates Before Locking for Committed Key
        |  #Key Columns = 0
        |  |  Start Key: Beginning of Index
        |  |  Stop Key: End of Index
        |  Data Prefetch: Eligible 3506
        |  Index Prefetch: Eligible 3506
        |  Lock Intents
        |  |  Table: Intent Share
        |  |  Row  : Next Key Share
        |  Sargable Predicate(s)
        |  |  #Predicates = 3
(    1) |  |  Return Data to Application
        |  |  |  #Columns = 7
(    1) Return Data Completion
End of section

Optimizer Plan:
            Rows   
          Operator
            (ID)   
            Cost   
                    
        3.27867e-10
            n/a     
          RETURN   
           ( 1)     
          56141.5   
            |      
        3.27867e-10
            n/a     
           FETCH   
           ( 2)     
          56141.5   
       /           
    55226       55226   
     n/a         n/a   
   IXSCAN     Table:   
    ( 3)      SYSIBM   
   395.307    SYSTABLES
     |      
      1      
Index:      
SYSIBM      
INDTABLES09


导出很慢很慢,想这个sql 这么优化呢?

附件:

附件图标db2trc.part01.rar (8.58 MB)

附件图标db2trc.part02.rar (8.58 MB)

附件图标db2trc.part02.rar (8.58 MB)

附件图标db2trc.part03.rar (5.65 MB)

附件图标db2support.zip (1.4 MB)

附件图标db2batch.sql (88.24 KB)

附件图标db2support.zip (1.36 MB)

参与87

86同行回答

wangzhonnewwangzhonnew软件工程师IBM Canada Ltd.
没有明确business case,只是理论上存在的性能问题是不会被作为APAR处理的。除非有明确的business case证明这部分的设计对业务造成重要影响,并且没有workaround(就算加大bufferpool也不能满足性能需求)才值得考虑是否应当建立新的索引(或者重新设计这部分的查询)。至少到现在我...显示全部
没有明确business case,只是理论上存在的性能问题是不会被作为APAR处理的。
除非有明确的business case证明这部分的设计对业务造成重要影响,并且没有workaround(就算加大bufferpool也不能满足性能需求)才值得考虑是否应当建立新的索引(或者重新设计这部分的查询)。至少到现在我没有见到有用户说要经常运行db2look,然后这部分的性能达不到需求的。一般来说db2look就跑一次,快点慢点不是很重要,不值得为这个部分单独创建一个索引收起
IT分销/经销 · 2011-07-06
浏览1778
wangzhonnewwangzhonnew软件工程师IBM Canada Ltd.
扫N次也不会很慢~~~ 至今没有听说过有人在生产系统抱怨这里的性能有问题,就算是SAP用户也没有(不过SAP也没人去db2look它)。显示全部
扫N次也不会很慢~~~ 至今没有听说过有人在生产系统抱怨这里的性能有问题,就算是SAP用户也没有(不过SAP也没人去db2look它)。收起
IT分销/经销 · 2011-07-06
浏览1821
wangzhonnewwangzhonnew软件工程师IBM Canada Ltd.
不会,只要bufferpool够大能够把sysibm.systables放进去,一次tablescan也会很快的就算是比较夸张的SAP系统也不会有那么多的表,运行一天也跑不完的显示全部
不会,只要bufferpool够大能够把sysibm.systables放进去,一次tablescan也会很快的
就算是比较夸张的SAP系统也不会有那么多的表,运行一天也跑不完的收起
IT分销/经销 · 2011-07-06
浏览448
wangzhonnewwangzhonnew软件工程师IBM Canada Ltd.
alias的schema不一定必须和表的schema一样啊CREATE ALIAS HEDGES.A1 FOR MCKNIGHT.T1显示全部
alias的schema不一定必须和表的schema一样啊
CREATE ALIAS HEDGES.A1 FOR MCKNIGHT.T1收起
IT分销/经销 · 2011-07-06
浏览495
nowhillnowhill系统工程师
不是bug,如果指定了-a,那就直接把所有的alias都导出来就行,如果没有指定-a,就需要针对特定的表导出相应 ...wangzhonnew 发表于 2011-7-6 09:25     如你所说, 如果我指定 -z  ,那么为什么不 把整个模式的  alias 一起倒出来呢?...显示全部
不是bug,如果指定了-a,那就直接把所有的alias都导出来就行,如果没有指定-a,就需要针对特定的表导出相应 ...
wangzhonnew 发表于 2011-7-6 09:25



    如你所说, 如果我指定 -z  ,那么为什么不 把整个模式的  alias 一起倒出来呢?收起
IT分销/经销 · 2011-07-06
浏览545
wangzhonnewwangzhonnew软件工程师IBM Canada Ltd.
不是bug,如果指定了-a,那就直接把所有的alias都导出来就行,如果没有指定-a,就需要针对特定的表导出相应的alias,因此需要对各个表执行一次显示全部
不是bug,如果指定了-a,那就直接把所有的alias都导出来就行,如果没有指定-a,就需要针对特定的表导出相应的alias,因此需要对各个表执行一次收起
IT分销/经销 · 2011-07-06
浏览548
nowhillnowhill系统工程师
只是要你证实一下:db2look 导出一个schema, 应该比导出N个所有schema快 (v9前是这样)你的情况正好相反 ...drdb2 发表于 2011-7-5 23:27     测试了一下 ,如你所说,我到了一会儿,  那个sql的执行次数居然一次也没有增加,看来 是bug居多了...显示全部
只是要你证实一下:
db2look 导出一个schema, 应该比导出N个所有schema快 (v9前是这样)
你的情况正好相反 ...
drdb2 发表于 2011-7-5 23:27



    测试了一下 ,如你所说,我到了一会儿,  那个sql的执行次数居然一次也没有增加,看来 是bug居多了收起
IT分销/经销 · 2011-07-06
浏览447
nowhillnowhill系统工程师
我这里有很多 schema ,这个方法不适用 ^_^显示全部
我这里有很多 schema ,这个方法不适用 ^_^收起
IT分销/经销 · 2011-07-05
浏览462
nowhillnowhill系统工程师
-a: Generate statistics for all creators这个是导出数据库用的?显示全部
-a: Generate statistics for all creators
这个是导出数据库用的?收起
IT分销/经销 · 2011-07-05
浏览466
nowhillnowhill系统工程师
格式化了一下  刚才那个实在是太难看了-- 导入导出 过程[root@localhost ~]# date2011年 07月 05日 星期二 08:56:18 CST[root@localhost ~]# db2look -d suzhou -i l_sz_v15 -w afcapp -e -z l_sz_v15 -o /home/db2inst1/dbbackup/l_sz_v15_test.sql-- No use...显示全部
格式化了一下  刚才那个实在是太难看了


-- 导入导出 过程

[root@localhost ~]# date
2011年 07月 05日 星期二 08:56:18 CST
[root@localhost ~]# db2look -d suzhou -i l_sz_v15 -w afcapp -e -z l_sz_v15 -o /home/db2inst1/dbbackup/l_sz_v15_test.sql
-- No userid was specified, db2look tries to use Environment variable USER
-- USER is: ROOT
-- Specified SCHEMA is: L_SZ_V15
-- Creating DDL for table(s)

-- Schema name is ignored for the Federated Section
-- Output is sent to file: /home/db2inst1/dbbackup/l_sz_v15_test.sql
[root@localhost ~]# date
2011年 07月 05日 星期二 08:57:52 CST



--导出前
------------------------------ 输入的命令 ------------------------------
select current_timestamp from sysibm.dual;
select
num_executions  as "总的执行次数",
LAST_METRICS_UPDATE,
STMT_TEXT,
(POOL_DATA_L_READS+POOL_TEMP_DATA_L_READS+POOL_XDA_L_READS+POOL_TEMP_XDA_L_READS+POOL_INDEX_L_READS+POOL_TEMP_INDEX_L_READS)/num_executions as "逻辑读",
(POOL_DATA_P_READS+POOL_TEMP_DATA_P_READS+POOL_XDA_P_READS+POOL_TEMP_XDA_P_READS+POOL_INDEX_P_READS+POOL_TEMP_INDEX_P_READS)/num_executions as "物理读"
from TABLE (MON_GET_PKG_CACHE_STMT(null, null, null, -1)) AS tf
where num_executions>0
and stmt_text LIKE '%DECLARE THIS_TABLE_ALIAS CURSOR FOR%'
and stmt_text not like '%MON_GET_PKG_CACHE_STMT%'
order by QUERY_COST_ESTIMATE/num_executions desc;

select current_timestamp from sysibm.dual;
------------------------------------------------------------------------------
select current_timestamp from sysibm.dual

1                        
--------------------------
2011-07-05-08.56.10.231731

  1 条记录已选择。


select num_executions  as "总的执行次数", LAST_METRICS_UPDATE, STMT_TEXT, (POOL_DATA_L_READS+POOL_TEMP_DATA_L_READS+POOL_XDA_L_READS+POOL_TEMP_XDA_L_READS+POOL_INDEX_L_READS+POOL_TEMP_INDEX_L_READS)/num_executions as "逻辑读", (POOL_DATA_P_READS+POOL_TEMP_DATA_P_READS+POOL_XDA_P_READS+POOL_TEMP_XDA_P_READS+POOL_INDEX_P_READS+POOL_TEMP_INDEX_P_READS)/num_executions as "物理读" from TABLE (MON_GET_PKG_CACHE_STMT(null, null, null, -1)) AS tf where num_executions>0 and stmt_text LIKE '%DECLARE THIS_TABLE_ALIAS CURSOR FOR%' and stmt_text not like '%MON_GET_PKG_CACHE_STMT%' order by QUERY_COST_ESTIMATE/num_executions desc

总的执行次数         LAST_METRICS_UPDATE                        
13020            2011-07-05-08.54.32.638919   
STMT_TEXT
DECLARE THIS_TABLE_ALIAS CURSOR FOR
            with iv (tabname, tabschema, base_tabname, base_tabschema, remarks,
create_time, definer) as
((SELECT  tabname, tabschema, base_tabname, base_tabschema, remarks,
                      create_time, definer            
                       FROM    SYSCAT.TABLES              WHERE   type = 'A' and
                                             base_tabname = :H00005       :H00004         
and                      base_tabschema = :H00007          :H00006             )  
union all        
(select st.tabname, st.tabschema, st.base_tabname, st.base_tabschema, st.remarks,
                     st.create_time, st.definer              from iv,  SYSCAT.TABLES st
where iv.tabname = st.base_tabname and                    iv.tabschema = st.base_tabschema and
                   st.type = 'A'))            select tabname, tabschema, base_tabname, base_tabschema, remarks, create_time, definer
                               from iv            ORDER BY tabschema, tabname FOR READ ONLY  
逻辑读               物理读                                                              
10103                    0

  1 条记录已选择。


select current_timestamp from sysibm.dual

1                        
--------------------------
2011-07-05-08.56.10.571164

  1 条记录已选择。


--导出后

------------------------------ 输入的命令 ------------------------------
select current_timestamp from sysibm.dual;
select
num_executions  as "总的执行次数",
LAST_METRICS_UPDATE,
STMT_TEXT,
(POOL_DATA_L_READS+POOL_TEMP_DATA_L_READS+POOL_XDA_L_READS+POOL_TEMP_XDA_L_READS+POOL_INDEX_L_READS+POOL_TEMP_INDEX_L_READS)/num_executions as "逻辑读",
(POOL_DATA_P_READS+POOL_TEMP_DATA_P_READS+POOL_XDA_P_READS+POOL_TEMP_XDA_P_READS+POOL_INDEX_P_READS+POOL_TEMP_INDEX_P_READS)/num_executions as "物理读"
from TABLE (MON_GET_PKG_CACHE_STMT(null, null, null, -1)) AS tf
where num_executions>0
and stmt_text LIKE '%DECLARE THIS_TABLE_ALIAS CURSOR FOR%'
and stmt_text not like '%MON_GET_PKG_CACHE_STMT%'
order by QUERY_COST_ESTIMATE/num_executions desc;

select current_timestamp from sysibm.dual;
------------------------------------------------------------------------------
select current_timestamp from sysibm.dual

1                        
--------------------------
2011-07-05-08.57.59.949177

  1 条记录已选择。


select num_executions  as "总的执行次数", LAST_METRICS_UPDATE, STMT_TEXT, (POOL_DATA_L_READS+POOL_TEMP_DATA_L_READS+POOL_XDA_L_READS+POOL_TEMP_XDA_L_READS+POOL_INDEX_L_READS+POOL_TEMP_INDEX_L_READS)/num_executions as "逻辑读", (POOL_DATA_P_READS+POOL_TEMP_DATA_P_READS+POOL_XDA_P_READS+POOL_TEMP_XDA_P_READS+POOL_INDEX_P_READS+POOL_TEMP_INDEX_P_READS)/num_executions as "物理读" from TABLE (MON_GET_PKG_CACHE_STMT(null, null, null, -1)) AS tf where num_executions>0 and stmt_text LIKE '%DECLARE THIS_TABLE_ALIAS CURSOR FOR%' and stmt_text not like '%MON_GET_PKG_CACHE_STMT%' order by QUERY_COST_ESTIMATE/num_executions desc

总的执行次数         LAST_METRICS_UPDATE                                
14667               2011-07-05-08.57.47.128307
STMT_TEXT
DECLARE THIS_TABLE_ALIAS CURSOR FOR            
with iv (tabname, tabschema, base_tabname, base_tabschema, remarks,                     c
reate_time, definer) as            ((SELECT  tabname, tabschema, base_tabname, base_tabschema, remarks,         
             create_time, definer              FROM    SYSCAT.TABLES              WHERE   type = 'A' and   
                                base_tabname = :H00005       :H00004           and                    
                                  base_tabschema = :H00007          :H00006             )            
                                    union all              (select st.tabname, st.tabschema, st.base_tabname, st.base_tabschema, st.remarks,
                                                          st.create_time, st.definer              from iv,  SYSCAT.TABLES st   
                                                                     where iv.tabname = st.base_tabname and
                                                                                        iv.tabschema = st.base_tabschema and
                                                                                                            st.type = 'A'))

select tabname, tabschema, base_tabname, base_tabschema, remarks, create_time, definer           
  from iv            ORDER BY tabschema, tabname FOR READ ONLY                  

逻辑读               物理读  
10103                    0

  1 条记录已选择。


select current_timestamp from sysibm.dual

1                        
--------------------------
2011-07-05-08.58.00.533372

  1 条记录已选择。



14667-13020=1647 次


select count(*) from syscat.tables where tabschema='L_SZ_V15' and type='T'

1         
-----------
       1645

  1 条记录已选择。
  
  
1645 张表  执行了  1647次 ,所有 我怀疑 导出一张表,就执行一次这个sql收起
IT分销/经销 · 2011-07-05
浏览497

提问者

nowhill
系统工程师

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2011-06-27
  • 关注会员:1 人
  • 问题浏览:39636
  • 最近回答:2011-07-07
  • X社区推广