Bre*_*zar 4 sql-server hints t-sql cross-apply
我需要将查询提示(如NOWAIT
或NOLOCK
)应用于CROSS APPLY
此查询中的 。我该怎么做:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT *
FROM sys.objects obj WITH (NOLOCK)
INNER JOIN sys.stats stat WITH (NOLOCK) ON stat.object_id = obj.object_id
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) sp
Run Code Online (Sandbox Code Playgroud)
我无权访问函数内容(出于显而易见的原因。)
我继续从问题中删除了repro,以使其更清楚。我不太关心重现阻塞的能力。(它也发生在客户环境中,以及第 2548 期的 First Responder Kit 中。)
你不能,据我所知。
人们可能会尝试这样的事情:
OPTION (TABLE HINT (sp, READUNCOMMITTED))
Run Code Online (Sandbox Code Playgroud)
...但是对于不是真正表格的东西,这将失败。
OPENROWSET
不能在TABLE HINT
子句中指定表值或函数“sp” 。
它也会失败,因为所需的提示会影响语义。
如果您需要访问的东西对设置隔离级别没有响应,您将不得不报告缺陷并希望得到修复。
有一个关于 DMV 和什么不尊重隔离级别的 Connect 项目,据我所知,官方说法是系统功能不保证隔离级别。
亚伦伯特兰说:
有一些内置函数根本不遵守隔离级别,无论提示如何到达那里(例如
OBJECT_SCHEMA_NAME()
.
此外,正如马丁·史密斯所说:
问题实际上是如何将其应用于 TVF - 而不是
CROSS APPLY
Run Code Online (Sandbox Code Playgroud)SELECT * FROM sys.dm_db_stats_properties(1,1) WITH (NOLOCK)
也失败了。但相反,这成功了:
Run Code Online (Sandbox Code Playgroud)SELECT * FROM sys.objects obj WITH (NOLOCK) INNER JOIN sys.stats stat WITH (NOLOCK) ON stat.object_id = obj.object_id CROSS APPLY sys.objects obj2 WITH (NOLOCK)
归档时间: |
|
查看次数: |
365 次 |
最近记录: |