SQL Server 查询超时问题排查
生产环境单表查询超时,表数据500万+,这点数据按道理不加不加索引都不应该超时。
排查业务数据,发现业务数据每天插入25万+。初步怀疑并发导致数据处理不及时,进一步排查每分钟都有300的左右实时数据插入到业务表,锅应该不在这里
排查数据服务器,发现CPU占用不高,512G的内存占用高达96%。但sql server使用了1.7G,还有5、6个进程内存占用在100M以上,剩余进行都在100M以下,内存不应该使用到96%
排查资源监视器,sqlserver.exe提交内存485G,专用内存1.7G,应该是sql server的提交内存过大导致系统内存不足,示例如下图
处理:
修改sqlserver中最大服务器内存为400G(示例如下图),资源监视器中sqlserver.exe提交内存降到了400G左右,任务管理器中内存使用降到了80%
再次测试查询,20多毫秒得到查询结果
分析:
sql server 提交内存过大,专用内存不大,问题应该是sql server不主动释放内存,系统可用内存减少,在到达一定比例后系统开启了磁盘交换空间,导致sqlserver处理数据变慢
由于sql server的专用内存才1.7G,所以后续未对sql脚本占用内存等问题进行排查