日期:2014-05-18  浏览次数:20392 次

关于脏读的疑问?
系统中有几个关联表会频繁的发生插入,修改动作;而又有几个频繁而又耗时的查询涉及到这几个表(查询已尽量优化),为降低影响,   将查询涉及表全部加了with   (nolock),但发现该查询运行时依然会有一个table类sch-s的架构锁存在,   查了一下帮助,说架购锁是在查询编译期间产生的锁,不会锁定资源.

那位说说架构锁是怎么会事?所有语句编译其间都会产生这个锁吗?

------解决方案--------------------
当编译查询时,使用架构稳定性锁(Sch-S 锁)。架构稳定性锁(Sch-S 锁)不阻塞任何事务锁,包括排他锁(X 锁)。因此在编译查询时,其他事务 [包括在表上有排他锁(X 锁)的事务] 都能继续运行。但不能在表上执行 DDL 操作。
bof上写的很清楚.架构稳定性锁只会阻塞DDL 操作.

------解决方案--------------------
要想防止脏读,应该加with (xlock)才对啊,楼主返其道而行之.
------解决方案--------------------
数据定义语言 (DDL),用于定义和管理 SQL 数据库中的所有对象
它在 SQL-92 DDL 语句的基础上进行了扩展。每个对象类通常都包含 CREATE、ALTER 和 DROP 语句,如 CREATE TABLE、ALTER TABLE 和 DROP TABLE。权限由 SQL-92 GRANT 和 REVOKE 语句以及 Transact-SQL DENY 语句控制。