Eu tenho uma consulta simples, usando uma coluna indexada, em um conjunto de dados muito pequeno, retornando 1 linha, atingindo o Banco de Dados SQL do Azure - ocupando mais de meio segundo. Outra execução anterior desta consulta levou 38 ms.
Plano de Execução (obrigado JD)
A pergunta:
SELECT [a].[Id], [a].[ClaimType], [a].[ClaimValue], [a].[UserId]
FROM [AspNetUserClaims] AS [a]
WHERE [a].[UserId] = @__id_0
Existem 36 linhas no banco de dados. O UserId é uma string que é um GUID. O ClaimType e ClaimValue são strings com 1 a 35 caracteres.
2 linhas de dados:
Id ClaimType ClaimValue UserId
5 SysAdmin * e69fac60-ea9b-4f73-8c7b-4cb75ec9721a
6 Admin Arapahoe e69fac60-ea9b-4f73-8c7b-4cb75ec9721a
Como faço para descobrir por que a leitura lenta (às vezes)?
O custo desta consulta é trivial. Portanto, se às vezes fica lento, provavelmente está bloqueando. O Query Store diria a você
Se estiver lento porque outras sessões estão modificando a tabela e ela está bloqueada, você pode ler com isolamento SNAPSHOT ou mudar o banco de dados para o modo READ_COMMITTED_SNAPSHOT.