LOCKS 配置参数指定锁表的初始大小。锁表为会话使用的每个锁保存条目。在锁表中每个锁使用 120 个字节。配置共享内存时必须提供此数量的内存。
如果会话所需的锁数超过了在 LOCKS 配置参数中设置的值,那么数据库服务器会尝试使锁表的大小增加一倍。每次锁表溢出时(当所需锁数量大于锁表的当前大小时),数据库服务器就会增加锁表大小,最多可高达 99 次。每次数据库服务器增加锁表的大小时,该服务器都会尝试将锁表大小翻倍。但是,服务器会将每次的实际增加值限制为不超过表 1 中显示的已添加锁的最大值。数据库服务器增加锁表大小满 99 次以后,该服务器将不再增加锁表的大小,这时需要锁的应用程序将收到一条错误消息。
下表显示了 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 个锁 |