私はインタビューでこの質問をされたが、答えはなかった。ここで誰か説明できますか?
私はインタビューでこの質問をされたが、答えはなかった。ここで誰か説明できますか?
回答:
DBロックは、行、ページ、またはテーブル全体またはインデックスに存在できます。トランザクションが進行中の場合、トランザクションによって保持されているロックがリソースを占有します。ロックのエスカレーションは、システムが複数のロックをより高いレベルのロックに統合する場所です(たとえば、複数の行ロックをページに統合したり、複数のページをテーブル全体に統合したりする)。
これは自動的に行われますが、テーブルにフラグを設定して(オンラインブックのALTER TABLEを参照)、その特定のテーブルのロックエスカレーションのポリシーを制御できます。特に、SybaseとSQL Serverの古いバージョンでは、2つのプロセスが別々の行を同じページに同時に書き込んでいたときに、ロックのエスカレーションが早すぎるか、過度に問題でした。十分に戻った場合(IIRC SQL Server 6.5)、SQL Serverには実際には行ロックがなく、テーブルまたはページのみをロックできました。この場合、同じページにレコードを挿入する間で競合が発生する可能性があります。多くの場合、テーブルにクラスター化インデックスを配置して、新しい挿入が別のページに送られるようにしました。
SQL Serverは、いくつかの細粒度の低レベルロックを粗粒度の高レベルロックに変換することにより、メモリオーバーヘッドを削減するためにロックエスカレーションを行います。
これは、ある行ロックは、ページ・ロックにエスカレートしていることを神話間違っている@ConcernedOfTunbridgeWellsによって上記と同じ。
テーブルの行更新が非常に少ない場合、SQLエンジンはそれらの行の行ロックまたはそれらのページのページロックの取得を試みます。Row-Lockを使用したとしましょう。ただし、行の更新によってしきい値(〜5kロック)が増加すると、複数の行ロックを取得する代わりに、単一のテーブルロックが取得されます。したがって、これにより、複数の行ロックを解放し、単一のテーブルロックを取得することでメモリのオーバーヘッドが削減されますが、同時実行性は向上します。ページロックでも同じことが起こります。
ロックのエスカレーションのしきい値は、ロック・エスカレーションの詳細な説明はMSDN BOLにここで言及された時、少なくとも5000個のロックで、いくつかの要因に依存します。https://technet.microsoft.com/en-us/library/ms184286(v = sql.105).aspx