锁定提升

数据库服务器使用锁定提升来减少对智能大对象所保持的锁定的总数。 太多的锁定会导致性能降低,因为 数据库服务器会频繁地搜索锁表,以确定某个对象上是否存在一个锁定。

如果某个事务保持的锁定数超过了数据库服务器的分配的当前锁定数的 33%,数据库服务器就会试图将所有现有字节范围锁定提升为智能大对象上的一个锁定。

如果一个用户对一个智能大对象(不是对智能大对象的字节范围)所持有的锁定数等于或超过锁定表当前容量的 10%,数据库服务器就会尝试将所有智能大对象锁定提升为对智能大对象头分区的一个锁定。对于那些更新、装入或删除大量智能大对象的应用程序,这种锁定提升提高了性能。 例如:如果不使用锁定提升,一个删除数百万个智能大对象的事务会 消耗掉整个锁表。 锁定提升算法中内置了死锁避免功能。

可以通过 rowid 列中的 0,以及表空间编号(该编号高序的最开始的一个半字节与存储智能大对象的数据库空间编号相对应),来 标识 onstat -k 中的智能大对象的头分区。 例如:如果列出的表空间数为 0x200004 (高位 0 已截去),数据库空间数 2 等于 onstat -d 中列出的数据库空间数。

即使数据库服务器试图提升一个锁定,它可能也无法做到。 例如:数据库服务器可能无法将字节范围锁定提升为一个智能大对象锁定,因为其他用户对同一个智能大对象加上了字节范围锁定。 如果数据库服务器不能提升一个字节范围锁定,它就不更改锁定,处理照常继续进行。