|
The lock system is sized using the following three functions:
DBENV->set_lk_max_locks DBENV->set_lk_max_lockers DBENV->set_lk_max_objects
The DBENV->set_lk_max_locks, DBENV->set_lk_max_lockers and DBENV->set_lk_max_objects functions specify, respectively, the maximum number of locks, lockers and locked objects supported by the lock subsystem. The maximum number of locks is the number of locks that can be simultaneously requested in the system. The maximum number of lockers is the number of lockers that can simultaneously request locks in the system. The maximum number of lock objects is the number of objects that can simultaneously be locked in the system. Selecting appropriate values requires an understanding of your application and its databases. If the values are too small, then requests for locks in an application will fail. If the values are too large, then the locking subsystem will consume more resources than is necessary. It is better to err in the direction of allocating too many locks, lockers and objects as increasing the number of locks does not require large amounts of additional resources.
The recommended algorithm for selecting the maximum number of locks, lockers and lock objects, is to run the application under stressful conditions and then review the lock system's statistics to determine the maximum number of locks, lockers and lock objects that were used. Then, double these values for safety. However, in some large applications, finer granularity of control is necessary in order to minimize the size of the lock subsystem.
The maximum number of lockers can be estimated as follows:
The maximum number of lock objects needed can be estimated as follows:
For all access methods, you should then add an additional lock object per database, for the database's metadata page.
The maximum number of locks required by an application cannot be easily estimated. It is possible to calculate a maximum number of locks by multiplying the maximum number of lockers, times the maximum number of lock objects, times two (two for the two possible lock modes for each object, read and write). However, this is a pessimal value, and real applications are unlikely to actually need that many locks. Review of the lock subsystem statistics is the best way to determine this value.