首页 浅析SQLSERVER死锁产生的原因及解决

浅析SQLSERVER死锁产生的原因及解决

举报
开通vip

浅析SQLSERVER死锁产生的原因及解决浅析SQLSERVER死锁产生的原因及解决 摘要 在软件运行过程中 , 由于数据并行的新增 、修改 、删除等操作 , 造成 Micro sof t SQL Server 数据库的死锁 ,而死锁则引发了系统超常时间的等待 ,数据的不准确 ,如果处理不 好 ,会造成很坏的后果 。本文对造成死锁的原因及解决死锁的方法进行了比较深入的探讨 ,从 源程序和 SQL Server 系统两个方面研究了死锁 ,本文解决死锁的方法应用于多个软件系统 , 并取得了较好的效果 。 关键词 死锁 ;资源 ;提交 ;回滚 ; SQL...

浅析SQLSERVER死锁产生的原因及解决
浅析SQLSERVER死锁产生的原因及解决 摘要 在软件运行过程中 , 由于数据并行的新增 、修改 、删除等操作 , 造成 Micro sof t SQL Server 数据库的死锁 ,而死锁则引发了系统超常时间的等待 ,数据的不准确 ,如果处理不 好 ,会造成很坏的后果 。本文对造成死锁的原因及解决死锁的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 进行了比较深入的探讨 ,从 源程序和 SQL Server 系统两个方面研究了死锁 ,本文解决死锁的方法应用于多个软件系统 , 并取得了较好的效果 。 关键词 死锁 ;资源 ;提交 ;回滚 ; SQL Server ( ) 当今 ,客户/ 服务 Client / Server和因特网/ 内, 而不仅仅发生在关系数据库管理系统中 。状态 ( ) 部网 Inter net / Int ranet 体系在软件开发和应用 多线程系统中的一个线程可能获取一个或多个资 () 源 如锁。如果正获取的资源当前为另一线程所 领域非常流行 , 由于 SQL SERV ER2000 具有可 拥有 ,则第一个线程可能必须等待拥有线程释放 靠性 、质量好和易用性 ,所以 Micro sof t SQL Serv2 目标资源 。这时就说等待线程在那个特定资源上 er 2000 作为 Client / Server 体系结构的后台开发 与拥有线程有相关性 。 工具也被广泛的应用 ,成为大规模联机事务处理 如果拥有线程需要获取另外一个资源 ,而该 () OL TP、数据仓库和电子商务应用程序的优秀 资源当前为等待线程所拥有 ,则这种情形将成为 死锁 :在事务提交或回滚之前两个线程都不能释 数据库平台 。 放资源 ,而且它们因为正等待对方拥有的资源而 在软件开发过程中 ,有时会遇到这种问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,单 不能提交或回滚事务 。例如 ,运行事务 1 的线程 机测试完好的程序 ,如果让几个用户并行处理 ,则 T1 具有 Supplier 表上的排它锁 。运行事务 2 的 会出现系统中入库一直等待 ,查询无法完成等情 线程 T2 具有 Part 表上的排它锁 ,并且之后需要 况 ,当时以为是数据库服务器有问题 ,强行关机 , Supplier 表上的锁 。事务 2 无法获得这一锁 , 因 结果造成有的数据保存成功 ,有的数据则没有保 存 ,造成动态数据库 , 台账等信息的不准确 。其 实 ,造成事故的根本原因是 :死锁 。 为事务 1 已拥有它 。事务 2 被阻塞 ,等待事务 1 。 死锁 :然后 ,事务 1 需要 Part 表的锁 ,但无法获得锁 ,因 当某组资源的两个或多个线程之间有循环相 为事务 2 将它锁定了 。事务在提交或回滚之前不 关性时 ,将发生死锁 。 能释放持有的锁 。因为事务需要对方控制的锁才 死锁是一种可能发生在任何多线程系统中的能继续操作 ,所以它们不能提交或回滚 。 可以得出 ,对于 Part 表锁资源 ,线程 T1 在线:虽然不能完全避免死锁 ,第二种情况处理 程 T2 上具有相关性 。同样 ,对于 Supplier 表锁资 可以使死锁的数量减至最少 。将死锁减至最少 源 ,线程 T2 在线程 T1 上具有相关性 。因为这些 以增加事务的吞吐量并减少系统开销 ,因为只 相关性形成了一个循环 , 所以在线程 T1 和线程 很少的事务 : T2 之间存在死锁 。 既然死锁会堵塞我们程序?回滚 ,而回滚会取消事务执行的所有工作 的流程 ,造成数据 ?由于死锁时回滚而由应用程序重新提交 。 的不完整性 ,所以我们应该彻底认清并要解决好 下列方法有助于最大限度地降低死锁 : 死锁问题 ,否则他给我们带来的麻烦就不言而喻 ?按同一顺序访问对象 。 ?避免事务中的用户交互 。 了 。 ?保持事务简短并在一个批处理中 。 首先我们要来了解一下死锁产生的原因 ,只 ?使用低隔离级别 。 有这样才能最终从根本上解决死锁 。 ?使用绑定连接 。 按同一顺序访问对象 ?源程序中对该 COMM I T/ ROLLBAC K 的 如果所有并发事务按同一顺序访问对象 , 事物没有提交或回滚 ,让系统一直等待 。 发生死锁的可能性会降低 。例如 ,如果两个并 ?复杂的事物相互交错执行 。事务获得 Supplier 表上的锁 ,然后获得 Part 表 第一种情况处理 : 进入 SQL SERV ER 中的 的锁 ,则在其中一个事务完成之前 ,另一个事务 管理菜单下的当前活动 ,查看产生死锁的进程现 阻塞在 Supplier 表上 。第一个事务提交或回 在执行的是什么操作 ,根据进程信息 ,确定程序在 对那个表进行新增 、修改 、删除 、查询 , 找到源程 后 ,第二个事务继续进行 。不发生死锁 。将存 序 ,仔细查看 ,看是否有的进程没有提交或回滚 。 过程用于所有的数据修改可以标准化访问对象 如果有样的进程 ,则其会一直等待用户发出提交 顺序 。 的命令 ,所以造成堵塞 。只要仔细 ,这一种死锁还 是比较容易处理的 。 量 ,因为事务持有的任何锁只有在事务提交或回1222 号错误信息 。但是 ,在实请求超时时段”的 际应用中 set lock time 只能用于本次连接 ,每次滚时才会释放 。即使不出现死锁的情况 ,访问同 一资源的其它事务也会被阻塞 ,等待该事务完成 。 co nnectio n 时 ,都是 - 1 ,在 set 后改变直到连接结 束 ,要永远保持 。另外 ,应该在逻辑中控制不产生保持事务简短并在一个批处理中 在同一数据库中并发执行多个需要长时间运 dead lock ,这样来控制才能一劳永益 。 另外我们行的事务时通常发生死锁 。事务运行时间越长 , 可以用 sp w ho 系统存储过程可用 其持有排它锁或更新锁的时间也就越长 ,从而堵 于确定进程是否正被阻塞以及被谁阻塞 。用 sp 塞了其它活动并可能导致死锁 。 保持事务在一w ho 固然可以知道堵塞情况 ,但是如果系统相互 个批处理中 ,可以最小化事务 堵塞的特别多 , 如果看到 BL K = 0 的进程你就 的网络通信往返量 ,减少完成事务可能的延迟并 KILL 掉 ,很容易造成好的进程被杀掉 。因为表 释放锁 。 面上 C 进程被 B 进程堵塞 ,但 B 进程又是被 D 进 程堵塞 ,所以只要把 D 进程杀掉 ,B 进程就会顺利 使用低隔离级别 执行完毕 , 从而释放资源 , C 进程也就顺利执行 确定事务是否能在更低的隔离级别上运行 。 ( 执行提交读允许事务读取另一个事务已读取 未 了 。我们知道 sysp rocesses 表中保存关于运行在 ( ) ( ) ) 修改的数据 ,而不必等待第一个事务完成 。使用 Micro sof t rSQL Server t m上的进程的信息 。 () 这些进程可以是客户端进程或系统进程 。sysp ro2 较低的隔离级别 例如提交读而不使用较高的隔 () 离级别 例如可串行读可以缩短持有共享锁的时 cesses 只存储在 master 数据库中 。Sysp rocesses 表中有 spid 字段 , blocked 字段等内容 , spid 字段 间 ,从而降低了锁定争夺 。 使用绑定连接存储 SQL Server 进程 ID , blocked 字段存储分块 ( ) 使用绑定连接使同一应用程序所打开的两个 进程的进程 ID spid。了解 sysp rocesses 表后 , 或多个连接可以相互合作 。次级连接所获得的任 我们 可 以 用 select spid f ro m sysp rocesses w here ( blocked = 0 and spid in select blocked f ro m 何锁可以象由主连接获得的锁那样持有 ,反之亦 ) 然 ,因此不会相互阻塞 。sysp rocesses这一条清晰的查到产生死锁的进程 , 自定义锁超时执行 KILL 命令 ,就可以解除系统的堵塞 。 当由于另一个事务已拥有一个资源的冲突 总之 ,为了避免由于死锁而造成的损失 ,我们 TM 在做程序时一定要注意写程序的严谨性 ,该提交 锁 ,而导致 Micro sof t SQL Server 2000 无法将 锁授权给该资源的某个事务时 ,该事务被阻塞以 的提交 ,该回滚的事件要回滚 。另外在总体编程 思路中 ,要注意保持事务简短并在一个批处理中 , 等待该资源的操作完成 。如果这导致了死锁 ,则 ( SQL Server 将终止其中参与的一个事务 不涉及 按同一顺序访问对象 ,尽量避免事务中的用户交 ) 互 。 超时。如果没有出现死锁 ,则在其它事务释放锁 之前 ,请求锁的事务被阻塞 。默认情况下 ,没有强 收稿日期 :2003 年 5 月 15 日
本文档为【浅析SQLSERVER死锁产生的原因及解决】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_321575
暂无简介~
格式:doc
大小:39KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-11-28
浏览量:24