您的位置:程序门 -> db2 -> 基础类



db2数据库性能问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


db2数据库性能问题[无满意答案结贴,结贴人:liudaqin]
发表于:2007-06-06 19:37:27 楼主
db2数据库服务器:   ibm   p570,aix系统,   4个cpu,   8g   ram。
db2数据库客户端:   ibm   工作站,xp系统,p4   3.0,   1g   ram。

数据库配置如下:
  数据库   hh   的数据库配置

  数据库配置发行版级别                                         =   0x0a00
  数据库发行版级别                                                                     =   0x0a00

  数据库领域                                                                             =   us
  数据库代码页                                                                             =   819
  数据库代码集                                                                               =   iso8859-1
  数据库国家/地区代码                                                         =   1

  动态   sql   查询管理                       (dyn_query_mgmt)   =   disable

  对此数据库的   discovery   支持               (discover_db)   =   enable

  缺省查询优化类                   (dft_queryopt)   =   5
  并行度                                             (dft_degree)   =   1
  在算术异常时继续       (dft_sqlmathwarn)   =   no
  缺省刷新有效期                                       (dft_refresh_age)   =   0
  保留的高频值的数目           (num_freqvalues)   =   10
  保留的分位点数目                         (num_quantiles)   =   20

  备份暂挂                                                                                     =   no

  数据库是一致的                                                                     =   no
  前滚暂挂                                                                           =   no
  复原暂挂                                                                                   =   no

  启用的多页文件分配                                                                             =   no

  恢复状态的日志保留                                                     =   no
  记录状态的用户出口                                                         =   no

  data   links   标记失效时间间隔(秒)             (dl_expint)   =   60
  data   links   写标记初始时间间隔   (dl_wt_iexpint)   =   60
  副本的   data   links   数目                           (dl_num_copies)   =   1
  删除后的   data   links   时间(天数)                 (dl_time_drop)   =   1
  大写的   data   links   标记                                 (dl_upper)   =   no
  data   links   标记算法                                                       (dl_token)   =   mac0

  数据库堆(4kb)                                                         (dbheap)   =   2000
  数据库共享内存大小(4kb)     (database_memory)   =   automatic
  目录高速缓存大小(4kb)                             (catalogcache_sz)   =   (maxappls*4)
  日志缓冲区大小(4kb)                                                 (logbufsz)   =   50
  实用程序堆大小(4kb)                                         (util_heap_sz)   =   5000
  缓冲池大小(页)                                           (buffpage)   =   12000
  扩充存储段大小(4kb)         (estore_seg_sz)   =   16000
  扩充存储段的数目       (num_estore_segs)   =   0
  锁列表的最大存储量(4kb)                             (locklist)   =   1500

  应用程序组内存集的最大大小(4kb)(appgroup_mem_sz)   =   30000
  应用程序组堆的内存百分比     (groupheap_ratio)   =   70
  最大应用程序控制堆大小(4kb)           (app_ctl_heap_sz)   =   128

  共享排序的排序堆域值(4kb)   (sheapthres_shr)   =   (sheapthres)
  排序列表堆(4kb)                                                   (sortheap)   =   256
  sql   语句堆(4kb)                                           (stmtheap)   =   2048
  缺省应用程序堆(4kb)                           (applheapsz)   =   256
  程序包高速缓存大小(4kb)                                       (pckcachesz)   =   (maxappls*8)
  统计信息堆大小(4kb)                               (stat_heap_sz)   =   4384

  检查死锁的时间间隔(ms)                   (dlchktime)   =   10000
  每个应用程序的锁定百分比列表                                   (maxlocks)   =   30
  锁定超时(秒)                                                 (locktimeout)   =   2000

  更改的页阈值                               (chngpgs_thresh)   =   60
  异步页清除程序的数目       (num_iocleaners)   =   4
  i/o   服务器的数目                                       (num_ioservers)   =   3
  索引排序标志                                                           (indexsort)   =   yes
  顺序检测标志                                             (seqdetect)   =   yes
  缺省预取大小(页)                   (dft_prefetch_sz)   =   32

  跟踪修改的页数                                                   (trackmod)   =   off

  容器的缺省数目                                                                                     =   1
  缺省表空间数据块大小(页)       (dft_extent_sz)   =   32

  活动应用程序的最大数目                                               (maxappls)   =   300
  活动应用程序的平均数目               (avg_appls)   =   6
  每个应用程序的最大打开   db   文件数                           (maxfilop)   =   64

  日志文件大小(4kb)                                                   (logfilsiz)   =   3000
  主日志文件的数目                                 (logprimary)   =   6
  辅助日志文件的数目                               (logsecond)   =   4
  已更改的至日志文件的路径                                       (newlogpath)   =
  日志文件路径                                                                                         =   /db2inst_hh/container
