怎样理解数据库的死锁和阻塞

文章作者 100test 发表时间 2008:04:02 14:23:48
来源 100Test.Com百考试题网


死锁

  死锁是一种条件,不仅仅是在关系数据库管理系统 (RDBMS) 中发生,在任何多用户系统中都可以发生的。当两个用户(或会话)具有不同对象的锁,并且每个用户需要另一个对象的锁时,就会出现死锁。每个用户都等待另一个用户释放他的锁。当两个连接陷入死锁时,Microsoft? SQL Server? 会进行检测。其中一个连接被选作死锁牺牲品。该连接的事务回滚,同时应用程序收到错误。

  如果死锁变成单个公用事件,而且它们的回滚造成过多的性能降级,那么就需要再次进行深入彻底的调查。使用跟踪标记 1204.例如,下面的命令从命令提示符启动 SQL Server,并启用跟踪标记 1204:

  c:\mssql\binn\sqlservr -T1204

  现在所有消息都会显示在启动 SQL Server 的控制台屏幕上和错误日志中。

  使用分布式事务时,也可能发生死锁。

阻塞

  任何基于锁的并发系统都不可避免地具有可能在某些情况下发生阻塞的特征。当一个连接控制了一个锁,而另一个连接需要冲突的锁类型时,将发生阻塞。其结果是强制第二个连接等待,或在第一个连接上阻塞。

  在本主题中,术语"连接"是指数据库的单个登录会话。每个连接都作为系统进程 ID (SPID) 出现。尽管每一个 SPID 一般都不是单独的进程上下文,但这里常常用来指一个进程。更确切的说,每个 SPID 都是由服务器资源和数据结构(为给定客户单个连接的请求提供服务)组成。单个客户应用程序可能有一个或多个连接。就 SQL Server 而言,从单个客户机上的单个客户应用程序来的多个连接和从多个客户应用程序或多个客户机来的多个连接是没有区别的。不管是来自同一应用程序还是来自两台不同客户机上单独的应用程序,一个连接都可以阻塞另一个连接。



相关文章


微软X 3颇具Vista特征补丁破千个
为何要警惕Oracle11g的五大新特性?
学习Oracle架构应当掌握哪些知识
杀毒软件自身漏洞将严重威胁用户安全
怎样理解数据库的死锁和阻塞
详细介绍两种动态定义游标的方法
数据库设计中的14个实用技巧
Oracle中限制返回结果集的行数
获取或记录Oracle语句的执行时间
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