Eu preciso aplicar uma dica de consulta (como NOWAIT
ou NOLOCK
) CROSS APPLY
nesta consulta. Como eu faço isso:
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
Não tenho acesso ao conteúdo da função (por motivos óbvios).
Eu fui em frente e removi a reprodução da pergunta para torná-la mais clara. Estou menos preocupado com a capacidade de reproduzir o bloqueio. (Também está acontecendo em ambientes de clientes e no First Responder Kit na edição nº 2548.)
Você não pode, até onde eu sei.
Pode-se tentar coisas como:
...mas isso falhará para coisas que não são tabelas reais.
Também falharia porque a dica desejada afeta a semântica.
Se o que você precisa acessar não responder à configuração do nível de isolamento, você terá que relatar a deficiência e esperar por uma correção.
Havia um item do Connect sobre DMVs e outros enfeites que não respeitavam o nível de isolamento e, pelo que me lembro, a palavra oficial era que o nível de isolamento não era garantido para as funções do sistema.
Aaron Bertrand disse:
Além disso, como Martin Smith observou: