首页 > 代码库 > 性能问题解决案例01——sybase数据库内存问题

性能问题解决案例01——sybase数据库内存问题

最近湖南现场反馈问题,所有电子签章页面打不开文书(pdf格式),后台日志没报任何错误。

clip_image002

1、首先想到是签章的ocx控件问题,检查ocx控件安装,发现其他电脑也打不开文书,测试页面可以直接打开pdf文档,排除控件的问题。

2、怀疑是文书下载出问题了,检查文书下载功能,我们是把pdf文书下载到本地“我的文档”目录中,然后使用ocx控件打开文书,检查发现有的文书能正常下载到本地,有的干脆不下载,能下载到本地的文书可以正常打开。检查ftp发现文书都没问题,定位问题就出在从ftp下载这块。

3、ftp下载有2步,先去数据库中查询到ccbh,再根据ccbh从ftp下载,检查发现下载没问题,查询ccbh非常慢,最快也要50s才能查询出来,慢的要4、5分钟,有耐心的话,等待几分钟,文书是可以展示,已经定位到问题原因了,查询ccbh的sql执行非常慢。

5、分析sql,简化后sql为:

SELECT * FROM T_ZXLD_SYYH_FJ

WHERE C_BH_SQ=76A1737D773BE344B7154AA479634FED

AND C_FJLX=syyhcx.zz.cxs.gy

查询条件中C_BH_SQ是有索引的,理论上不应该这么慢呀,查看执行计划发现:

clip_image004

竟然没有用到索引,执行时间是274s。有索引却没用到,而且C_BH_SQ这个字段是主表主键,被选中概率应该非常高,怀疑是统计信息出问题了,使用

UPDATE all STATISTICS T_ZXLD_SYYH_FJ

更新统计信息,更新后执行原始sql,用了0.12s,执行计划也显示出使用了索引

clip_image006

问题看似解决了,但是偶尔还会出现打开非常慢(快的10s左右,慢的几分钟)的情况,怎么回事呢?检查过程中发现不仅仅这个页面偶尔慢,很多页面都偶尔非常慢,第一次打开慢,后续就很快了,等一会再打开又慢了。

clip_image008

查看p6spy日志发现(深颜色列是sql执行时间,只记录了执行2s以上的sql),把执行时间长的sql拿出来单独执行,很多第一次执行几十秒,第二次执行不到1s,可以确定问题原因了,系统内存较小。

sybase数据可以使用下面命令查看io情况:SET STATISTICS io ON|OFF

clip_image010

第一次执行结果:

clip_image012

第二次执行结果:

clip_image014

可以看到第一次从磁盘和内存都读取了内容,第二次physical reads是0,完全从内存读取当然查询快了,内存较小的话,其他查询数据读进内存后,把旧的数据从内存中清除,再查询旧数据还需要从磁盘读取到内存,所以经常出现第一次较慢,后续较快情况。最好办法就是加大内存,把常用的数据都读取到内存中缓存起来。

解决办法建议现场升级sybase到15.7,因为sybase12.5.3没有64位版本,32位最多使用内存2G。