Sql-Server

READ UNCOMMITTED 是否會對靜態數據產生任何性能差異?

  • August 1, 2016

我有一些靜態表可以獲得很多選擇查詢

我想知道我是否將它添加到每個查詢中,這是否會產生任何性能差異?

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;

在此處輸入圖像描述

如果您的數據是不可變的,請將數據庫標記為只讀。查詢執行引擎會辨識這一點並跳過鎖定。然而,好處是微乎其微的。如果擔心鎖定,則意味著a)您有鎖定衝突,這意味著數據不是不可變的或b)您獲得了太多鎖,這意味著需要通過根據需要添加索引來解決大型掃描。

有關詳細資訊,請閱讀如何分析 SQL Server 性能

READ UNCOMMITTED與 using 相同NOLOCK,如果數據沒有變化,它將提供與NOLOCK.

不過,這並不是一個適用於所有事情的快速按鈕。未送出的數據是未送出的數據,如果底層數據確實經常更改,則不應信任。確保在正確的上下文中使用它。

我還會查看覆蓋索引,即滿足您查詢的索引。您還可以通過過濾索引找到樂趣。在打開NOLOCK/之前,我會先看看那裡READ UNCOMMITTED

引用自:https://dba.stackexchange.com/questions/145480