动态管理视图:
具体的实例语句:
--关于语句执行的基本情况
select * from sys.dm_exec_query_stats --动态管理函数 需要提供参数
select top 10 execution_count,total_worker_time,t.text,total_worker_time/execution_count
as avgcpu from sys.dm_exec_query_stats as s
cross apply sys.dm_exec_sql_text(s.sql_handle) as t
order by avgcpu desc --当前正在等待cpu执行的任务数
select runnable_tasks_count from sys.dm_os_schedulers where runnable_tasks_count>0 --内存方面的动态管理视图
select * from sys.dm_os_memory_cache_clock_hands where rounds_count>0
and removed_all_rounds_count>0
如果指定了 CROSS APPLY,在右侧的行集表达式返回一个空的行集为该行时不生成任何行,行的左侧的行集。
--评估哪些语句浪费SQL性能
SELECT * FROM sys.dm_exec_query_stats
-- 所需时间除以执行次数
select top 10 total_elapsed_time/execution_count as avgtotal,t.text from sys.dm_exec_query_stats as s
--关于语句的信息
cross apply sys.dm_exec_sql_text(s.sql_handle) as t
order by avgtotal desc
--评估数据库io 的问题
select * from sys.dm_io_pending_io_requests -- 挂起io的请求 视图
select * from sys.dm_io_virtual_file_stats((select DB_ID('AdventureWorks2014')),null) --函数 返回数据和日志文件的 I/O 统计信息 --说明文件是被挂起的
select s.file_id,r.io_pending from sys.dm_io_pending_io_requests as r inner join
sys.dm_io_virtual_file_stats((select DB_ID('AdventureWorks2014')),null) as s
on r.io_handle=s.file_handle
创建一个表:
create database HRDB
go
use HRDB
go
create table t1(c1 int,c2 int)
go
insert t1 values(1,1)
启动事物 不关闭 造成线程阻塞
begin tran
update t1 set c1=2 where c1=1
--并不结束
另一个用户去查询表
--语句被阻塞
select * from t1
查看系统的阻塞情况
--查看系统阻塞的情况
select * from master..sysprocesses
select distinct
'PID'=str(s.spid,4),
'BLOCKID'=str(s.blocked,4),
'Status' =
case s.status
when 'sleeping' then 'Running'
when 'runnalbe' then 'Complete'
when 'suspended' then 'Blocked'
end,t.text
from master..sysprocesses as s cross apply sys.dm_exec_sql_text(s.sql_handle) as t
where s.dbid=(select DB_ID('hrdb'))
把事物进行提交:
commit select * from t1
再次运行以上的语句结果如下: