表的死锁是怎么造成的?都有哪些情况?
解决方案 »
- SQL语句数据库还原,名称不一致,位置不一致
- 懂数据库和C#的朋友们,伴我看看吧,关于C#监视一个数据库中的某个表
- 新手问题,请问 数据库 能否对文件进行管理
- 非常简单的sql语句,怎么搞不对呢?
- SQL server 2000网络访问的问题
- varchar转datetime
- 如何调用存储过程的返回值??
- (如图)创建存储过程时突然发现NewID() 似乎不能直接作为存储过程的参数传入,不知道哪位高人能给个解释~~ 3Q
- 当在一个表中插入一条数据同时在另一个表中增加该数据用触发器如何实现?
- 急急!在用TDatabase控件登陆SQL SERVER 2000数据库时,如何截取登陆时的出错信息
- 我的操作系统是Windows Server2003.安装SQL-Server2000时,提示不支持.继续安装也不成功.为什么?
- 一个关联两个表的查询
当某组资源的两个或多个线程之间有循环相关性时,将发生死锁。死锁是一种可能发生在任何多线程系统中的状态,而不仅仅发生在关系数据库管理系统中。多线程系统中的一个线程可能获取一个或多个资源(如锁)。如果正获取的资源当前为另一线程所拥有,则第一个线程可能必须等待拥有线程释放目标资源。这时就说等待线程在那个特定资源上与拥有线程有相关性。如果拥有线程需要获取另外一个资源,而该资源当前为等待线程所拥有,则这种情形将成为死锁:在事务提交或回滚之前两个线程都不能释放资源,而且它们因为正等待对方拥有的资源而不能提交或回滚事务。例如,运行事务 1 的线程 T1 具有 Supplier 表上的排它锁。运行事务 2 的线程 T2 具有 Part 表上的排它锁,并且之后需要 Supplier 表上的锁。事务 2 无法获得这一锁,因为事务 1 已拥有它。事务 2 被阻塞,等待事务 1。然后,事务 1 需要 Part 表的锁,但无法获得锁,因为事务 2 将它锁定了。事务在提交或回滚之前不能释放持有的锁。因为事务需要对方控制的锁才能继续操作,所以它们不能提交或回滚。
同样有一个资源:单人厕所。
有一个人在厕所里待者,因为没有手纸,所以说出不来。
另外一个人有手纸想去厕所,但是因为厕所有人站着,所以进不去。
想出来的出不来,想进去的进不去。
1、没有及时commit事务,及时交出控制权。
2、减少热点,建两个厕所。
3、减小事务,把事务尽可能的减小。