mysql - 对大型表进行简单的 mySQL 查询会导致 "MySQL server has gone away"消息

标签 mysql sql

我是一名应用统计学家,不熟悉 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)。我对这个特定的表执行任何操作都会得到相同的结果(查询 min,尝试添加索引等)。

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

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

最佳答案

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

关于mysql - 对大型表进行简单的 mySQL 查询会导致 "MySQL server has gone away"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338950/

相关文章:

php - 通过php将html表单数据发送到sql数据库

mysql - 合并数据 - 保留唯一 key

mysql - SQL仅选择列上具有最大值的行

mysql删除受组限制的行

sql - Oracle 转换错误时默认为 null - 时间戳

sql - 获取 LEFT OUTER JOIN 的第一行

php - 如何使用 whereIn 函数 Laravel 约束渴望加载

mysql - 根据两列按相邻行进行分组

sql - 两个表之间最近点的唯一分配

jQuery Select2 - 在保存时添加自定义键入的值