初涉SQL Server性能问题(2/4)里,我们讨论了列出等待资源或正运行的会话脚本。这篇文章我们会看看如何列出包含具体信息的话阻塞会话清单。

  1. /******************************************************************************************/
  2. CREATE FUNCTION [dbo].dba_GetStatementForSpid
  3. (
  4. @spid SMALLINT
  5. )
  6. RETURNS NVARCHAR(4000)
  7. BEGIN
  8. DECLARE @SqlHandle BINARY(20)
  9. DECLARE @SqlText NVARCHAR(4000)
  10. SELECT @SqlHandle = sql_handle
  11. FROM sys.sysprocesses WITH (nolock) WHERE spid = @spid
  12. SELECT @SqlText = [text] FROM
  13. sys.dm_exec_sql_text(@SqlHandle)
  14. RETURN @SqlText
  15. END
  16. GO
  17.  
  18. /*****************************************************************************************
  19. STEP 4: List the current blocking session information
  20. ****************************************************************************************/
  21.  
  22. SELECT
  23. es.session_id,
  24. es.HOST_NAME,
  25. DB_NAME(database_id) AS DatabaseName,
  26. CASE WHEN es.program_name LIKE '%SQLAgent - TSQL JobStep%' THEN (SELECT 'SQL AGENT JOB: '+name FROM msdb..sysjobs WHERE job_id=MASTER.DBO.ConvertStringToBinary (LTRIM(RTRIM((SUBSTRING(es.program_name,CHARINDEX('(job',es.program_name,0)+4,35))))))
  27. ELSE es.program_name END AS program_name ,
  28. es.login_name ,
  29. bes.session_id AS Blocking_session_id,
  30. MASTER.DBO.dba_GetStatementForSpid(es.session_id) AS [Statement],
  31. bes.HOST_NAME AS Blocking_hostname,
  32. CASE WHEN Bes.program_name LIKE '%SQLAgent - TSQL JobStep%' THEN
  33. (SELECT 'SQL AGENT JOB: '+name FROM msdb..sysjobs WHERE job_id=
  34. MASTER.DBO.ConvertStringToBinary
  35. (LTRIM(RTRIM((SUBSTRING(Bes.program_name,CHARINDEX('(job',es.program_name,0)+4,35))))))
  36. ELSE Bes.program_name END AS Blocking_program_name,
  37. bes.login_name AS Blocking_login_name,
  38. MASTER.DBO.dba_GetStatementForSpid(bes.session_id ) AS [Blocking Statement]
  39. FROM sys.dm_exec_requests S
  40. INNER JOIN sys.dm_exec_sessions es ON es.session_id=s.session_id
  41. INNER JOIN sys.dm_exec_sessions bes ON bes.session_id=s.blocking_session_id

这个脚本会列出被阻塞和正阻塞的语句信息,帮助我们进行问题分析。下面的脚本会帮助我们列出已经打开事务但未活动的会话,即打开事务,但上30秒内都没执行任何语句的会话。

  1. /*****************************************************************************************
  2. STEP 4: List the Open session with transaction which is not active
  3. ****************************************************************************************/
  4. SELECT es.session_id,
  5. es.login_name,
  6. es.HOST_NAME,
  7. DB_NAME(SP.dbid) AS DatabaseName,
  8. sp.lastwaittype,
  9. est.TEXT,cn.last_read,
  10. cn.last_write,
  11. CASE WHEN es.program_name LIKE '%SQLAgent - TSQL JobStep%' THEN(SELECT 'SQL AGENT JOB: '+name FROM msdb..sysjobs WHERE job_id=MASTER.DBO.ConvertStringToBinary (LTRIM(RTRIM((SUBSTRING(es.program_name,CHARINDEX('(job',es.program_name,0)+4,35)))))
  12. )ELSE es.program_name END AS program_name
  13. FROM sys.dm_exec_sessions es
  14. INNER JOIN sys.dm_tran_session_transactions st ON es.session_id = st.session_id INNER JOIN sys.dm_exec_connections cn ON es.session_id = cn.session_id
  15. INNER JOIN sys.sysprocesses SP ON SP.spid=es.session_id
  16. LEFT OUTER JOIN sys.dm_exec_requests er ON st.session_id = er.session_id
  17. AND er.session_id IS NULL
  18. CROSS APPLY sys.dm_exec_sql_text(cn.most_recent_sql_handle) est
  19. WHERE (DATEDIFF(SS,cn.last_read,GETDATE())+DATEDIFF(SS,cn.last_write,GETDATE()))>30
  20. AND lastwaittype NOT IN ('BROKER_RECEIVE_WAITFOR' ,'WAITFOR')
  21. GO

参考文章:

