表锁定

在数据仓库环境中,对于查询来说,获取更大粒度的锁定可能更为适当。 例如:如果 查询访问表中的大多数行,那么它获取较少的表锁时,与获取很多页锁或行锁相比,其效率会有所提高。

数据库服务器可以设置两类表锁:
这两种表锁的另外一个重要区别在于放置的锁定的实际数目:
要点: 表上的表锁能够从根本上降低更新并发性。在任何给定的时间,只有一项更新事务可以访问该表,并且该更新事务将所有其他事务均锁在外面。 然而,多个只读事务仍能同时访问该表。 在那些装入数据,然后由多个用户进行查询的数据仓库环境中,此行为很有用。

您可以将表在表级别锁定和其他级别锁定之间来回切换。 对于在某些时间段使用数据仓库方式中的表,而在其他时间段不使用的情形,这种切换锁定级别的能力很有用。

事务通过 LOCK TABLE 语句来指示数据库服务器对表使用表级别锁定。以下示例在表上放置互斥锁定:
LOCK TABLE tab1 IN EXCLUSIVE MODE;
以下示例在表上放置共享锁定:
LOCK TABLE tab1 IN SHARE MODE:

在某些情况下,数据库服务器会放置其自己的表锁。 例如,如果隔离级别是“可重复读”,而且数据库服务器必须读取表的大部分,那么它自动放置表锁定,而不是设置行或页锁定。数据库服务器创建或删除索引时,也会在表上放置表锁。