【发布时间】: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_packet”
-
@user2196728,我会测试一下。我使用 MySQL Workbench 时遇到了同样的错误,我认为它不依赖于那个 ODBC 驱动程序。
-
关于 MySQL Workbench 的错误存在特定问题。我会在服务器端尝试真正的 SQL,避免使用第三方软件