DBA必备脚本--执行中的SQL

来源:互联网 发布:蜂鸟网络如何收费 编辑:程序博客网 时间:2024/06/06 06:44

前言


当数据库出现性能问题时,这个脚本能够直观的看到数据库中SQL 的运行状态,快速找到执行缓慢的语句。这是我使用最频繁的脚本之一.



SELECT    es.session_id,    database_name=DB_NAME(er.database_id),    er.cpu_time,    er.reads,    er.writes,    er.logical_reads,    login_name,    er.status,    blocking_session_id,    wait_type,    wait_resource,    wait_time,    individual_query=SUBSTRING(qt.text,(er.statement_start_offset/2)+1,((CASE  WHEN  er.statement_end_offset=-1 THEN  LEN(CONVERT(NVARCHAR(MAX),qt.text))* 2 ELSE   er.statement_end_offset  END-er.statement_start_offset)/2)+1),    parent_query=qt.text,    program_name,    host_name,    nt_domain,    start_time,    DATEDIFF(MS,er.start_time,GETDATE())as duration,    (SELECT  query_plan  FROM  sys.dm_exec_query_plan (er.plan_handle))AS  query_planFROM    sys.dm_exec_requests er    INNER  JOIN  sys.dm_exec_sessions  es  ON er.session_id=es.session_id    CROSS  APPLY  sys.dm_exec_sql_text (er.sql_handle)AS  qtWHERE    es.session_id> 50             AND  es.session_Id  NOT  IN(@@SPID)ORDER BY    1, 2


查询结果截图如下:在




重要信息

logical_reads:逻辑读,衡量语句的执行开销。如果大于10w,说明此语句开销很大。可以检查下索引是否合理

status:进程的状态。running 表示正在运行,sleeping 表示处于睡眠中,未运行任何语句,suspend 表示等待,runnable 等待cpu 调度

blocking_session_id: 如果不为0,例如 60 。表示52号进程正在被60阻塞。50 进程必须等待60执行完成,才能执行下面的语句

host_name :发出请求的服务器名

program_name:发出请求的应用程序名

duration: 请求的执行时间



总结


用了都说好。




原创粉丝点击