前段时间提到的"sql server 2005 死锁解决探索",死锁严重,平均每天会发生一次死锁,在解决和处理SQL server2005死锁中查了很多资料和想了很多办法,后来我们就使用了以下方法: 
   
   1,将数据库隔离级别改成行版本控制隔离级别。(没有了共享锁死锁) 
   
   2,重建和优化索引,优化SQL语句和采用分区视图等方法。提高访问速度。(减少了锁定时间) 
   
   3,水平拆分表(分区)并在程序读写时尽量做到分区消除,减少读写的行数,降低锁定升级的频率和时间。 (减少锁的升级) 
  对为何出现死锁和怎样较少死锁有了进一步认识,在这里和大家一起分享: 
   
   
   
   SQL Server 锁类型 
   在数据库中主要存在两种锁: S(共享锁)和X(排他锁) 
   
   S(共享锁):在执行查询数据时,SQL server会将行锁定,这时只能查询数据,删,改被阻塞, 
   
   X(排他锁):在插入和删除数据时,将行锁定,这时增,删,改都被阻塞 
   
   以上两种锁都会引起死锁: 
   
   死锁定义:在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁 
   
   
   
   这里模拟一下死锁环境: 
   
   建立环境: 
  ----死锁例子,建立表数据 
  create table [dbo].[[zping.com1]]]( 
  A varchar(2) 
  ,B varchar(2) 
  ,C varchar(2)) 
   
  --插入数据 
  insert into [dbo].[[zping.com1]]] 
  select 'a1','b1','c1' 
  union all select 'a2','b2','c2' 
  union all select 'a3','b3','c3' 
   
  --建立表数据 
  create table [dbo].[[zping.com2]]] 
  (D varchar(2) 
  ,E varchar(2)) 
   
   --插入数据 
  insert into [dbo].[[zping.com2]]] 
  select 'd1','e1' 
  union all select 'd2','e2' 
   
   
   
   1. 1 排他锁引起的死锁 
   执行语句: 
   
  begin tran 
  update [dbo].[[zping.com2]]] 
  set D='d5' 
  where E='e1' 
  waitfor delay '00:00:05' 
   
  update [dbo].[[zping.com1]]] 
  set A='aa' 
  where B='b2' 
   
   
  begin tran 
  update [dbo].[[zping.com1]]] 
  set A='aa' 
  where B='b2' 
  waitfor delay '00:00:05' 
   
  update [dbo].[[zping.com2]]] 
  set D='d5' 
  where E='e1' 
   
   
   新建两个窗口,在5秒钟内执行上面语句,不久就会出现死锁提示。(结束后记住要把事务回滚啊) 
   
   1.2 共享锁引起的死锁 
  begin tran 
  update [dbo].[[zping.com2]]] 
  set D='d5' 
  where E='e1' 
  waitfor delay '00:00:05' 
   
  select * from [dbo].[[zping.com1]]] 
  where B='b2' 
   
   
  begin tran 
  update [dbo].[[zping.com1]]] 
  set A='aa' 
  where B='b2' 
  waitfor delay '00:00:05' 
   
  select * from [dbo].[[zping.com2]]] 
  where E='e1' 
   
   
   新建两个窗口,在5秒钟内执行上面语句。不久就会出现死锁提示。(结束后记住要把事务回滚啊) 
   
   
   
   知道死锁产生的原因,在生产环境产生的死锁就类似这两种情况。 
   
   
   
   后来在网上查阅了很多资料,包括sql server 2005的帮助文档。总结有以下有主要几点: 
   
   1,降低隔离级别或者使用行版本控制隔离级别 
   
   2,提高数据的访问速度 
   
   3,减少事务长度 
   
   4,将按顺序访问热点表(如将访问频繁的表放在最后访问) 
   
   
   
   遇到的困难 
   但在我们这次优化中,有些是不太好处理的 如: 
   
   1,减少事务长度,事务的大小不是我们来决定的,是由业务逻辑来决定的(来自tom的《Oracle 9i/10g深入内部体系机构》中) 
   
   2,按顺序访问热点表,我们发现代码中方法间互相调用很频繁,经常一个表调用多次,要修改表的访问顺序是比较困难的。

