READ UNCOMMITTED 隔离级别仅更改读取器的行为。在READ COMMITTED 和更高的隔离级别中,当一个任务试图从一行中读取时,它首先向锁管理器请求一个共享锁。只有在没有来自其他会话的现有排他锁的情况下,该请求才会被兑现,否则它将不得不等待它。
在READ UNCOMMITTED 中,读者不会请求共享锁,因此没有机会等待可能的独占锁被释放。
但是,无论使用何种隔离级别,更新时的锁定行为都是相同的。与任何其他悲观隔离级别一样,排他锁仍在READ UNCOMMITTED 中进行(并保持到事务结束)。
查询完成所需时间的增加可归因于此,也可归因于某些资源争用,很可能与内存有关。简而言之,您的查询与同时运行的其他查询竞争数据缓存。
记下一天中不同时间的page life expectancy柜台:
SELECT @@SERVERNAME AS [Server Name], [object_name], instance_name, cntr_value AS [Page Life Expectancy]
FROM sys.dm_os_performance_counters WITH (NOLOCK)
WHERE [object_name] LIKE N'%Buffer Node%' -- Handles named instances
AND counter_name = N'Page life expectancy' OPTION (RECOMPILE);
另外,要查看哪些数据占用的空间最多,请使用以下查询:
SELECT OBJECT_NAME(p.[object_id]) AS [Object Name], p.index_id,
CAST(COUNT(*)/128.0 AS DECIMAL(10, 2)) AS [Buffer size(MB)],
COUNT(*) AS [BufferCount], p.Rows AS [Row Count],
p.data_compression_desc AS [Compression Type]
FROM sys.allocation_units AS a WITH (NOLOCK)
INNER JOIN sys.dm_os_buffer_descriptors AS b WITH (NOLOCK)
ON a.allocation_unit_id = b.allocation_unit_id
INNER JOIN sys.partitions AS p WITH (NOLOCK)
ON a.container_id = p.hobt_id
WHERE b.database_id = CONVERT(int,DB_ID())
AND p.[object_id] > 100
GROUP BY p.[object_id], p.index_id, p.data_compression_desc, p.[Rows]
ORDER BY [BufferCount] DESC OPTION (RECOMPILE);
[可以在此处找到此和其他诊断查询:http://sqlserverperformance.wordpress.com/]