www.zhnq.net > sql sp_loCk 是干什么的?

sql sp_loCk 是干什么的?

SQL Server数据库引擎为了保证每一次只有一个线程同时访问同一个资源的对象而采用的一种锁定机制,系统有大量锁时就产生了“数据阻塞”.因此你的数据库设计和程序编制应该科学和合理,以便让sql server涉及的锁定的数量降到最少.当你的系统的反应迟缓时就应该注意数据库是否产生了阻塞.sp_lock是SQL Server 2000 的一个系统存储过程,EXECUTE sp_lock 执行这个存储过程,可以查看当前阻塞的数据表,以便分析程序,解决问题.

一、Report Server数据库:是一个SQL Server数据库.它能够存储SSRS配置部分,报告定义,报告元数据,报告历史,缓存政策,快照,资源,安全设置,加密的数据,调度和提交数据,以及扩展信息. 注意事项:尽管用户能够直接存取在

--1 如何锁一个表的某一行 set transaction isolation level read uncommitted select * from table rowlock where id = 1 --2 锁定数据库的一个表 select * from table with (holdlock)

SQL Server数据库发生死锁时不会象ORACLE那样自动生成一个跟踪文件. 有时可以在[管理]->[当前活动] 里看到阻塞信息(有时SQL Server企业管理器会因为锁太多而没有响应). 设定跟踪1204: USE MASTER DBCC TRACEON (1204,-1) 显示

--1. 输入 SP_lock --SP_lock --2. 查看 spid 数量较多,objld0的项目的SPID,如 61--3. 查看该项目的进程 --dbcc inputbuffer (61) --查到 Language Event 0 select * from tb_MQualityInfo with (holdlock updlock rowlock) where uid=159 类似信息--若有 holdlock uplock rowlock 字样的,则进程被锁死,只有发生这种情况再做--4.杀死该进程--5.kill 61--6.重新查看SP_lock

执行 exec dbo.sp_who_lock 可以看到是否有死锁进程;得到引起死锁的进程Spid 然后执行 kill spid号即可将引起死锁的进程杀掉.

使用sp_lock可以查看锁的信息, 使用kill 可以把产生锁的联接删除. 产生锁,一般是开发过程的处理有问题. 还有就是增加关键字或是索引,减小锁的粒度.

--死锁检测use masterSelect * from sysprocesses where blocked0--找到SPID exec sp_lock--根据SPID找到OBJIDselect object_name(85575343)--根据OBJID找到表名!

在语句中使用ROWLOCK选项 比如 select * from 表 (ROWLOCK) where 各种操作的默认锁定级别是不一样的.

可以用悲观锁和乐观锁两种访求(1)悲观锁就像前面所说的那样使用例如:select * from ta with(UPDLOCK)这样当记录已经被锁定后,其他的人再试图再次更新访问的时候会失败.详细内容不再细述了.(2)乐观锁类似16楼的说法,比如在表中增加一个字段以保存最后一次更新的时间戳,更新的时候,用取得数据时的时间与数据库中的更新时间进行比较,如果比数据库中的最后更新时间早的话,则说明之前已经有其它人对于数据进行了更新.则更新不能进行.可以使用下面的语句进行更新操作.updata set .. where upddate

网站地图

All rights reserved Powered by www.zhnq.net

copyright ©right 2010-2021。
www.zhnq.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com