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

SQL Server:ストアド プロシージャでのダーティ リードの防止

    ダーティ リードを防ぐことはできません。ライターは、排他的なロックを取得して、正直な、コミットされた読み取り、読み取りを防ぎます。しかし、何もありません ダーティリードを防ぐために行うことができます。ダーティ リーダーは、ダーティ リードをやめる必要があります。

    Customer テーブルをポーリングするコードが制御下にあると仮定すると、解決策はクエリからダーティ リード ヒントを削除することです。書き込みでポーリングがブロックされるようになるため、これはおそらく競合の原因となります。そのための最善の解決策は、行のバージョン管理 を有効にすることです。 :

    ALTER DATABASE [<DBNAME>] SET ALLOW_SNAPSHOT_ISOLATION ON; 
    ALTER DATABASE [<DBNAME>] SET READ_COMMITTED_SNAPSHOT ON;
    

    次に、ヒントなしで、通常のクエリとして Customer から単純にポーリングします。行のバージョン管理が開始され、クエリ スキャンが更新前のロックされていないバージョンの行にリダイレクトされるため、ポーリングは書き込みの背後でブロックされません。

    もう 1 つ注意:500 ミリ秒ごとにポーリングしますか?おそらく、クエリ通知メカニズムを使用してキャッシュを無効にする必要があります。The Mysterious を参照してください。通知 .



    1. SQL Serverで重複する行を削除するにはどうすればよいですか?

    2. SQL Server 2008:TOP 10 と区別

    3. (1つのテーブル)行を挿入

    4. Persistence.createEntityManagerFactory()が戻るまでに非常に長い時間がかかります