SQL Server2016 新功能實時查詢統(tǒng)計信息
很多時候有這樣的場景,開發(fā)抱怨DBA沒有調(diào)優(yōu)好數(shù)據(jù)庫,DBA抱怨開發(fā)寫的程序代碼差,因此,DBA和開發(fā)都成為了死對頭,無法真正排查問題。
DBA只能使用Windows性能監(jiān)視器,SQL Server內(nèi)置的活動監(jiān)視器、SQL Trace、SQL Profiler、Performance Dashboard等工具,或者使用執(zhí)行計劃來查看查詢成本。
為了讓DBA有更多有效工具排查問題,SQL Server2016推出了很多新功能,其中一項功能是 Live Query Statistics(LQS 實時查詢統(tǒng)計信息),這個功能顯示了以往不容易看到的執(zhí)行時期的內(nèi)容,例如查詢期間的統(tǒng)計信息,這個功能可以幫助DBA找出長時間查詢的真正問題根源(root cause)
使用實時統(tǒng)計查詢
使用實時查詢統(tǒng)計非常簡單,只需要在SSMS的工具列,分別按一下【包括實際的執(zhí)行計劃】【包括實時查詢統(tǒng)計信息】圖標(biāo),并執(zhí)行您的查詢就可以了。
現(xiàn)在可以在【實時查詢統(tǒng)計信息】tab頁看到查詢所用到的運算符,正在統(tǒng)計查詢耗費時間,另外在tab頁面的左上角可以看到整個查詢的完成度

使用【實時查詢統(tǒng)計信息】會對性能有一定影響,當(dāng)查詢比較復(fù)雜的時候,所需等待時間也會增加,并且整個過程也會耗用不少CPU資源,因此使用的時機(jī)必須要審慎,否則問題未查出來,反而造成數(shù)據(jù)庫更大的壓力。
提示
如果只使用了【包括實時查詢統(tǒng)計信息】,而未打開【包括實際執(zhí)行計劃】,那么在【包括實時查詢統(tǒng)計信息】的tab頁所看到的經(jīng)過時間和完成率都會是0
不會顯示消耗時間

在執(zhí)行計劃中向下鉆取(drill down)
在實時查詢統(tǒng)計信息執(zhí)行過程中,可以點擊任何一個執(zhí)行計劃中的運算符,查看運算符的統(tǒng)計信息,例如:消耗時間(Elapsed time)、運算符的處理進(jìn)度(operator progress)、目前CPU使用率,根據(jù)這些信息幫助DBA找出瓶頸所在
另外,當(dāng)查詢依然在執(zhí)行時可以切換到活動監(jiān)視器,在新增加的【活動的耗費大量資源的查詢】tab頁里能看到當(dāng)前正在活動的耗時查詢,直到該查詢執(zhí)行完畢
實時查詢統(tǒng)計信息原理
實時查詢統(tǒng)計信息背后的原理其實是通過DMV動態(tài)管理視圖獲取信息,然后呈現(xiàn)在tab頁面上,從而讓DBA可以不需要自行查詢這些DMV,直接以圖形化界面來快速找到長時間執(zhí)行的查詢是在哪個環(huán)節(jié)耗費最多時間和成本。
實時查詢統(tǒng)計信息原理
實時查詢統(tǒng)計信息背后的原理其實是通過DMV動態(tài)管理視圖獲取信息,然后呈現(xiàn)在tab頁面上,從而讓DBA可以不需要自行查詢這些DMV,直接以圖形化界面來快速找到長時間執(zhí)行的查詢是在哪個環(huán)節(jié)耗費最多時間和成本。
下面是實時查詢統(tǒng)計信息所使用的DMV,當(dāng)然自己也可以通過下面的DMV來查詢獲得需要的統(tǒng)計信息
- SELECT * FROM sys.dm_exec_requests
- SELECT * FROM sys.dm_exec_sql_text
- SELECT * FROM sys.dm_exec_query_memory_grants
- SELECT * FROM sys.dm_exec_query_plan
- SELECT * FROM sys.dm_exec_query_profiles
限制
目前實時查詢統(tǒng)計信息尚不支持下列功能
列存儲索引(columnstore indexes)
內(nèi)存優(yōu)化表(memory optimized tables)
本地編譯存儲過程(Natively compiled stored procedures)