【问题标题】:MySql.Data.MySqlClient.MySqlException: Timeout expiredMySql.Data.MySqlClient.MySqlException:超时已过期
【发布时间】:2011-03-29 09:35:30
【问题描述】:

最近,我的网络应用程序中的特定页面抛出了

异常详情:MySql.Data.MySqlClient.MySqlException:超时 已到期。在完成之前超时时间已过 操作或服务器没有响应。

虽然我使用Ibtais作为持久层,但还是会出现这个错误。我已经重新启动了 MySql 服务实例,但仍然出现同样的错误。以前没有发生,但最近经常发生。

部署在服务器上的所有 Web 应用程序都使用 Ibatis,而 DB 服务器保持在安装 IIS 的同一台机器上。大约有 8000 条记录,其中大约 300 到 500 条将在页面加载时被过滤

对问题原因有什么见解吗?

【问题讨论】:

  • 您的 CommandTimeout 参数是否设置在您的连接字符串中?也许你可以增加价值?
  • @Nathan 不!是以秒为单位还是以毫秒为单位?
  • 我相信毫秒。我的 MySQL 连接字符串中有 CommandTimeout=30000。
  • 我只是在看这个,根据文档,CommandTimeout 以秒为单位,而不是毫秒。只是觉得有人可能想知道。见25.2.3.1.11. CommandTimeout on dev.mysql.com
  • 但是this page 确实显示了连接字符串设置是在几秒钟内使用的。

标签: c# mysql query-optimization ibatis timeoutexception


【解决方案1】:

您可以将命令超时设置为 0,但这不是一个好主意。有些请求可能会无限期地进行。

首先存在导致查询超时的潜在问题。您是否在插入、更新或以任何方式使用会锁定表的大型二进制值?这是我在如此少量的数据上看到此类错误的最常见原因。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我发现了这个MySQLConnection--Specifying default command timeout

    只需将“default command timeout=xxx”添加到您的 connectString 中,该键的值以秒为单位。
    我试过了,它对我有用。

    【讨论】:

      【解决方案3】:

      让你的连接字符串看起来像这样:

      DotNet 框架:

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

      点网核心

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

      【讨论】:

        猜你喜欢
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 2015-09-15
        相关资源
        最近更新 更多