解决SQL server2005数据库死锁的经验心得相关推荐

  1. 搭建WAMP5环境,连接SQL Server2005数据库问题汇总

    经过两周的测试.修改,终于将网上药品采购系统从公司内部OA系统中独立出来,用WAMP5重新搭建了PHP网上药品采购系统.现将遇到的问题汇总如下: 1.数据库连接失败的问题,提示 Fatal error ...

  2. vb.net 安装部署以及远程连接sql server2005数据库

    Vb.net工程做完了,打包好了.但是前一段时间一直连接不上数据库,我是指连接远程的数据库. 对于原先用vb6.0做的东西来说,直接通过控制面板中的数据源设定就可以了,但是现在是通过字符串连接的.于是 ...

  3. mysql2005安装asp_asp连接sql server2005数据库

    首先,新建一个asp.net网站. 然后打开Default.aspx输入一下中的代码. 无标题页 SqlConnection MyConnection; MyConnection = new SqlC ...

  4. 服务器 消息 22029,解决SQL Server数据库维护计划失败的问题

    概要 如果数据库维护计划中的任何任务失败或遇到错误信息,则维护计划作业本身可能显示为失败.作业历史记录详细信息显示以下错误信息: sqlmaint.exe failed.[SQLSTATE 42000 ...

  5. 解决Sql server数据库不兼容问题

    记录一下SQL sever 2016版本在SQLserver2008R2上无法正常使用问题. 温馨提示:如果已经有数据库,不需卸载数据库. 解决办法如下: 下载 SQL Server Manageme ...

  6. 使用纯C++实现SQL Server2005 数据库读写操作详细步骤

    环境:虚拟机windows xp,vs2008 + SQLServer 2005 Express 数据库访问技术采用ADO. 需要安装的软件包括:microsoft_dotnetfxchs2.0.ex ...

  7. 如何把Sql Server2005 数据库转换成Access

    1.打开Access,建立一个后缀名为.mdb的空的数据库文件(默认后缀可能是.accdb,我们把它改为.mdb就可以了),然后保存该Access空数据库. 2.在SqlServer2005里面右击想 ...

  8. python 连接MS sql server2005数据库

    在google上有个开源的项目叫pymssql 项目地址:https://code.google.com/p/pymssql/ 看来段代码 import pymssql conn = pymssql. ...

  9. SQL Server2005 日期字段与字符串比较的怪异问题

    遇到了这样一个怪异问题. SQL Server2005数据库里有一个表,表中有一个DateTime类型的字段CreateDate. 如果在SQL语句里写 where CreateDate <= ...

最新文章

  1. 浅谈CSRF攻击方式
  2. CNCF 沙箱项目 OCM Placement 多集群调度指南
  3. 上传图片即时显示图片
  4. win7 VS2013 新建工程 编译lua5.2.0 静态库
  5. Anaconda中下载速度贼慢?
  6. python实现邮件客户端_利用python实现简单的邮件发送客户端示例
  7. 各种类型变量的定义以及赋值
  8. 什么叫做展望_开学季:有一种爱, 叫做爸妈给你塞的行李箱!(附大学新生行李箱应怎么选?)...
  9. 强大!用 60 行代码自动抢微信红包
  10. 怎么做好饮料代理?如何发展市场
  11. linux服务添加互信,Linux多节点互信配置
  12. mipi-csi-2解读_CSI:Visual Studio-无法将索引X处的Unicode字符转换为指定的代码页
  13. 爬虫之-bilibili视频下载-下载链接获取
  14. feather初体验
  15. Word格式之参考文献交叉引用
  16. 提升领导力的8点建议
  17. 2014年湛江新教育交流会总结
  18. jquey学习篇 第一篇
  19. 商业化广告--体系学习-- 14 -- 业务实战篇 --转化优化:互联网大厂如何利用算法优化广告效果?
  20. 小学生算术加法测试c 语言,程序设计方法学课程设计--小学生算术四则运算测试程序(C)...

热门文章

  1. 为啥程序员工资高,却很多人想转行,这4点原很现实
  2. jQuery ajax contentType processData 笔记
  3. Android怎样保证一个线程最多仅仅能有一个Looper?
  4. 【GO语言】合理配置GOMAXPROCS提升一倍以上的性能
  5. wap问答系统工作总结
  6. Mybatis 基础 定义别名,属性配置
  7. ajax与HTML5 history pushState/replaceState实例
  8. Android Pmem相关介绍
  9. RDCL报表的两种使用方法/为DataSet添加两个Table_AX
  10. Android开发之适配器-ListView适配器的重复数据