理解数据库的死锁和阻塞

2008-04-02 11:00:46来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  死锁  

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

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

  c:\mssql\binn\sqlservr -T1204

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

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

  阻塞

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

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


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 如何上传.SQL文档到远程主机并用他部署数据库

下一篇: 在Report Manager中实现细粒度的项级任务权限控制