http://www.sqlservercentral.com/blogs/practicalsqldba/2012/09/24/sql-server-part-3-approaching-database-server-performance-issue-/

初涉SQL Server性能问题(3/4):列出阻塞的会话的更多相关文章

  1. 初涉SQL Server性能问题(4/4):列出最耗资源的会话

    在上3篇文章里,我们讨论了列出反映服务器当前状态的不同查询. 初涉SQL Server性能问题(1/4):服务器概况 初涉SQL Server性能问题(2/4):列出等待资源的会话 初涉SQL Ser ...

  2. 初涉SQL Server性能问题(2/4):列出等待资源的会话

    在初涉SQL Server性能问题(1/4)里,我们知道了如何快速检查服务器实例上正运行的任务数和IO等待的任务数.这个是轻量级的脚本,不会给服务器造成任何压力,即使服务器在高负荷下,也可以正常获得结 ...

  3. 初涉SQL Server性能问题(1/4):服务器概况

    当你作为DBA时,很多人会向你抱怨:“这个程序数据加载和蜗牛一样,你看看是不是服务器出问题了?”造成这个问题的原因有很多.可能是程序应用服务器问题,网络问题,程序实现方式问题,数据库服务器负荷过重.不 ...

  4. SQL Server 性能优化之——系统化方法提高性能

    SQL Server 性能优化之——系统化方法提高性能 阅读导航 1. 概述 2. 规范逻辑数据库设计 3. 使用高效索引设计 4. 使用高效的查询设计 5. 使用技术分析低性能 6. 总结 1. 概 ...

  5. SQL Server 性能优化详解

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  6. SQL Server 性能调优培训引言

    原文:SQL Server 性能调优培训引言 大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤 ...

  7. SQL Server 性能优化(一)——简介

    原文:SQL Server 性能优化(一)--简介 一.性能优化的理由: 听起来有点多余,但是还是详细说一下: 1.节省成本:这里的成本不一定是钱,但是基本上可以变相认为是节省钱.性能上去了,本来要投 ...

  8. SQL Server性能优化与管理的艺术 附件下载地址

    首先感谢读者们对鄙人的支持,购买了<SQL Server性能优化与管理的艺术>,由于之前出版社的一些疏忽,附件没有上传成功,再次本人深表歉意. 请需要下载附件的读者从下面链接下载,谢谢: ...

  9. 影响Sql server性能的因素

    目前本人在看<SQL Server性能调优实战> ,以下内容是本人看书笔记 数据库性能取决于各方面综合因素: 硬件,操作系统,软件 硬件:内存,CPU,磁盘 当服务器的物理内存不足时,会产 ...

随机推荐

  1. Windows KB2984972安装后堵住了一个windows 7 桌面可以多个用户远程访问桌面的漏洞。

    之前网络上有方法可以实现2个用户同时使用一个windows 7,一个在终端,一个通过远程桌面. 安装了这个kb后,就无法同时登陆了,同一时间只有一个用户可以登陆windows 7

  2. Java 多线程(1)-Thread和Runnable

    一提到Java多线程,首先想到的是Thread继承和Runnable的接口实现 Thread继承 public class MyThread extends Thread { public void ...

  3. 用node-webkit 开发 PC 客户端

      7月 3 2013 导言 node-webkit 是一个很神奇的桌面客户端项目,正如这个项目的名字,这个项目是由node 和 webkit 构成,简单来说,就是你可以用HTML 5和 node 进 ...

  4. Win7版IE10浏览器正式版官方下载地址

    • 简体中文,Win7 SP1 32位版IE10下载: http://download.microsoft.com/download/4/1/4/4149BFB1-AC27-401D-943F-DA1 ...

  5. IOS 7 UI 的适配

    官方问题答案:https://developer.apple.com/library/ios/qa/qa1797/_index.html 官方建议: https://developer.apple.c ...

  6. Python的列表推导式

    1.列表推导式书写形式: [表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件] 2.举例说明: #!/usr/bin/python # -*- codi ...

  7. timer.scheduleAtFixedRate和timer.schedule的实验

    基础代码: Calendar  currentTime = Calendar.getInstance(); currentTime.setTime(new Date()); int  currentH ...

  8. 2015.10.14-TransactionScope测试

    测试代码: ; ; List<string> lst = null; Action doSth = () => { using (var db = new TestSystemEnt ...

  9. freemarker springmvc配置异常

    异常信息 java.lang.IllegalAccessError: tried to access method freemarker.ext.servlet.AllHttpScopesHashMo ...

  10. Linux下php5.3编译oracle客户端

    因项目需要在linux下进行php5.3的oracle客户端编译,简要介绍一下步骤及走过的弯路. 1.下载Oracle客户端程序包,其中包含OCI.OCCI和JDBC-OCI等相关文件. 1.1下载文 ...