session阻塞的问题

简介:

简介

    对于数据库运维人员来说创建session或者查询时产生问题是常规情况,下面介绍一种很有效且不借助第三方工具的方式来解决类似问题。

最近开始接触运维工作,所以自己总结一些方案便于不懂数据库的同事解决一些不太紧要的数据库问题。类似方法很多理论也很多,我就不做深究,就是简单写一个方案,便于菜鸟使用的。

阻塞理解

Sql Server 中当一个数据库会话中的事务正锁定一个或多个其他会话事务想要读取或修改的资源时,会产生阻塞(Blocking)。通常短时间的阻塞没有问题,且是较忙的应用程序所需要的。然而,设计糟糕的应用程序会导致长时间的阻塞,这就不必要地锁定了资源,而且阻塞了其他会话读取和更新它们。

 

例子

   为了更好说明,下面用一个例子来介绍。创建一个表并插入数据,然后创建不同的session,同事阻塞session。具体的代码截图如下:

1.创建表Employee

2.插入测试数据

 

 

现在我们有了测试表,表中有12条数据,打开另一个查询对话框在SSMS中(意味着重新创建了一个session)

3.在新的查询窗口中首先要开启事务,然后写一个插入语句

 

在这个地方,我们能看到开启了一个事务。但是没有end tran 来终止事务,因此事务状态为“open”,现在运行脚本来看一下当前看起的运行处于“open”状态的session。

 

    现在能够看到如上图展示一样,运行的查询正在open状态的session。我们执行了这个命令但是没有完结它,DBA会联系这个session的创建者来完成事务,或者回滚事务。

现在让我们创建另一个session,更新一条记录并且不提交,即让查询session的状态为“open”。因此在新的查询窗口中 写一个语句来执行如下:

 

 

这里会看到系统正在运行后没有完成语句的状态(因为上一个事务没有关闭导致表锁,这个不能插入),现在可以在另外的窗口查询一下阻塞的情况,如下检查阻塞的session。

 

 

如上所示,阻塞的session ID是58,由于我们更新查询导致阻塞了54的执行,54就是我们插入数据未提交的批处理。

现在我们能搞清楚阻塞的原因,也就可以从容解决阻塞了。

解决

方案1

在了解业务的情况下,可以直接使用kill session ID的语句来终止某个阻塞的session。

方案2

在执行的事务的起始加入“set lock_timeout 1000” 语句,这表示如果阻塞超过1000毫秒,这个请求将被终止。

方案3

回滚或者提交事务。这个就不细说了。

下面是所有语句的代码:

 

 
  Employee ( Empid   , Name () , City ()  )    
 
  Employee (,,), (,,), (,,), (,,), (,,), 
(,,), (,,), (,,), (,,), (,,), (,,), 
(,,)
  
    Employee (,,) 
 
  name  database_name, session_id, , login_time, login_name, reads, writes  sys.dm_exec_sessions 
   sys.dm_tran_locks  sys.dm_exec_sessions.session_id  sys.dm_tran_locks.request_session_id 
  sys.databases  sys.dm_tran_locks.resource_database_id  sys.databases.database_id 
 resource_type
ORDER BY name

 /**** update query in new session ****/
update Employee set name = 'SHERAZ' where empid = 1245
/**** Query to check blocking queries with session id ****/
SELECT session_id, blocking_session_id, text FROM sys.dm_exec_requests CROSS APPLY sys.dm_exec_sql_text(sql_handle);
/*** Command if you want to kill blocking session ****/ kill (54)






      本文转自zsdnr  51CTO博客,原文链接:http://blog.51cto.com/12942149/1944650 ,如需转载请自行联系原作者



相关文章
|
前端开发 JavaScript 数据安全/隐私保护
推荐6款超级好看的开源中后台前端框架
推荐6款超级好看的开源中后台前端框架
2777 0
|
3月前
|
网络协议 Linux 网络安全
我用一条命令把内网的 RDP 桌面开到了浏览器里 —— Shield CLI 与主流隧道工具的技术对比
本文深度对比Shield CLI与ngrok、frp、Cloudflare Tunnel:Shield独有浏览器直连RDP/SSH/VNC能力,一条命令即开Web终端;而传统隧道仅解决网络可达,仍需客户端。聚焦协议支持、零配置体验、安全模型与国内可用性,揭示其“隧道+协议网关”融合架构的本质差异。
|
Ubuntu 数据安全/隐私保护
修改Wsl为root登录,并修改root密码
修改Wsl为root登录,并修改root密码
1513 0
|
10月前
|
数据采集 JavaScript 物联网
智能工厂四大核心系统:ERP/PLM/MES/WMS规划架构图详解
企业数字化转型需要构建ERP、PLM、MES、WMS等核心系统协同运作的完整体系。ERP整合企业资源管理,PLM管理产品全生命周期数据,MES实现车间生产执行管控,WMS优化仓储物流管理。各系统通过数据流紧密衔接:PLM为ERP提供BOM数据,ERP为MES下达生产计划,MES与WMS协同物料调度。
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
1253 3
|
SQL 存储 数据库
DBMS
一、DBMS DBMS是数据库管理系统(Database Management System)的缩写,是一种用于管理数据库的软件系统,它允许用户定义、创建、维护和控制数据库的访问。DBMS通常包括以下几个组件: 1. 数据库引擎:负责管理数据库的物理存储和访问,包括数据的存储、检索、修改和删除等操作。 2. 数据库管理工具:提供用户界面和命令行接口,用于管理数据库的定义、结构、安全性和性能等方面。 3. 数据库语言:用于定义和操作数据库的语言,包括数据定义语言(DDL)、数据操作语言(DML)和查询语言(SQL)等。 4. 数据库安全性:提供用户身份验证、访问控制和数据加密等安全功能,保护数据
775 0
|
14天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
5587 28
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
9天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1134 2