MSSQL环境下因报表实时刷新导致宕机问题分析
在开发报表的过程中,勾选了实时刷新数据,报表自动的实时显示动态数据,导致服务器内存爆满,系统无法使用。
通过MSSQL提供的系统函数,查看内存中实时运行的语句,发现报表语句大量的刷屏,占用了较多的CPU,内存等资源。
通过如下代码可以查询数据库正在运行的比较耗费资源语句:
select top 10 text,*
from sys.sysprocesses a cross applysys.dm_exec_sql_text(a.sql_handle) st
where status<>'sleeping'
order by cpu desc
出现这些的问题后的解决建议如下:
1.增加TOMCAT的最大内存设置,
2.考虑能否降低刷新数据的频率,或者取消刷新数据
3.对获取数据的SQL语句进行优化
3.1 首先检查下sql代码中是否有不符合sarg规范的地方,有则改
3.2 sql代码尽量做好过滤条件,尽量用数据库参数过滤,这样可以减少查询过程中处理的数据量,从而减少硬件资源的消耗。模板参数因为要先将所有数据查询出来后再做过滤,所有耗费了很多资源。
3.3 sql代码逻辑结构的优化