我正在努力解决我们的登录过程中的一些主要延迟问题,并且在对 Identtiy Server 4 进行大量日志记录时,我发现每次登录时都会运行一组重复的查询。
有没有使用 IS4 经验的人知道为什么会发生这种情况或可以做些什么?这些调用似乎来自 IS4 的中间件,而不是我们的任何自定义代码。
编辑:我在我的数据库中添加了一些跟踪查询,并发现以下内容:
这些查询集在整个登录过程中运行了大约 7 次。其他查询也会运行,但这些查询特别运行七次。
我知道以这种方式使用查询存储,但我对存储的执行计划和数据如何工作的理解,如果传入了不同的参数,它将在其中一个表中显示为新行(查询存储或 query_store_plan)。由于查询存储中每个查询只有一行,每行一个计划,我的结论是它只寻找一个特定的客户端 ID。我们称该客户端为“AdminTool”
在登录过程中运行相同的查询七次似乎非常低效。我确信其中一些与令牌生成和其他数据无法持久化的事情有关,但七个似乎仍然过多。
执行计划中的一个示例查询是:
SELECT [x.IdentityProviderRestrictions].[Id], [x.IdentityProviderRestrictions].[ClientId],
[x.IdentityProviderRestrictions].[Provider]
FROM [ClientIdPRestrictions] AS [x.IdentityProviderRestrictions]
INNER JOIN (SELECT TOP(1) [x6].[Id] FROM [Clients] AS [x6]
WHERE [x6].[ClientId] = @__clientId_0
ORDER BY [x6].[Id])
AS [t5]
ON [x.IdentityProviderRestrictions].[ClientId] = [t5].[Id]
ORDER BY [t5].[Id]
执行计划的参数列表包括:
<ColumnReference Column="@__clientId_0" ParameterDataType="nvarchar(200)"
ParameterCompiledValue="N'AdminTool'" />