不要再用Session id < 50來判斷該Session是System Process還是User Process了

一直以來有個觀念就是Session ID小於50的就是SQL系統用的System Process。

因此常會看見一些TSQL的Script會用Sesssion_id > 50來抓User的Process,當然我也是不例外啦。

就在昨天一個告警機制一直觸發,顯示某個User Process Wait time超過10分鐘了,我當下想說應該又是Blocking造成,所以登入SQL後sp_who2看了一下狀況。發現SQL中並沒有Blocking發生啊 ! 

那為何會有Wait time時間過長的告警呢? 檢視一下等待過久的Session id是60,因為是大於50所以被我寫的Script判定是User的Process,但實際上他是一個SQL的System Process。因此造成告警監測到System Process而誤判。

下圖紅色圈選處的四個Session id已經超過50了,但是卻是系統在用的Session,所以別再用50當作界線來判斷囉。

日後判定是否為System Process時,請改用sys.dm_exec_sessionsis_user_process欄位來判斷,只要該值為0就是系統用,為1就是User用。

 

我是ROCK

rockchang@mails.fju.edu.tw