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

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/xuepiaohan2006/article/details/30064399

    近期现场反馈问题。全部电子签章页面打不开文书(pdf格式),后台日志没报不论什么错误,效果就是空白:

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

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

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

    4、分析sql。简化后sql为:

SELECT * FROM T_ZXLD_SYYH_FJ

WHERE C_BH_SQ='76A1737D773BE344B7154AA479634FED'

AND C_FJLX='syyhcx.zz.cxs.gy'

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

    

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

UPDATE all STATISTICS T_ZXLD_SYYH_FJ

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

    

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

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

    

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

    

    第一次运行结果:

    

    第二次运行结果:

    

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

    解决的方法建议现场升级sybase到15.7。由于sybase12.5.3没有64位版本号。32位最多使用内存2G,好多表都是上百万的数据,确实查询较慢。

原文地址:https://www.cnblogs.com/mqxnongmin/p/10529279.html