最近我们将数据库移到了新服务器
旧服务器正在运行
Microsoft SQL Server 2017 (RTM-CU16) (KB4508218) - 14.0.3223.3 (X64) Jul 12 2019 17:43:08
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS)
新服务器正在运行
Microsoft SQL Server 2019 (RTM-CU2) (KB4536075) - 15.0.4013.40 (X64) Feb 3 2020 16:40:57
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Linux (CentOS Linux 8 (Core))
我们有一个使用数据库的 C# Windows 服务。它间歇性地停止或运行非常缓慢。
Windows 服务使用 .Net Framework 4.7.2,它调用一个用 .net 标准 2.0 编写的库,该库也进行 sql 调用。
我发现了这个关于为什么 SPID 的状态被暂停的问题,并看到我们的暂停 Spid 有 wait_type ASYNC_NETWORK_IO
根据文档,这
当任务被网络阻塞时发生在网络写入上。验证客户端是否正在处理来自服务器的数据。
重新启动 Windows 服务确实可以暂时解决问题。但是,这并不能帮助我解决问题的原因。
我主要使用的是 EntityFramework 6.4
[更新]
我已经开始跑步
dbcc inputbuffer(sessionId)
查看最后运行的 SQL
ASYNC_NETWORK_IO
通常表示 SQLServer 已准备好返回给客户端的结果,但客户端请求它们的速度不如 SQLServer 可以交付它们的速度快,或者网络速度变慢。C# 的一个常见场景是,如果您通过一个
IEnumerable<>
来自数据库的每行缓慢处理来使用结果。如果您没有返回数百万行,请尝试在其中放置 a.ToList()
或其他内容以在处理数据库之前缓冲来自数据库的所有结果。