SQL Server 2005 T-SQL Recipes------Transaction, Locking, Blocking, Deadlocking
Posted on 2009-05-05 10:07 鸡尾虾的壳 阅读(318) 评论(0) 编辑 收藏 举报1. 事务控制
SQL Server 2005支持3种类型的事务:Autocommit, Explicit,Implicit事务。
Autocommit是SQL Server 2005事务的默认行为。每个T-SQL执行完成后都默认提交。特点是没有恢复选项。
Implicit是隐式事务,当"Alter table, Select, Update,Insert,Open,Delete"等命令执行完后,事务一致是打开状态,直到Rollback, Commit命令的执行。通过"SETIMPLICIT_TRANSACTIONS ON”打开这种事务模式。在生产环境中,这是非常危险的。开发者可能忘记了关闭事务。
Explicit事务是由开发者来定义事务的开始和结束,推荐的事务控制模式。
2. 使用DBCC OpenTran显示最旧的活动事务
活动事务会阻止其他进程访问访问被修改的数据,而且会导致日志的不断增长。使用DBCC OpenTran可以显示最旧的活动事务信息。
3. Lock
Lock可以施加于不同的数据库对象上,有不同的粒度。sys.dm_tran_locks提供了对锁活动监控信息。
4. 事务孤立级别
SET TRANSACTION ISOLATION LEVEL命令。
5. 阻塞
SET LOCK_TIMEOUT定义超时限制。
sys.dm_os_waiting_tasks系统视图查看阻塞进程。当查询到阻塞进程ID后,通过DBCC INPUTBUFFER查看该进程对应的正在执行的sql语句。杀死进程的命令是:KILL。
6. 死锁
默认情况下,当死锁发生时,SQL Server并不返回明显的日志信息。但是通过DBCC TRACEOFF (1222, -1)把标志位打开,这样就系统会日志死锁信息了。
通过SET DEADLOCK_PRIORITY命令可以设置某个进程成为死锁受害者的优先级。