关于通过DM_视图寻求优化MSSQL的方法

来源:这里教程网 时间:2026-03-02 10:01:14 作者:

最近一直想寻求一种类似ORACLE中优化系统的方法,也就是通过查询某个视图或某个指标来获取系统当前存在的瓶颈,虽然,象一些书里介绍的那样可以通过性能计数器和查询可以解决某些问题,但毕竟系统内的很多因素之间是互相影响的,并不能立刻从根本上解决存在的瓶颈问题,昨天在边研究边做《Microsoft.Press.Inside.Microsoft.SQL.Server.2005.Query.Tuning.and.Optimization.Sep.2007》的笔记,这也是我一直以来想完成的一个任务,就是通过总结、归纳以往我看的有关MSSQL的资料和知识,得出一套切实可行的优化MSSQL的方法,起码要把思路搞清楚,所以最近一直在努力,可昨晚我忽然看到其中提到了sys.dm_os_wait_stats的视图,这使我忽然看到了希望,觉得MSSQL看来也模仿了ORACLE,在动态视图里也记录了当前系统的等待信息,这让我欣喜若狂,今天下午没去培训结果查了一下MSSQL2005的资料,原来MSSQL2005的袖里乾坤也不简单啊,基本具备了视图优化和查询的雏形啊,也许以前就有,只是我们没发现而已。看了几大类DM视图和函数,了解了一些基本概念,理顺了一下思路,先总结如下: 一、通过sys.dm_os_wait_stats获取系统等待信息: 1. 获取数量最多的等待: SELECT * FROM sys.dm_os_wait_stats where waiting_tasks_count<>0 ORDER BY waiting_tasks_count desc,wait_time_ms desc 2. 获取等待时间和最长的等待: SELECT * FROM sys.dm_os_wait_stats where waiting_tasks_count<>0 ORDER BY wait_time_ms desc, waiting_tasks_count desc 二、通过sys.dm_os_waiting_tasks获取信息: 1. 获取等待任务相关会话信息: select w_tsk.session_id,w_tsk.wait_type,w_tsk.resource_description,s_txt.text from sys.dm_os_waiting_tasks w_tsk join sys.dm_os_tasks a_tsk on w_tsk.waiting_task_address=a_tsk.task_address and w_tsk.session_id=a_tsk.session_id join sys.dm_exec_requests a_req on a_tsk.session_id=a_req.session_id and a_tsk.request_id=a_req.request_id CROSS APPLY sys.dm_exec_sql_text(a_req.sql_handle) AS s_txt where w_tsk.blocking_session_id is not null 2. 取获等待任务信息: select * from sys.dm_os_waiting_tasks where blocking_session_id is not null order by wait_duration_ms 三、所有事件信息(因内容较多,在专门文档里给出)

相关推荐