c# - 尝试删除条目时收到 System.IO.IOException
问题描述
我有一个包含 60 个表的数据库。一个是person
被大量其他表(大约 40 个)引用的表,主要使用ON DELETE CASCADE ON UPDATE CASCADE
.
使用 Npgsql,我尝试运行以下命令:
DELETE FROM person WHERE id = @PersonId
结果我收到了一个 System.IO.Exception:
Npgsql.NpgsqlException (0x80004005): 从流中读取时出现异常 ---> System.IO.IOException: Von der Übertragungsverbindung können keine Daten gelesen werden: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat。---> System.Net.Sockets.SocketException: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht Richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat bei System.Net.Sockets。 Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset,
在英语中,内部异常是
Npgsql.NpgsqlException (0x80004005):从流中读取时出现异常---> System.IO.IOException:无法从传输连接中读取数据:连接尝试失败,因为远程站在一段时间后没有正确响应, 或已建立的连接错误,因为连接的主机没有响应。---> System.Net.Sockets.SocketException: 连接尝试失败,因为远程站在一定时间后没有正确响应,或者连接失败,因为连接的主机没有响应 System.Net.Sockets。System.Net.Sockets.NetworkStream.Read (Byte [] buffer, Int32 offset, Int32 size) 处的 Socket.Receive (Byte [] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) --- 内部异常堆栈跟踪结束
在 Postgres 日志中它说:
2019-03-28 12:42:15.077 CET [75060] LOG: konnte Daten vom Client nicht empfangen: unrecognized winsock error 10053
我想这不是死锁,因为日志中没有死锁消息。
我认为这与表被这么多外键引用的事实有关。但我不知道如何进一步调查。
解决方案
根据例外情况,此问题与长时间运行的脚本超时有关。您没有包含代码示例,因此我无法专门提供增加此值的语法,但设置commandTimeout = 0
将禁用超时并解决问题。
要在评论中解决您的问题,
有什么办法可以调查为什么需要这么长时间?
它可能只是删除大量记录。您应该在 C# 之外运行查询,以确保在将查询插入代码之前对其进行优化。
删除大量记录可能需要一段时间,您应该研究truncate
或其他一些清除设计,例如转储到临时表等。
推荐阅读
- node.js - 使用猫鼬搜索短语,表达
- neo4j - 在 Neo4j 中查找 2 跳邻域,不包括某些特定关系
- javascript - Sails js错误:握手不活动超时
- node.js - 如何通过在猫鼬中分组返回两个匹配条件的计数值?
- scala - spark scala 如何计算自 1970-01-01 以来的天数
- c# - 从计划任务运行的另一个 DotNet EXE 运行 DotNet exe
- html - 自定义旋转框箭头
- python-3.6 - Python 脚本运行但不工作并且没有抛出错误
- python - 如何在 SQLite 中使用 peewee 更改字段的数据类型
- sql - 在 postgres Sql 中按级别和 regexp_substr 连接