如何确定SQL查询何时结束?

时间:2014-12-27 19:34:17

标签: mysql sql database

有没有办法弄清楚SQL查询在启动后结束的时间?换句话说,有没有办法计算查询执行前查询需要多长时间? (粗略估计没问题!)

ALTER IGNORE TABLE mytbl ADD UNIQUE (c);

我在拥有3500万条记录的innodb表上运行此查询。 c是varchar(255)

此命令已运行10个小时,但仍在运行。如果我接近尾声,我不想取消。

我感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:4)

摘自ServerFault解决方案:

解决方案是测量查询在事实表的表扫描中扫描行的速度。这由Handler_read_rnd_next状态变量显示。这是一个简单的观察方式(innotop是另一种方便的方式):

mysqladmin extended -r -i 10 | grep Handler_read_rnd_next
-- ignore the first line of output...
| Handler_read_rnd_next             | 429224      |

因此服务器每秒读取大约43K行,表中有1.5亿行。稍后进行一些数学计算,你可以完成3488秒,或者不到一个小时。事实上,查询在大约55分钟内完成。

答案 1 :(得分:3)

这里的一个大问题是,在确定查询需要多长时间时,最重要的因素(到目前为止)与查询本身有关。相反,确定答案的最大因素是在查询运行时对数据库的负载,尤其是包括来自其他查询的负载。对于活动系统上的复杂查询,此负载甚至可能在查询过程中发生显着变化。

您可以使用EXPLAIN关键字为您的查询获取执行计划。您可以使用它来获得一个相对的想法,其他条件相同,特定查询可能花费多少。尽管如此,MySql并不容易,因为它不会给你一个很好的计划成本或你可以使用的执行时间数,就像sql server一样。您需要根据行和磁盘读取来推断这些数字。

同样,即使您生成估计成本然后运行查询,您也可能获得比预期更长或更短的结果,因为在创建估计值和查询运行后,服务器上的负载会发生变化。


在这种情况下,10小时后,听起来您可能遇到阻塞/锁定问题。如果您有另一个使用此表的活动(可能是长时间运行或经常重复出现)查询,请尝试将其删除,并且您的查询很可能会在几分钟后自然完成。

答案 2 :(得分:1)

使用测试数据库,更小的数据集 这将产生非常粗略的估计。 但我相信在你的情况下,时间将是非线性的,例如:指数。 也许你可以重做命令,这样你就可以保证独特的c。