Sql Server ISO LATION LEVELの3パターンを修正

1413 ワード

なぜISO LATION LEVELを変更するのかというと、デフォルトのSQLで使用されているISO LATIONレベルがRead Commitedであるため、共有ロックが発生し、パフォーマンスに影響を与え、updateと競合したり、デッドロックが発生したりすることがあります.しかし、すべてのqueryがisolationレベルをread uncommittedに変更する必要はありません.dirty readをもたらすからです.nolocksql queryは、次の3つの方法で追加できます.
SELECT xxx FROM table XXX nolock .

Sql statement :
SET TRANSACTION ISOLATION LEVEL
    { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SNAPSHOT
    | SERIALIZABLE
    }
[ ; ]

https://msdn.microsoft.com/en-sg/library/ms173763.aspx
For Entity framework :
using (var t = new TransactionScope(TransactionScopeOption.Required,
    new TransactionOptions { 
        IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted 
    }))
{
   // query
 }

最近実行されたSQLのISO LATION LEVELを検索する方法:
SELECT CASE transaction_isolation_level 
WHEN 0 THEN 'Unspecified' 
WHEN 1 THEN 'Read Uncommitted' 
WHEN 2 THEN 'Read Committed' 
WHEN 3 THEN 'Repeatable Read' 
WHEN 4 THEN 'Serializable' 
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL ,session_id, login_time,login_name,logical_reads,[status]
,[text_size]
FROM sys.dm_exec_sessions 
where session_id = 'SPID'
order by login_time desc

ここで、SPIDはSQL PROFILERから入手可能である.