当前位置:   article > 正文

sql server 死锁简易例子2--可通过索引优化解决死锁问题_索引是否可以解决数据库死锁的问题

索引是否可以解决数据库死锁的问题

工作些年,常听见的一名话是

死锁是程序问题,不能通过优化数据库来解决死锁,必须要改写程序,做好事务与访问顺序方面的控制”

如果产生死锁的业务模块频繁访问大量堆表,通过数据库优化是在一定的概率下可以解决死锁问题的,实际工作中,大概有百分四十的概率可以通过优化索引解决死锁问题。

死锁概念产生原理在csdn上的很多。

在这里举个通过索引优化解决死锁问题的简单栗子,证明我来过...

窗口1:创建测试表

  1. USE [test]
  2. GO
  3. /****** Object: Table [dbo].[t2] Script Date: 2018/5/29 18:52:46 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. CREATE TABLE [dbo].[t2](
  9. [f1] [int] NULL,
  10. [f2] [int] NULL
  11. ) ON [PRIMARY]
  12. GO
  13. /****** Object: Index [i2] Script Date: 2018/5/29 18:52:46 ******/
  14. CREATE CLUSTERED INDEX [i2] ON [dbo].[t2]
  15. (
  16. [f1] ASC
  17. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  18. GO
  19. INSERT [dbo].[t2] ([f1], [f2]) VALUES (1, 1)
  20. GO
  21. INSERT [dbo].[t2] ([f1], [f2]) VALUES (1, 2)
  22. GO
  23. INSERT [dbo].[t2] ([f1], [f2]) VALUES (2, 1)
  24. GO
  25. INSERT [dbo].[t2] ([f1], [f2]) VALUES (2, 2)
  26. GO


窗口2:查询1

  1. --execute 1
  2. begin tran
  3. --execute 1
  4. update t2 set f1=f1 where f1=1 and f2=1
  5. --execute 3
  6. select * from t2 where f1=2 and f2=2
  7. --execute 5
  8. rollback
窗口2:查询2
  1. --execute 2
  2. begin tran
  3. --execute 2
  4. update t2 set f1=f1 where f1=2 and f2=1
  5. --execute 4
  6. select * from t2 where f1=1 and f2=2
  7. --execute 6
  8. rollback

按照注释execute 1、2、3、4、5、6依次选中运行

执行到第四步,sql server自动检测到死锁并kill 之


至此窗口2,3运行rollback释放锁。

解决办法

通过添加正确索引来以免本例子中的update过度锁数据。

  1. CREATE NONCLUSTERED INDEX [i3] ON [dbo].[t2]
  2. (
  3. [f1] ASC,
  4. [f2] ASC
  5. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  6. GO
按照注释execute 1、2、3、4、5、6依次选中运行

执行到第四步,不会死锁,正常返回结果。


最后execute 5、6

Rollback

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/759712
推荐阅读
相关标签
  

闽ICP备14008679号