sql >> データベース >  >> RDS >> Sqlserver

ロックのエスカレーション - ここで何が起こっていますか?

    "ロック エスカレーション " は、SQL が大規模な更新のロックを処理する方法です。SQL が大量の行を変更する場合、データベース エンジンは、多くの小さなもの (行ロックなど) をロックするよりも、少数の大きなロック (テーブル全体など) を取得する方が効率的です。 .

    ただし、テーブル全体をロックすると、他のクエリが長時間ロックアウトされる可能性があるため、巨大なテーブルがある場合、これは問題になる可能性があります。これはトレードオフです。多くの細粒度のロックは、少数 (または 1 つ) の粗粒度のロックよりも遅く、テーブルのさまざまな部分をロックする複数のクエリがあると、あるプロセスが別のプロセスを待機している場合にデッドロックが発生する可能性があります。

    テーブルレベルのオプション LOCK_ESCALATION があります 、SQL 2008 の新機能で、ロックのエスカレーションを制御できます。デフォルトの「TABLE」では、ロックをテーブル レベルまでエスカレートできます。 DISABLE は、ほとんどの場合、テーブル全体へのロックのエスカレーションを防ぎます。 AUTO は、表がパーティション化されている場合を除き、表のロックを許可します。この場合、ロックはパーティション・レベルまでしか作成されません。 こちらのブログ投稿 詳細については

    TABLE は SQL 2008 のデフォルトであるため、テーブルを再作成するときに IDE がこの設定を追加するのではないかと思います。 2005年のインスタンス。また、TABLE がデフォルトであるため、スクリプトを再実行するときにその行を安全に削除できます。

    また、この設定が存在する前の SQL 2005 では、すべてのロックがテーブル レベルにエスカレートされる可能性があることに注意してください。つまり、"TABLE" が SQL 2005 の唯一の設定でした。



    1. MariaDBテンポラルテーブルとは何ですか?

    2. キーによって日付範囲の行を生成する方法

    3. データベースからテーブルを削除するOracle10g

    4. Oracleから指定された行を削除する最適な方法