MySql.Data.MySqlClient.MySqlException: 超时错误

18

最近我的Web应用程序中的一个特定页面会抛出以下异常:

异常详细信息:MySql.Data.MySqlClient.MySqlException: 超时。 操作完成之前超时时间已过期或服务器未响应。

尽管我使用Ibatis作为持久化层,但仍然会出现此错误。我已经重启了MySql服务实例,但仍然会出现相同的错误。这种情况以前没有发生过,但最近频繁出现。

所有部署在服务器上的Web应用程序都使用Ibatis,并且DB服务器位于安装IIS的同一台机器上。该表中有大约8000条记录,在页面加载时会筛选出约300到500条记录。

对于问题的原因有任何见解吗?


@Nathan 不是!这是以秒还是毫秒为单位? - Gopi
3
根据文档显示,CommandTimeout 的单位是秒而非毫秒。我只是想让大家知道。参见dev.mysql.com中的25.2.3.1.11节。 - Phil Baines
哦,抱歉,那是MySqlCommand上的CommandTimeout属性,不是连接字符串。 - Phil Baines
1
但是此页面显示连接字符串设置以秒为单位使用。 - Phil Baines
请您提供一个查询示例,以便我们查看执行查询时是否存在问题? - NoLifeKing
显示剩余3条评论
3个回答

30

5
您可以将命令超时设置为0,但这并不是一个好主意。有些请求可能会无限期地进行下去。
首先,导致查询超时的潜在问题需要解决。您是否正在插入、更新或以任何方式处理大型二进制值从而锁定了表格?这是我在处理如此少量数据时看到此类错误的最常见原因。

1

将您的连接字符串设置为以下内容:

DotNet Framework:

<add key="MYSQL_CONNECTION_STRING_RDS" value="Uid=userid;Password=pass;
     Server=localhost;Port=3306;
     Database=dbname;default command timeout=0;SslMode=none" 
/>

DotNet Core

"MYSQL_CONNECTION_STRING_RDS": {
    "ConnectionString": "Server=localhost;Database=dbname;user=userid;password=pass;default command timeout=0;",
    "ServerVersion": "8.0.22"
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接