SQLServer数据库实用技术(69)
时间:2007-12-23 来源:不详 作者:迈克DB
11.5.4 查看锁
可以通过企业治理器或存储过程来查看锁。
(1) 用Enterprise Manager 查看锁
在企业治理器中选择目录树窗口中“Management” 文件夹下,“Current Activity” 中的“Locks / Process ID” 节点,则可以查看当前锁定的进程;选择同级的“Locks / Object”节点下的相应字节点,则可以查看当前锁定的对象,如图11-1 所示。在图11-1 中,右键单击任务板窗口中的对象,从快捷菜单中选择“属性”选项,则会出现如图11-2 所示的锁的进程细节对话框。在此,可以刷新或杀死锁的进程。
杀死进程还可以用如下Transact-SQL 命令来进行:
KILL spid
spid 是System Process ID, 即系统进程编号的缩写,如图11-1 中所示。
图11-2 锁定的进程细节
(2) 用系统存储过程Sp_lock 查看锁
存储过程Sp_lock 的语法如下:
sp_lock spid
SQL Server 的进程编号spid 可以在master.dbo.sysprocesses 系统表中查到。spid 是INT类型的数据,假如不指定spid ,则显示所有的锁。
copyright dedecms
11.5.5 死锁及其防止
死锁(Deadlocking) 是在多用户或多进程状况下,为使用同一资源而产生的无法解决的争用状态,通俗地讲,就是两个用户各占用一个资源,两人都想使用对方的资源,但同时又不愿放弃自己的资源,就一直等待对方放弃资源,假如不进行外部干涉,就将一直耗下去。
死锁会造成资源的大量浪费,甚至会使系统崩溃。在SQL Server 中解决死锁的原则是“牺牲一个比两个都死强”,即挑出一个进程作为牺牲者,将其事务回滚,并向执行此进程的程序发送编号为1205 的错误信息。而防止死锁的途径就是不能让满足死锁条件的情况发生,为此,用户需要遵循以下原则:
- 尽量避免并发地执行涉及到修改数据的语句;
- 要求每个事务一次就将所有要使用的数据全部加锁,否则就不予执行;
- 预先规定一个封锁顺序所有的事务,都必须按这个顺序对数据执行封锁,例如,不同的过程在事务内部对对象的更新执行顺序应尽量保持一致;
- 每个事务的执行时间不可太长,对程序段长的事务可考虑将其分割为几个事务。
织梦好,好织梦
本章中介绍了数据更新的方法及事务和锁的概念。除了使用本章讲述的语句更新数据外,还可以使用视图来更新数据,有关视图的运用请参见第13 章“游标和视图”。
文章评论
共有位Admini5网友发表了评论 查看完整内容