MSSQL事务探究静等之道(mssql 事务等待)
一般来说,数据库事务能够确保数据库操作操作原子性。其粒度视乎在用户面前是不可查知的,这里将会探究MSSQL事务的内部实现以及与静等的概念有何关联。
MSSQL的数据库系统具有丰富的事务管理功能,包括隔离性,持久性,原子性等。MSSQL事务将状态变更过程分割成若干独立操作块,并执行时在系统调度器中实行状态监控,能够在任何时刻保证数据完整性,提供一种全局并发控制的手段。
具体来说,MSSQL事务的实现依赖于其系统锁的应用,该系统锁涵盖了行锁、表锁、页锁、索引锁以及其他类型的锁,每当发生数据写入行为时,系统就会在提交之前将锁状态写入内存。这样就可以有效的控制并发读写,而非锁情况下,所有并发读写操作可能会纵容存在竞争条件,要么就会在写入后出现脏读问题。
另外,MSSQL事务也由静等机制来实现。静等模式是指当某事务更新某数据时,另外一事务可以暂缓其更新,只能操作完成后才能更新,这就等同于它原子性的安全性。而当另一个事务A发起写入请求时,可以根据比较固定的时间来判断若它获得抢占资源(读写)的权限。
例如,使用MSSQL语言可以实现如下代码对于如下 @id变量,将会立即创建一个独立事务:
begin tran
select @id = coalesce(max(id), 0) + 1
from
t1
where
key1 = @key1
也就是说,使用 MSSQL 语句实现的数据库操作,实际上是在具有隔离属性的事务中进行的,另外,在并发读写的情况下,建议应用静等的机制,以提高服务者的效率,减小用户恢复事务过程的时间。
总而言之,MSSQL的数据库事务具有以数据安全为基础的原子操作粒度,既可以由系统锁实现并发操作的抑制,也可以通过合理的静等机制来实现最优的事务时间管理。然而,由于系统具有较强的复杂性,故还需要非常合适的资源控制机制才能较好的满足用户数据库操作的需求。