locks オプション

locks オプションは、使用可能なロックの最大数を設定して、データベース エンジンによってロックに使用されるメモリの量を制限するために使用します。既定値は 0 です。0 の場合、データベース エンジンはシステム要件の変更に基づいてロック構造を動的に割り当てたり、割り当てを解除することができます。

locks を 0 に設定してサーバーを起動すると、ロック マネージャは 2,500 個のロック構造の初期プール用にデータベース エンジンから十分なメモリを取得します。ロック プールがなくなると、プール用のメモリが追加取得されます。

通常、データベース エンジンのメモリ プールから取得できるメモリよりも多くのメモリがロック プールに必要であり、より多くのコンピュータ メモリが使用できる (max server memory のしきい値に達していない) 場合、データベース エンジンはメモリを動的に割り当ててロック要求に応じます。ただし、そのメモリを割り当てることによって、オペレーティング システム レベルでページングが発生する場合、たとえば、別のアプリケーションが SQL Server のインスタンスと同じコンピュータ上で実行されていて、そのメモリを使用している場合は、ロック用に割り当てを増やすことはできません。動的なロック プールは、データベース エンジンに割り当てられたメモリのうち最大 60% まで取得できます。ロック プールがデータベース エンジンのインスタンスによって取得されたメモリの 60% に達した場合、またはコンピュータで使用できるメモリがなくなった場合、さらにロック要求があるとエラーが発生します。

SQL Server が動的にロックを割り当てるように構成することをお勧めします。ただし、locks を設定し、ロック リソースを動的に割り当てる SQL Server の機能を無効にすることができます。locks が 0 以外の値に設定されている場合、データベース エンジンは locks に指定された値よりも多くのロックを割り当てることができません。使用可能なロック数を超えたことを示すメッセージが表示された場合は、この値を大きくします。各ロックはそれぞれ 96 バイトのメモリを消費するため、この値を大きくした場合、状況によってはサーバー専用のメモリも増やす必要があります。

locks オプションも、ロックのエスカレートがいつ行われるかに影響を与えます。locks を 0 に設定すると、現在のロック構造で使用されるメモリがデータベース エンジンのメモリ プールの 40% に達したときに、ロックのエスカレートが行われます。locks が 0 に設定されていない場合は、ロック数が locks に指定された値の 40% に達したときに、ロックのエスカレートが行われます。

locks オプションは拡張オプションです。sp_configure システム ストアド プロシージャを使用して locks の設定を変更するには、show advanced options を 1 に設定する必要があります。新しい設定は、サーバーを再起動すると有効になります。

非均質メモリ アクセス (NUMA) を使用しているコンピュータでは、ロック設定は NUMA ノード単位となるため、4 つのノードのコンピュータで 10,000 の値を設定した場合、40,000 のロックを使用できます。NUMA ノードの数は、次のクエリを使用して確認できます。

SELECT COUNT(DISTINCT parent_node_id)
FROM sys.dm_os_schedulers 
WHERE parent_node_id <> 32

参照

概念

ロックおよび行のバージョン管理
ロックのエスカレーション (データベース エンジン)
サーバー構成オプションの設定

その他の技術情報

RECONFIGURE (Transact-SQL)
sp_configure (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手