3

SQL Server のロック メカニズムに関するいくつかの質問をしたいと思います

  1. SQL ステートメントでロック ヒントを使用していない場合、SQL Server は既定で PAGELOCK ヒントを使用します。私は正しいですか?はいの場合、なぜですか?あまりにも多くのロックを管理していることが原因である可能性がありますが、これが唯一の欠点でした。他にもあれば教えてください。また、妥当な場合にこのデフォルトの動作を変更できるかどうかも教えてください。

  2. サーバー側アプリケーション、同期サーバー (同期フレームワークを使用しない) を作成しており、C# コード ファイルでデータベース クエリを記述し、ODBC 接続を使用してそれらを実行しています。ここで問題は、欠点を念頭に置いてデフォルトのロックを Page から Row に変更する最良の方法は何ですか(たとえば、クエリにロックヒントを追加することを計画しています)。

  3. SQL クエリ (SELECT/DML) がトランザクションのスコープなしで実行され、ステートメントにロック ヒントが含まれている場合、どの種類のロックが取得されますか (共有、更新、排他など)? AND トランザクション スコープ内では、ROWLOCK ヒントが使用されている場合、トランザクションの分離レベルはロック タイプに影響します。

  4. 最後に、上記のすべてのシナリオを自分でテストして体験できるように、サンプルを提供してくれる人がいれば (ドット ネット コードや SQL スクリプトなど)

ありがとうムバシャール

4

2 に答える 2

3
  1. いいえ。必要に応じてロックをエスカレートし、必要に応じてロックします。

  2. DB エンジンに管理させる

  3. ポイント2を参照

  4. ポイント2を参照

キューや非ブロック (ダーティ) 読み取りなど、特定の特定の動作が必要な場合にのみ、ロック ヒントを使用します。

より一般的に言えば、DB エンジンがデフォルトでやりたいことができないのはなぜだと思いますか?

于 2010-01-19T10:57:26.480 に答える