有关死锁的疑难解答
在死锁中,由于多种线程在相互控制或其它线程控制的一套资源中等待,所以无法继续。死锁是循环相关的,最好通过标识相关链和有关资源中的参与者,然后为各种其它线程选择资源上中断死锁的线程来加以解决。[@more@]在死锁中,由于多种线程在相互控制或其它线程控制的一套资源中等待,所以无法继续。死锁是循环相关的,最好通过标识相关链和有关资源中的参与者,然后为各种其它线程选择资源上中断死锁的线程来加以解决。当死锁发生时,用户收到如下错误。Transaction (Process ID xxx) was deadlocked on (xxx) resources with another proc
数据库并发问题
如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题[@more@]如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。并发问题包括: 丢失或覆盖更新。未确认的相关性(脏读)。不一致的分析(非重复读)。幻像读。 丢失更新当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。例如,两个编辑人员制作了同一文档的电子复本。
SQL Server 中的锁定介绍
Microsoft® SQL Server™ 2000 具有多粒度锁定,允许一个事务锁定不同类型的资源。为了使锁定的成本减至最少,SQL Server 自动将资源锁定在适合任务的级别。锁定在较小的粒度(例如行)可以增加并发但需要较大的开销,因为如果锁定了许多行,则需要控制更多的锁。锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少[@more@]SQL Server 可以锁定以下资源(按粒度增加的顺序列出)。资源描述RID行标识符。用于单独锁定表中的一行。键