LOCKS 配置参数和内存利用率

LOCKS 配置参数指定锁表的初始大小。锁表为会话使用的每个锁保存条目。在锁表中每个锁使用 120 个字节。配置共享内存时必须提供此数量的内存。

如果会话所需的锁数超过了在 LOCKS 配置参数中设置的值,那么数据库服务器会尝试使锁表的大小增加一倍。每次锁表溢出时(当所需锁数量大于锁表的当前大小时),数据库服务器就会增加锁表大小,最多可高达 99 次。每次数据库服务器增加锁表的大小时,该服务器都会尝试将锁表大小翻倍。但是,服务器会将每次的实际增加值限制为不超过表 1 中显示的已添加锁的最大值。数据库服务器增加锁表大小满 99 次以后,该服务器将不再增加锁表的大小,这时需要锁的应用程序将收到一条错误消息。

下表显示了 32 位和 64 位平台上允许的最大锁定数

表 1. 32 位和 64 位平台上的最大锁定数
平台 最大初始锁数 最大动态锁表扩展数 每个锁表扩展添加的最大锁定数 允许的最大锁定数
32 位 8,000,000 99 100,000 8,000,000 + (99 x 100,000)
64 位 500,000,000 99 1,000,000 500,000,000 + (99 x 1,000,000)

LOCKS 配置参数的缺省值为 20,000。

要为 LOCKS 配置参数估计一个不同的值,可以估计查询所需的最大锁数并用此估计值乘以并发用户数。可以使用下表中的准则来估计查询需要的锁数。

每个语句的锁定数 隔离级别 TEXT 或 BYTE 数据 CLOB 或 BLOB 数据
SELECT 脏读取 0 0 0 0 0
SELECT 已落实读取 1 0 0 0 0
SELECT 游标稳定 1 1 0 0 CLOB 或 BLOB 值使用 1 个锁,或(如果使用了字节范围锁定)每个范围使用 1 个锁
SELECT 索引可重复读 1 满足条件的行数 满足条件的行数 0 CLOB 或 BLOB 值使用 1 个锁,或(如果使用了字节范围锁定)每个范围使用 1 个锁
SELECT 顺序可重复读 1 0 0 0 CLOB 或 BLOB 值使用 1 个锁,或(如果使用了字节范围锁定)每个范围使用 1 个锁
INSERT 不适用 1 1 索引数 TEXT 或 BYTE 数据中的页数 CLOB 或 BLOB 值使用 1 个锁
DELETE 不适用 1 1 索引数 TEXT 或 BYTE 数据中的页数 CLOB 或 BLOB 值使用 1 个锁
UPDATE 不适用 1 1 每个更改的键值使用 2 个 新旧 TEXT 或 BYTE 数据中的页数 CLOB 或 BLOB 值使用 1 个锁,或(如果使用了字节范围锁定)每个范围使用 1 个锁
要点:SQL 语句 DROP DATABASE 的执行过程中,数据库服务器在数据库中每个表上获取并保留一个锁,直到整个 DROP 操作完成。确保 LOCKS 的值足够大以容纳在数据库中的最大表数。