有些sql写得不好。有时,搜索会在应用程序中花费数小时。当应用程序(可能是网站)提交长时间运行的查询时,我必须重新启动 mysql。如何在数据库端限制 sql 查询的执行时间?
4 回答
要在长时间执行后自动终止 MySQL 中的查询:
创建一个存储过程为:
DECLARE CURSOR cur1 FOR SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Query' AND TIME > 120;
然后在 curosr 的循环中执行:
FETCH ID INTO @var_kill_id; KILL QUERY @var_kill_id;
在里面创建
EVENT FOR EVERY 5 SECONDS
和刚才CALL
上面的过程。
注意: KILL QUERY 只是杀死查询并且 MySQL 连接没有中断。看这里。
此外,如果可能的话,您可以尝试支持“max_statement_time”的 Twitter mysql fork,并以毫秒为单位终止超出它的查询。
请参阅http://engineering.twitter.com/2012/04/mysql-at-twitter.html和https://github.com/twitter/mysql/wiki/Statement-Timeout
原始来源。
唯一的选择是打开另一个会话,使用SHOW PROCESSLIST然后KILL QUERY你想终止的那个。
您可以使用mysqladmin命令行工具来发出这些命令。
这可能不是限制 SQL 执行时间的确切解决方案,但我想它会有所帮助。您根本不需要重新启动 MySQL 服务器。
尝试使用一些 MySQL GUI 工具,如SQLyog。如果您认为它需要更长的时间,您可以手动停止执行的查询,(检查屏幕截图中的 X 按钮)。
此外,您还可以通过访问进程列表来终止查询进程检查屏幕截图中的其他两个图像以及终止进程的步骤...
希望能帮助到你....