web-dev-qa-db-ja.com

READ UNCOMMITTEDは静的データのパフォーマンスに違いをもたらしますか?

多くの選択クエリを取得するいくつかの静的テーブルがあります

これを各クエリに追加するかどうか、それによってパフォーマンスに違いはありますか?

SQLサーバー2014

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

ここで、以下のクエリを実行した後の待機時間

    select * 
from sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
        N'CLR_SEMAPHORE',    N'LAZYWRITER_SLEEP',
        N'RESOURCE_QUEUE',   N'SQLTRACE_BUFFER_FLUSH',
        N'SLEEP_TASK',       N'SLEEP_SYSTEMTASK',
        N'WAITFOR',          N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
        N'CHECKPOINT_QUEUE', N'REQUEST_FOR_DEADLOCK_SEARCH',
        N'XE_TIMER_EVENT',   N'XE_DISPATCHER_JOIN',
        N'LOGMGR_QUEUE',     N'FT_IFTS_SCHEDULER_IDLE_WAIT',
        N'BROKER_TASK_STOP', N'CLR_MANUAL_EVENT',
        N'CLR_AUTO_EVENT',   N'DISPATCHER_QUEUE_SEMAPHORE',
        N'TRACEWRITE',       N'XE_DISPATCHER_WAIT',
        N'BROKER_TO_FLUSH',  N'BROKER_EVENTHANDLER',
        N'FT_IFTSHC_MUTEX',  N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        N'DIRTY_PAGE_POLL',  N'SP_SERVER_DIAGNOSTICS_SLEEP')
order by wait_time_ms desc;

enter image description here

2
MonsterMMORPG

データが不変の場合、データベースを読み取り専用としてマークします。クエリ実行エンジンはこれを認識し、ロックをスキップします。ただし、メリットはわずかです。ロックが懸念される場合は、a)データが不変ではないことを意味するロックの競合があるか、b)取得するロックが多すぎて、必要に応じてインデックスを追加することで対処する必要がある大規模なスキャンを意味します。

詳細については、 SQL Serverのパフォーマンスを分析する方法 を参照してください。

4
Remus Rusanu

READ UNCOMMITTEDNOLOCKを使用するのと同じであり、データが変化しない場合、NOLOCKと同じパフォーマンス上の利点を提供します。

ただし、これは[〜#〜] not [〜#〜]すべてに対して高速なボタンです。コミットされていないデータはコミットされていないデータであり、基礎となるデータが頻繁に変更される場合は信頼すべきではありません。適切なコンテキストで使用してください。

また、カバーインデックス、つまりクエリを満たすインデックスを検討します。フィルター処理されたインデックスを使用して、喜びを見つけることもできます。 NOLOCK/READ UNCOMMITTED

1
Randolph West