在生产环境下,有时公司客服反映网页半天打不到,除了在浏览器按F12的Network响应来排查,确定web服务器无故障后。就需要检查数据库是否有出现阻塞

当时数据库的生产环境中主表数据量超过2000w,子表数据量超过1亿,且更新和新增频繁。再加上做了同步镜像,很消耗资源。

这时就要新建一个会话,大概需要了解以下几点:

1.当前活动会话量有多少?

2.会话运行时间?

3.会话之间有没有阻塞?

4.阻塞时间 ?

查询阻塞的方法有很多。有sql 2000 的sp_lock, 有sql 2005及以上的dmv

一. 阻塞查询 sp_lock

执行 exec sp_lock  下面列下关键字段

spid 是指进程ID,这个过滤掉了系统进程,只展示了用户进程spid>50。

dbid 指当前实例下的哪个数据库 , 使用DB_NAME() 函数来标识数据库

type 请求锁住的模式

mode 锁的请求状态

GRANT:已获取锁。

CNVRT:锁正在从另一种模式进行转换,但是转换被另一个持有锁(模式相冲突)的进程阻塞。
                     WAIT:锁被另一个持有锁(模式相冲突)的进程阻塞。

总结:当mode 不为GRANT状态时, 需要了解当前锁的模式,以及通过进程ID查找当前sql 语句

例如当前进程ID是416,且mode状态为WAIT 时,查看方式 DBCC INPUTBUFFER(416)

用sp_lock查询显示的信息量很少,也很难看出谁被谁阻塞。所以当数据库版本为2005及以上时不建议使用。

 二.阻塞查询  dm_tran_locks      

 SELECT
t1.resource_type,
t1.resource_database_id,
t1.resource_associated_entity_id,
t1.request_mode,
t1.request_session_id,
t2.blocking_session_id
FROM sys.dm_tran_locks as t1
INNER JOIN sys.dm_os_waiting_tasks as t2
ON t1.lock_owner_address = t2.resource_address;

上面查询只显示有阻塞的会话, 关注blocking_session_id 也就是被阻塞的会话ID,同样使用DBCC INPUTBUFFER来查询sql语句

三.阻塞查询 sys.sysprocesses

 SELECT
spid,
kpid,
blocked,
waittime AS 'waitms',
lastwaittype,
DB_NAME(dbid)AS DB,
waitresource,
open_tran,
hostname,[program_name],
hostprocess,loginame,
[status]
FROM sys.sysprocesses WITH(NOLOCK)
WHERE kpid>0 AND [status]<>'sleeping' AND spid>50
AND spid<>@@SPID

sys.sysprocesses  能显示会话进程有多少, 等待时间, open_tran有多少事务, 阻塞会话是多少. 整体内容更为详细。
  关键字段说明:

spid 会话ID(进程ID),SQL内部对一个连接的编号,一般来讲小于50

  kipid 线程ID
  blocked: 阻塞的进程ID, 值大于0表示阻塞, 值为本身进程ID表示io操作
  waittime:当前等待时间(以毫秒为单位)。
  open_tran: 进程的打开事务数
  hostname:建立连接的客户端工作站的名称
  program_name 应用程序的名称。
  hostprocess 工作站进程 ID 号。
  loginame 登录名。
  [status]
    running = 会话正在运行一个或多个批
    background = 会话正在运行一个后台任务,例如死锁检测
    rollback = 会话具有正在处理的事务回滚
    pending = 会话正在等待工作线程变为可用
    runnable = 会话中的任务在等待,由scheduler来运行的可执行队列中。(重要)
    spinloop = 会话中的任务正在等待调节锁变为可用。
    suspended = 会话正在等待事件(如 I/O)完成。(重要)
    sleeping = 连接空闲

wait resource 格式为 fileid:pagenumber:rid 如(5:1:8235440)

kpid=0, waittime=0 空闲连接

kpid>0, waittime=0 运行状态
              kpid>0, waittime>0 需要等待某个资源,才能继续执行,一般会是suspended(等待io)
              kpid=0, waittime=0 但它还是阻塞的源头,查看open_tran>0 事务没有及时提交。

