生產環境單表查詢超時,表數據500萬+,這點數據按道理不加不加索引都不應該超時。排查業務數據,發現業務數據每天插入25萬+。初步懷疑併發導致數據處理不及時,進一步排查每分鐘都有300的左右實時數據插入到業務表,鍋應該不在這裡排查數據伺服器,發現CPU占用不高,512G的記憶體占用高達96%。但sql ...
生產環境單表查詢超時,表數據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腳本占用記憶體等問題進行排查