分析 EF Core 查询缓存

问题描述 投票:0回答:0

在我们的 .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
}

c# entity-framework entity-framework-core
© www.soinside.com 2019 - 2024. All rights reserved.