New engine freelock lists

In release 11.0, when a process that is running on a multi-engine SQL Server requests a lock, it looks for one in its engine’s freelock list. If the engine freelock list is out of locks, SQL Server moves a certain number of locks from its global freelock list to the engine freelock list. For single-engine SQL Servers, the entire global freelock list is moved to the engine freelock list at server start-up time.

After an engine completes a process, all locks held by that process are released and returned to that engine’s freelock list. This reduces the contention of each engine accessing the global freelock list. However, if the number of locks released to the engine exceed the maximum number of locks allowed in the engine’s freelock list, SQL Server moves a number of locks to the global freelock list. This replenishes the number of locks that are available to other engines from the global list.

You can configure the maximum number of locks available to the engine freelock lists as a percentage of the total number of locks available to your server with the max engine freelocks configuration parameter. You can also configure the number of locks transferred back and forth between the engine and global freelock lists using the freelock transfer block size parameter. For information about these parameters, see Chapter 11, “Setting Configuration Parameters,” in the System Administration Guide.