首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

为什么锁不自动释放解决方法

2012-02-02 
为什么锁不自动释放SETTRANSACTIONISOLATIONLEVELREADCOMMITTEDgobegintranselectpurpricefromu_batsale_c

为什么锁不自动释放
SET   TRANSACTION   ISOLATION   LEVEL   READ   COMMITTED
go
begin   tran
select   purprice   from   u_batsale_c   where   wareid   =   '001897 '
go
exec   sp_lock
go
rollback

上述语句执行的结果如下(objid=875866187对应的表名即u_batsale_c)   :

5.90000

51900DBSGRANT
5198758661870TABSGRANT
511855753430TABISGRANT


不明白为什么这个查询语句结束但是这个共享锁仍然没有释放呢(sp_lock结果的第二行)?
我试了,别的表都不会这样,仅这个表是这样.
将这个表的索引删除或重建后也不会有这种情况;
同样的数据结构但记录不一样,别的数据库也不会有这种情况,试过很多数据库.

这样岂不是导致我每查询完一条都必须要提交一次事务吗?因为我用的PB自动创建事务模式,每条语句前会自动加   begin   tran   。

请大家帮忙看看

[解决办法]
这种情况只能靠猜了

估计与索引维护有一定关系,特别是聚集索引的维护,建议变化大的数据表制定适当的维护计划,定期维护(重建)聚集索引
[解决办法]
5198758661870TABSGRANT
你这个锁是个表锁
http://topic.csdn.net/t/20040218/14/2747861.html
描述的是表锁的可能性很大



[解决办法]
你的可能有个锁级别的升级,但http://topic.csdn.net/t/20040218/14/2747861.html本来就应该加表锁

[解决办法]
帮顶,学习
[解决办法]
只要把原表的索引删除后重建都没问题
-------------------------------------

那出问题的时候试试 dbcc indexdefrg 或者 dbcc dbreindex (整理索引碎片或者重构索引)
有可能是索引碎片太高,然后出的一些问题

热点排行