如果blocked>0,但waittime时间很短,说明阻塞时间不长,不严重
              如果status 上有好几个runnable状态任务,需要认真对待。 cpu负荷过重没有及时处理用户的并发请求

sql server 性能调优之 SQL语句阻塞查询的更多相关文章

  1. 【目录】sql server 性能调优

    随笔分类 - sql server 性能调优 sql server 性能调优之 资源等待之网络I/O 摘要: 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql s ...

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

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

  3. sql server 性能调优之 资源等待PAGELATCH

    一.概述 在前几章介绍过 sql server 性能调优资源等待之PAGEIOLATCH,PAGEIOLATCH是出现在sql server要和磁盘作交互的时候,所以加个IO两个字.这次来介绍PAGE ...

  4. sql server 性能调优之 资源等待 LCk

    一.  概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 “sql server 锁与事务拨云见日”.下面还是使用sys.dm_os_wait_stats 来查看,并找出 ...

  5. sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)

    一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU,  内存,锁等,不管从哪个维度去解决,都能达到调优的效 ...

  6. sql server性能调优

    转自:https://www.cnblogs.com/woodytu/tag/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E5%9F%B9%E8%AE%AD/defaul ...

  7. sql server 性能调优 资源等待之内存瓶颈的三种等待类型

    原文:sql server 性能调优 资源等待之内存瓶颈的三种等待类型 一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),S ...

  8. CPU开销sql server 性能调优

    sql server 性能调优 CPU开销分析 一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU, 内存 ...

  9. [转]SQL Server 性能调优(io)

      目录 诊断磁盘io问题 常见的磁盘问题 容量替代了性能 负载隔离配置有问题 分区对齐配置有问题 总结 关于io这一块,前面的东西如磁盘大小,磁盘带宽,随机读取写入,顺序读取写入,raid选择,DA ...

随机推荐

  1. 基于Cmake+QT+VS的C++项目构建开发编译简明教程

    目录 一.工具下载与安装 1.     Qt 2.     Visual Studio 2015 3.     Cmake 二.C++及Qt项目构建 1.     基于VS构建Qt项目 2.     ...

  2. 使用vue-awesome-swiper的相关问题

    最近自己在仿做一个旅游网站的vue项目,在首页中使用了vue-awesome-swiper插件来实现轮播图的效果,发现了以下几种问题: 一.需要额外引入swiper.css 原来使用vue-aweso ...

  3. AutoCAD下载

    AutoCAD 2019 64位破解版 附注册机和安装教程  1.71G AutoCAD 2019 64位精简优化版 珊瑚の海简体中文版691.08M

  4. 我的第一个chrome浏览器扩展 5分钟学习搞定

    注意: 文件名必须是 manifest, ,注意扩展名是json, 新建一个文件夹,然后创建一个文本文件,作为这个扩展程序的配置文件,所以文件名是manifest.json, 感谢https://ww ...

  5. 为什么目前无法再docker for windows中调用GPU

    本随笔记载与2019年1月23日,若随着技术发展,本随笔记录的困难被攻克也是可能的. 参考(https://www.reddit.com/r/docker/comments/86vzna/gpu_ac ...

  6. 操作redis数据库 & 操作Excel & 开发接口

    操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...

  7. C# 异步编程之 Task 的使用

    (说明:随笔内容为学习task的笔记,资料来源:https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?redi ...

  8. 在浏览器输入URL时发生了什么

    浏览器器检查cache,如果请求对象已经缓存并且是最新的,执行第9步. 浏览器询问操作系统,请求服务器的IP地址 操作系统进行DNS查找,然后告诉浏览器服务器的IP 浏览器和服务器简历一个TCP连接( ...

  9. 微信小程序----没有 DOM 对象,一切基于组件化 ---- mpvue

    封装好用的 类库 和 组件,复用且灵活度高 抽取相同的部分放在函数内部(组件内部) 抽取不同的部分放在形参(组件 props 传参,或者插槽) new Promise 运行时 初始化实例对象的状态为 ...

  10. MD5加密过时方法替换

    使用System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile进行MD5加密时,会出现已过时 /// < ...