有没有办法为MySQL查询分配超时时间,并限制他们说60秒? 我知道使用脚本语言(例如PHP)时可以这样做。 但是,是否可以直接在MySQL中设置configuration,以防止长时间运行的查询(通常select在我的情况下)从服务器中取出?
注意:运行Mandriva,数据库在MyISAM中,这仅用于SELECT查询。
我通常做的一个解决scheme,如果复制/从属不是一个选项是这样的,你试图避免长时间运行的报告查询;
在这种情况下,你的老板会在新的报表中更快地获得数据。 你可能已经find了一个很好的解决scheme,但这仍然是有用的。 🙂
一个简单的解决scheme是使用Percona Toolkit的pt-kill选项。 它有几个选项,并由几个人使用。
我build议使用从服务器,但它需要额外的资源(服务器/实例)。 在这种方法中,即使您的老板写出最差的查询,您的生产服务器也将被隔离,并且不会对业务造成任何损害。
基于你对查询的回应,我可以这样说:
如果你的老板只执行select语句,你可以考虑安装和运行mysql复制并授予他访问从属数据库服务器的权限。 这样你的生产(主)服务器将不会受到影响,如果他input一个非常复杂和耗时的查询。
不是默认的,不。
然而,Twitter团队已经发布了他们在MySQL上的工作,正是这个工作(来自http://engineering.twitter.com/2012/04/mysql-at-twitter.html ):
- Reduce unnecessary work through improved server-side statement timeout support. This allows the server to proactively cancel queries that run longer than a millisecond-granularity timeout.
请参阅https://github.com/twitter/mysql/wiki/Statement-Timeout和https://github.com/twitter/mysql 。
一个更简单的解决scheme是每隔X分钟运行一次cronjob,然后searchboss的查询,如果运行时间超过Y秒,就杀了他们。