【问题标题】:How can I execute SQL queries that take longer 99,999 seconds on MySQL Workbench?如何在 MySQL Workbench 上执行耗时 99,999 秒的 SQL 查询?
【发布时间】:2013-05-28 11:20:35
【问题描述】:

更新:问题现在是fixed


我想执行一个执行时间超过 99,999 秒的查询(例如SELECT SLEEP(150000);)。要更改 MySQL Workbench 中的超时,我们必须转到编辑 → 首选项 → SQL 编辑器 → DBMS 连接读取超时(以秒为单位)。但是,DBMS connection read time out 字段最多只能接受 5 个数字,将该字段设置为 0 相当于默认参数(600 秒)。如果查询花费的时间超过超时时间,我会收到错误消息:Error Code: 2013. Lost connection to MySQL server during query

因此我的问题是:是否可以将此限制增加到超过 99,999 秒? 我使用带有 MySQL Workbench 5.2.47 CE 的 Windows 7 64 位 Ultimate。

DBMS connection read time out 字段:

超时问题(0相当于默认参数(600秒)):

【问题讨论】:

  • 没有。认真的吗?您需要手动运行耗时超过 27 小时的查询吗?也许你应该重新评估情况......
  • 您真的不应该在生产环境中运行耗时超过几分钟的查询。如果数据很多,小批量运行。
  • 谢谢!我需要从 50 GB 的表中提取一些信息并将它们放入一个新表中。在此提取过程中,我进行了一些内存连接,以用相应的 ID(外键)替换一些文本属性。我还不明白为什么这个查询需要超过 99,999 秒,但是当我调查它运行一些 EXPLAIN 时,我很想知道是否有任何方法可以绕过 MySQL Workbench 中的这个 99,999 秒限制。通常设置为参数 0 意味着无限:是否有任何技术问题解释为什么 MySQL Workbench 不允许这样做?
  • 我想我可以看看如何优化你的SELECT SLEEP(150000) 语句。
  • @chiastic-security :)

标签: mysql-workbench


【解决方案1】:

可能没有人认为您需要如此长的超时时间,因此您仅限于当前可设置的内容。但是在 http://bugs.mysql.com 上打开一个功能请求,建议让 0 完全禁用超时或允许更大的值。

【讨论】:

    【解决方案2】:

    此问题现已在 MySQL Workbench 6.0.3 (2013-07-09) 中得到解决:请参阅 bug reportchange log

    【讨论】:

      【解决方案3】:

      嗯,在欧洲,我们认为逗号是小数分隔符。你的意思是 100k 秒吗?我在您的 cmets 中看到您正在处理 50 GB。即便如此,如果您需要超过一个小时,您就错过了 Indeces。您必须知道它们不会在单个查询中正确重建,因此如果您加入大量插入,您将获得扫描行的笛卡尔积 - 换句话说,您的查询可能会运行数周甚至数月。

      解决方案:

      1. 填写基本数据,此处不使用连接。
      2. 更改表以设置索引。
      3. 运行ANALYZE <tablename>
      4. 做其他事情。

      如果您觉得在执行该过程时遇到问题,请在查询前添加 EXPLAIN 关键字并发布结果。

      (我有一个每 30 分钟导入大约 80GB 的 cronjob - MySQL 肯定可以处理。)

      【讨论】:

      • 感谢您的建议,是的,我的意思是 10 万秒。使用索引确实可以将运行时间减少到仅针对启动此问题的特定查询的 1 小时,但我仍然很想知道在 MySQL Workbench 中我如何执行查询需要超过 99,999 秒 :) 我没有看到设置这样一个限制的重点。
      猜你喜欢
      • 2012-07-21
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 2023-02-16
      • 2015-02-14
      相关资源
      最近更新 更多