LOCKS 配置参数指定内部锁表的初始大小。如果数据库服务器增大锁表的大小,那么应该增大 LOCKS 配置参数的大小。
有关如何确定 LOCKS 配置参数的初始值的信息,请参阅 LOCKS 配置参数和内存利用率。
如果会话所需的锁数超过了在 LOCKS 配置参数中设置的值,那么数据库服务器会尝试使锁表的大小增加一倍。每次锁表溢出时(当所需锁数量大于锁表的当前大小时),数据库服务器就会增加锁表大小,最多可高达 99 次。每次数据库服务器增加锁表的大小时,该服务器都会尝试将锁表大小翻倍。但是,服务器会将每次的实际增加值限制为不超过表 1 中显示的已添加锁的最大值。数据库服务器增加锁表大小满 99 次以后,该服务器将不再增加锁表的大小,这时需要锁的应用程序将收到一条错误消息。
下表显示了允许的最大锁定数。
平台 | 最大初始锁数 | 最大动态锁表扩展数 | 每个锁表扩展添加的最大锁定数 | 允许的最大锁定数 |
---|---|---|---|---|
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) |
每次数据库服务器增加锁表的大小时,该服务器将在消息日志文件中放置一条消息。您应该定期监视消息日志文件,如果看到数据库服务器已经增加了锁表大小,那么应增加 LOCK 配置参数的大小。
要监视应用程序接收到“超过锁定数”错误的次数,请查看 onstat -p 输出中的 ovlock 字段。 您还可以从 sysmaster 数据库中的 sysprofile 表看到类似的信息。以下各列包含相关统计信息。
行 | 描述 |
---|---|
ovlock | 会话尝试超过最大锁定数的次数 |
lockreqs | 会话请求锁定的次数 |
lockwts | 会话等待锁定的次数 |
如果数据库服务器正在使用大量的锁定,那么您可以检查各个应用程序如何使用锁定,如下所示:
表锁比单独的行锁效率要高,但它降低了并行性。
减少加在表上的锁数的一种方法是,将表由使用行锁改为使用页锁。 然而,页锁 降低了表的整体并行性,这将影响到性能。
您还可以按照互斥方式通过锁定表来减少放置在该表上的锁定数。