您的位置:首页 > 博客中心 > 数据库 >

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

时间:2022-03-10 17:36

    最近现场反馈问题,所有电子签章页面打不开文书(pdf格式),后台日志没报任何错误,效果就是空白:

gxlsystem.com,布布扣SELECT * FROM T_ZXLD_SYYH_FJ WHERE C_BH_SQ='76A1737D773BE344B7154AA479634FED' AND C_FJLX='syyhcx.zz.cxs.gy'

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

    gxlsystem.com,布布扣

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

UPDATE all STATISTICS T_ZXLD_SYYH_FJ

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

    gxlsystem.com,布布扣

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

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

    gxlsystem.com,布布扣

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

    gxlsystem.com,布布扣

    第一次执行结果:

    gxlsystem.com,布布扣

    第二次执行结果:

    gxlsystem.com,布布扣

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

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

性能问题解决案例01——sybase数据库内存问题,布布扣,bubuko.com

热门排行

今日推荐

热门手游