CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

数据库死锁,大家来看看

楼主baddot(小不点)2005-01-03 22:33:52 在 MS-SQL Server / 基础类 提问

数据库记录有200w条,有索引,存储过程对表执行delete/insert/update操作时,特别慢。  
  监控发现有死锁情况发现,象这种情况怎么解决???? 问题点数:0、回复次数:18Top

1 楼NinGoo(http://www.NinGoo.net)回复于 2005-01-03 22:40:18 得分 0

死锁得进程执行的是哪些SQL语句?Top

2 楼hai2003xp(古井小调)回复于 2005-01-03 23:06:22 得分 0

因為你對數據的操作量太多了,所以用的時間當然要多Top

3 楼baddot(小不点)回复于 2005-01-04 00:05:03 得分 0

我需要解决的办法。请大家献技Top

4 楼nsqsmile(阿南)回复于 2005-01-04 02:00:30 得分 0

1)看一下是否是有的事务持续时间太长了,是否有整批提交或回滚的,改为单条  
   
  2)其他事务是否有需要用户相应后才提交或回滚得情况Top

5 楼zjcxc(邹建)回复于 2005-01-04 08:17:13 得分 0

解决死锁不是凭三两句话或几个设置可以搞定的  
   
  要解决死锁,首先要分析死锁产生的原因,再根据原因,结合实际情况,考虑是修正业务处理方案,还是修正数据处理方案,还是提高硬件配置等方法来解决  
   
   
  如果仅仅是简单地几个设置之类就能解决问题,就不会存在死锁这个问题了.Top

6 楼zjcxc(邹建)回复于 2005-01-04 08:17:51 得分 0

常规分析方法:  
   
   
   
  死锁减至最少  
  虽然不能完全避免死锁,但可以使死锁的数量减至最少。将死锁减至最少可以增加事务的吞吐量并减少系统开销,因为只有很少的事务:    
   
  回滚,而回滚会取消事务执行的所有工作。  
   
   
  由于死锁时回滚而由应用程序重新提交。    
  下列方法有助于最大限度地降低死锁:    
   
  按同一顺序访问对象。  
   
   
  避免事务中的用户交互。  
   
   
  保持事务简短并在一个批处理中。  
   
   
  使用低隔离级别。  
   
   
  使用绑定连接。    
  按同一顺序访问对象  
  如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得   Supplier   表上的锁,然后获得   Part   表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在   Supplier   表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存储过程用于所有的数据修改可以标准化访问对象的顺序。  
   
   
   
  避免事务中的用户交互  
  避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用程序请求参数的提示。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。  
   
  保持事务简短并在一个批处理中  
  在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。  
   
  保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁。  
   
  使用低隔离级别  
  确定事务是否能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺。  
   
  使用绑定连接  
  使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞。  
   
  Top

7 楼lxysjl(流星雨)回复于 2005-01-04 09:03:37 得分 0

MARKTop

8 楼hanwen(汉文)回复于 2005-01-04 10:02:58 得分 0

markTop

9 楼hglhyy(為人民币服务!)回复于 2005-01-04 13:09:38 得分 0

上面说得对,首先要分析死锁是怎么产生的,再对症下药,采取措施Top

10 楼U2U2U2U2(数据也疯狂)回复于 2005-01-04 18:12:40 得分 0

大家说的都有道理Top

11 楼feeling_68(随风)回复于 2005-01-17 19:44:28 得分 0

大家说的都有道理。。。  
  用类似于PV开关的东东,也许能在某些时候有点用^_^Top

12 楼didoleo(冷月无声)回复于 2005-01-17 22:44:24 得分 0

学习,收藏之!Top

13 楼warren1999(warren1999)回复于 2005-01-28 12:46:04 得分 0

markTop

14 楼hai2003xp(古井小调)回复于 2005-01-28 13:03:42 得分 0

用事務處理呀!Top

15 楼hglhyy(為人民币服务!)回复于 2005-01-28 15:09:01 得分 0

转:  
   
  中断某数据库的所有连接来解锁:  
  use     master    
  go  
  create     proc     killspid     (@dbname     varchar(20))      
  as      
  begin      
  declare     @sql     nvarchar(500),@temp   varchar(1000)  
  declare     @spid     int      
  set     @sql='declare     getspid     cursor     for          
  select     spid     from     sysprocesses     where     dbid=db_id('''+@dbname+''')'      
  exec     (@sql)      
  open     getspid      
  fetch     next     from     getspid     into     @spid      
  while     @@fetch_status     <     >-1  
  begin      
      set   @temp='kill     '+rtrim(@spid)  
      exec(@temp)  
  fetch     next     from     getspid     into     @spid      
  end      
  close     getspid      
  deallocate     getspid      
  end      
   
  --用法      
  use     master      
   
  exec     killspid     '数据库名'  
   
   
   
  可以用sp_who来查看死锁情况,blk字段不为0时出现死锁,用kill杀掉。  
   
  Top

16 楼panjinfu80(天蓝水晶)回复于 2005-01-28 19:11:42 得分 0

有道理!!Top

17 楼zhongxin799(台风)回复于 2005-01-28 20:08:43 得分 0

学习Top

18 楼631799(杭州工人)回复于 2005-01-28 21:19:56 得分 0

一网打尽Top

相关问题

  • 数据库死锁
  • SQL 数据库死锁?
  • 数据库死锁了
  • 数据库死锁问题,在线等
  • 关于数据库死锁的问题
  • 数据库死锁现象,分不够再加!
  • 求救!0进程号引起数据库死锁!
  • 如何解决数据库服务器死锁?
  • Sql Server数据库死锁问题如何解决
  • Sql Server 2000数据库死锁的解决,很爽,散分

关键词

  • 数据库
  • 用户
  • 交互
  • 应用程序
  • 执行
  • 连接
  • 解决
  • 降低
  • 死锁
  • 事务

得分解答快速导航

  • 帖主:baddot

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo