生產環境單表查詢超時,表資料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指令碼佔用記憶體等問題進行排查