Microsoft.EntityFrameworkCore.Database.Command:执行DbCommand失败,为什么?

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

我们正在了解错误的 SQL 语句,并通过我们团队的 nlog 目标将其发送给团队以获取可见性。

但是 SQL 语句没有任何问题...所以想知道为什么它们有时会失败?

错误 - Microsoft.EntityFrameworkCore.Database.Command:执行 DbCommand 失败(18,978ms)

然后我们在 azure SQL 中查找锁等,但什么也没有?没有接近 30 秒的超时设置...有时我们会在日志中的时间范围很短的情况下收到其他查询的错误。

下面是我们的 nlog 规则:

{
        "logger": "*",
        "minLevel": "Error",
        "maxLevel": "Fatal",
        "writeTo": "teamsError",
        "final": true
}

根本原因是什么?我们的 nlog 规则不应该是星号吗?

c# sql-server .net-core azure-sql-database asp.net-core-webapi
1个回答
0
投票

您处理这些随机的

DbCommand
超时,尽管您的 SQL 工作正常,但它们每隔几天就会出现一次。

可能会出现短暂的网络不稳定。尽管云通常可以很好地处理连接,但短暂的网络故障可能会导致超时。这些可能特别奇怪,因为它们不会持续发生并且很难在行动中捕捉到。

另一个因素可能是 Azure SQL 的内部资源管理。即使您没有达到 DTU 或 eDTU 等明显限制,临时资源争用仍然可能发生,导致查询偶尔失败。 Azure 可能会暂时限制资源,从而导致这些错误,尤其是在需求出现短暂激增的情况下。

您的日志记录设置是关键。现在,如果您仅捕获基本错误消息,则可能会错过可以解释问题的详细信息,例如确切的 SQL 错误代码或更具体的超时信息。捕获完整的异常堆栈(包括内部异常)至关重要。

您可能需要考虑在实体框架设置中使用

EnableRetryOnFailure
实现重试逻辑。这并不能解决根本原因,但它可以帮助减轻这些暂时性问题的影响,而无需引入更多的手动错误处理。

© www.soinside.com 2019 - 2024. All rights reserved.