- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL Server 2008中SQL应用之三“阻塞(Blocking)”
SQL Server 2008中SQL应用之三“阻塞(Blocking)”
2011-03-11 13:26 邀月 博客园 HYPERLINK /art/201103/248717.htm \l commment \t _self 我要评论(0) 字号: HYPERLINK javascript:setfont(12); \t _self T | HYPERLINK javascript:setfont(16); \t _self T
当一个数据库会话中的事务正锁定一个或多个其他会话事务想要读取或修改的资源时,会产生阻塞(Blocking)。通常短时间的阻塞没有问题,且是较忙的应用程序所需要的。然而,设计糟糕的应用程序会导致长时间的阻塞,这就不必要地锁定了资源,而且阻塞了其他会话读取和更新它们。
AD:
当一个数据库会话中的事务正锁定一个或多个其他会话事务想要读取或修改的资源时,会产生阻塞(Blocking)。通常短时间的阻塞没有问题,且是较忙的应用程序所需要的。然而,设计糟糕的应用程序会导致长时间的阻塞,这就不必要地锁定了资源,而且阻塞了其他会话读取和更新它们。
在SQL Server中,一个阻塞的进程会无限期地保持阻塞,或者直到它超时(根据set lock_timeout)、服务器关闭、进程被杀死、连接完成了更新或者其他发生在原始事务上的操作导致它释放了资源上的锁。
发生长时间阻塞的原因如下:
在一个没有索引的表上的过量的行锁会导致SQL Server得到一个锁,从而阻塞其他事务。
应用程序打开一个事务,并在事务保持打开的时候要求用户进行反馈或交互。这通常是让最终用户在GUI上输入数据而保持事务打开的时候发生。此时,事务引用的任何资源都会被占据。
事务BEGIN后查询的数据可能在事务事务开始前被调用
查询不恰当地使用锁定提示。例如,应用程序仅使用很少的行,但却使用一个表锁提示
应用程序使用长时间运行的事务,在一个事务中更新了很多行或很多表(把一个大量更新的事务变成多个更新较少的事务有助于改善并发性)
一、找到并解决阻塞进程
下面我们演示使用SQL Server动态管理视图sys.dm_os_waiting_tasks找出阻塞进程,该视图用于代替早期SQL Server版本中的系统存储过程sp_who
找出阻塞的进程后,我们使用sys.dm_exec_sql_text动态管理函数和sys.dm_exec_Connections(DMV)找出正在执行的查询的SQL文本,然后强制结束进程。
强制结束进程,我们使用kill命令。kill的用法,请参看MSDN:/zh-cn/library/ms173730.aspx
该命令有三个参数:
session ID 要终止的进程的会话 ID。session ID 是在建立连接时为每个用户连接分配的唯一整数 (int)。在连接期间,会话 ID 值与该连接捆绑在一起。连接结束时,则释放该整数值,并且可以将它重新分配给新的连接。使用 KILL session ID 可终止与指定的会话 ID 关联的常规非分布式事务和分布式事务。
UOW 标识分布式事务的工作单元 (UOW) ID。UOW 是可从 sys.dm_tran_locks 动态管理视图的 request_owner_guid 列中获取的 GUID。也可从错误日志中或通过 MS DTC 监视器获取 UOW。有关监视分布式事务的详细信息,请参阅 MS DTC 文档。使用 KILL UOW 可终止孤立的分布式事务。这些事务不与任何真实的会话 ID 相关联,与虚拟的会话 ID = -2 相关联。可使标识孤立事务变得更为简单,其方法是查询 sys.dm_tran_locks、sys.dm_exec_sessions 或 sys.dm_exec_requests 动态管理视图中的会话 ID 列。
WITH STATUSONLY 生成由于更早的 KILL 语句而正在回滚的指定 session ID 或 UOW 的进度报告。KILL WITH STATUSONLY 不终止或回滚 session ID 或 UOW,该命令只显示当前的回滚进度。
在第一个查询窗口:
BEGIN TRAN
UPDATE Production.ProductInventory
SET Quantity = 400
WHERE ProductID = 1 AND
LocationID = 1
第二个窗口:
UPDATE Production.ProductInventory
SET Quantity = 406
WHERE ProductID = 1 AND
LocationID = 1
第三个窗口:
SELECT
您可能关注的文档
最近下载
- 来法莫林药物市场调研报告202312.pdf VIP
- [煤矿标准]GBT 20475.3-2012 煤中有害元素含量分级 第3部 分砷.pdf
- 2024年山东威海初中学业水平考试生物试卷真题(含答案详解).docx
- 山东亚洲金属循环利用环保有限公司年处理30万吨废旧蓄电池.doc VIP
- 耐克森nexans卷筒电缆.pdf
- 广州某银行业务连续性管理办法.pdf VIP
- 人教鄂教版五年级上册科学期末综合训练(含答案).docx
- 如何玩转抖音.pptx VIP
- 2024必威体育精装版“学宪法讲宪法”知识竞赛题库与答案.pdf
- 2023年哈尔滨工业大学(深圳)计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案).docx VIP
文档评论(0)