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

解决方案 »

  1.   

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

  2.   

    要想防止脏读,应该加with (xlock)才对啊,楼主返其道而行之.
      

  3.   

    三楼的兄弟对架构锁说得很清楚了,要查询表,肯定必须先建立架构锁,否则同时有人在执行alter table tbname add colname type语句之类的,查出 来的列就少了啊.
      

  4.   

    数据定义语言 (DDL),用于定义和管理 SQL 数据库中的所有对象
    它在 SQL-92 DDL 语句的基础上进行了扩展。每个对象类通常都包含 CREATE、ALTER 和 DROP 语句,如 CREATE TABLE、ALTER TABLE 和 DROP TABLE。权限由 SQL-92 GRANT 和 REVOKE 语句以及 Transact-SQL DENY 语句控制。