【问题标题】:Simple mySQL Query Over Large Table Results in "MySQL server has gone away" Message对大表的简单 mySQL 查询导致“MySQL 服务器已消失”消息
【发布时间】:2013-12-02 22:09:55
【问题描述】:

我是一名应用统计学家,不熟悉 mySQL,希望得到您的建议。

错误: 在对大型 mySQL 表(略超过 20 亿行)运行相对简单的查询 (SELECT MAX(Timestamp) FROM Database.Table;) 时,服务器运行了大约十分钟并显示错误:

错误消息文本:

在 R 中:

08S01 2013 [MySQL][ODBC 5.2(a) Driver][mysqld-5.5.32-31.0]Lost connection to MySQL server during query
[RODBC] ERROR: Could not SQLExecDirect 'SELECT MAX(Timestamp) FROM Database.Table;'

在 mySQL 工作台中:

Error Code: 2013. Lost connection to MySQL server during query  
Duration: 600.495 sec

可能的潜在客户: 在监视服务器状态时,查询显示为“放弃”并在 InnoDB 缓冲区使用率达到 100% 时返回错误。但是 innodb_buffer_pool_size 已经设置为最大值(大约 76 GB)。我对这个特定的表做任何事情(查询最小值、尝试添加索引等)都得到了相同的结果。

我已经通过 RStudioServer(一开始可能不是一个好主意)和 mySQL Workbench 运行查询得到了这个结果。我能够在结构相同的较小数据库表(大约 7 亿行和其他较小的行)上运行查询而不会出现问题。

为什么会发生这个错误有点令人困惑,因为像 Find Max 这样的查询根本不应该将大量数据加载到内存中 - 它应该只对 Database.Table 的 TimeStamp col 中的所有值进行比较,保持并返回最大值,并返回它。

【问题讨论】:

  • 我认为使用 ODBC 可能是个问题...您可以直接在 Mysql 服务器上运行您的查询吗?
  • 也许你应该尝试在mysql服务器端处理参数“wait_timeout”和“max_allowed_pa​​cket”
  • @user2196728,我会测试一下。我使用 MySQL Workbench 时遇到了同样的错误,我认为它不依赖于那个 ODBC 驱动程序。
  • 关于 MySQL Workbench 的错误存在特定问题。我会在服务器端尝试真正的 SQL,避免使用第三方软件
  • 试试这个:hassmann-software.de/…

标签: mysql sql


【解决方案1】:

我很惊讶,没有人问...您甚至在被查询的时间戳列上有索引吗?它应该几乎是即时的......但不要只是为索引构建索引,索引应该基于更常见的查询条件,但如果基于统计信息,并且您正在根据事情发生的时间进行此查询和其他查询,索引肯定会有所帮助。此外,数据行有多大,可能还有哪些其他列可能会运行查询...构建复合索引(多字段索引)可能会有所帮助

【讨论】:

  • 我希望在此列上有一个索引,我尝试运行的第一件事就是添加这样一个索引。但是得到了同样的错误。因此,然后我尝试了一个简单的查询,看看我是否可以让它运行它,但无济于事。在遵循 user2196728 的优秀(但迄今为止不成功)的建议之后,我真的认为这个问题与我的 InnoDB 缓冲区填满有关。 (考虑到这个查询应该使用很多内存,这很奇怪)。
  • 哦,有超过 20 亿行。在运行简单查询后,我想将外键添加到另一列。感谢您的反馈。
  • 似乎与此错误消息相关的问题从未处理过Index。但可以肯定的是,索引一般不会坏;)
【解决方案2】:

半解决方案(或者,我是如何解决的)

每个人的建议都非常正确。

我正在运行查询的列未编入索引。有这么多行(数十亿),即使是快速的机器也需要一两天来运行一个简单的查询。向该列添加索引(这需要十个小时)现在意味着查询时间需要几秒钟或几分之一秒。

要调整的键 mySQL 变量:wait_timeoutmax_allowed_packet 以解决“MySQL 服务器已消失”消息。

我与innodb_buffer_pool_size 的问题似乎是一个幻象,与我的主要问题无关。

感谢您对 user2196728 和 DRapp 的所有帮助

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2012-05-25
    • 2011-06-07
    • 2010-12-20
    相关资源
    最近更新 更多