/hh/node0000/sql00001/sqlogdir/
  溢出日志路径                                           (overflowlogpath)   =
  镜像日志路径                                                   (mirrorlogpath)   =
  第一活动日志文件                                                                                 =
  磁盘上已满的块日志                                 (blk_log_dsk_ful)   =   no
  事务使用的最大活动日志空间的百分比(max_log)   =   0
  1   个活动   uow   的活动日志文件的数目   (num_log_span)   =   0

  组落实计数                                                                     (mincommit)   =   1
  软检查点前回收的日志文件的百分比   (softmax)   =   100
  启用的恢复的日志保留                           (logretain)   =   off
  启用的记录的用户出口                                 (userexit)   =   off

  启用的自动重新启动                                             (autorestart)   =   on
  索引重新创建时间                                               (indexrec)   =   system   (access)
  loadrec   会话的缺省数目         (dft_loadrec_ses)   =   1
  要保留的数据库备份的数目       (num_db_backups)   =   12
  恢复历史记录保留(天数)           (rec_his_retentn)   =   366

  tsm   管理类                                       (tsm_mgmtclass)   =
  tsm   节点名                                                         (tsm_nodename)   =
  tsm   所有者                                                                       (tsm_owner)   =
  tsm   密码                                                           (tsm_password)   =

发现应用程序在客户端访问数据库(select,   update,   insert)比较慢,以select的为例。
line表中有142条记录,全部满足查询条件,point表中有1693条记录,line表中的记录和point表中的记录是一对多关系。line表中的主键为id,point表中的主键为id和序号。查询操作是首先把line表中的所有记录读出来,然后根据id从point表中读出所有line对应的所有point。整个操作平均耗时5600   ms,其中第一步耗时1350   ms,第二步耗时4250   ms。比较慢。

敬请指点,致谢。
发表于:2007-06-07 08:56:581楼 得分:0
贴出你的sql
发表于:2007-06-07 20:11:162楼 得分:0
arraylist   tlist   =   new   arraylist();

//   从数据库中读出线记录信息
string   strcmd     =   "select   trainlineid,   starttime,   flags   from   hh_line   where   dm   =   ' "  
+   map.m_ddt.dm   +   " '   order   by   starttime ";
dbdatareader   dbreader   =   map.dbo.db_EXECutereader(strcmd);
if   (dbreader   ==   null)  
      return;

while   (dbreader.read())
{
            line   line   =   new   tdx(map);
            line.tdxid =   (int)dbreader.getdecimal(0);
            line.starttime =   dbreader.getdatetime(1);

            line(dbreader.isdbnull(2))  
                    line.termpointtype   =   trainlinetermpointtype.deliver   ¦          
                                                      trainlinetermpointtype.surrender;
            else  
                    line.termpointtype   =   (trainlinetermpointtype)(int32)dbreader.getdecimal(2);

            line.tdxpoints                 =   new   arraylist();
            line.etrainkind               =   trainkindtype.hwlc;
            line.etraindirecttype   =   trainlinedirecttype.xx;

            tlist.add(line);
}
dbreader.close();

foreach   (line   line   in   tlist)
{
        //   从库中取出该线上的点信息
        strcmd   =   "select   xbid,   stationname,   timeoffset,   "   +  
"   cc   from   hh_point   where   trainlineid   =   "   +   line.tdxid   +   "   order   by   no ";

        dbreader   =   map.dbo.db_EXECutereader(strcmd);
        if   (dbreader   ==   null)  
return;

        while   (dbreader.read())
        {
                  point   point   =   new   tdxpoint();
point.tdxid                 =   line.tdxid;
point.xbid =   (int32)dbreader.getdecimal(0);
point.stationname =   dbreader.getstring(1);
point.timeoffset =   (int32)dbreader.getdecimal(2);
point.strcc =   dbreader.getstring(3);

line.points.add(tp);

//   当是线上第一点时
if   (line.points.count   ==   1)
{
line.etrainkind   =   trainkindinfo.gettrainkind(point.strcc);  
line.etraindirecttype   =   trainline.getdirectfromcc(point.strcc);
}
}
dbreader.close();


注: 我这种操作方式在oracle下非常是非常快的.
发表于:2007-07-02 16:12:293楼 得分:0
该回复于2007-12-29 16:26:41被管理员或版主删除


快速检索

最新资讯