在我们的 .NET 7 应用程序中,我们看到 EF Core 事件计数器
compiled-query-cache-hit-rate
始终远低于 100%。根据文档,情况不应该是这样的:
如果此计数器在 100% 以下保持稳定,则表明您的应用程序可能正在执行一些破坏查询缓存的操作 - 最好对此进行调查。
我想知道如何调查。我能以某种方式从 EF Core 中得出哪些查询无法缓存并且需要重新编译吗?
因为我们使用带有 Array Type Mapping 的 PostgreSQL 并且这个特性似乎并不经常使用,下面的查询让我想知道它是否会导致问题:
public class Service
{
internal static readonly List<ProcessState> NoReevaluationIsNeededStates = new() { ProcessState.Received };
public async Task<int> UpdateAsync(string referencedKey)
{
await using MyDbContext context = await ContextFactory.CreateDbContextAsync();
return await context.Points
.Where(point => point.Keys.Contains(referencedKey) && !NoReevaluationIsNeededStates.Contains(point.State))
.ExecuteUpdateAsync(entity => entity.SetProperty(point => point.State, ProcessState.Processed));
}
}
public class Point
{
public List<string> Keys { get; set; }
public ProcessState State { get; set; }
}
public enum ProcessState
{
Received,
Processed
}