场景-在从属机器上运行数百个报告。这些报告要么由mysql的事件调度器调度,要么通过python/r或shell脚本调用。除此之外,还有50多个用户正在连接mysql slave运行随机查询。这些人真的不知道如何编写好的查询,这是公平的。他们不应该这样做。因此,时不时地(每天读取),您会看到一些由于读/写锁而被卡住的查询。你怎么解决这个问题。
你要做的是,你不杀掉正在写的东西。相反,您会终止所有的读取查询。现在,这也是一个棘手的问题,因为如果你杀死了所有的读取查询,你也会放弃 OUTFILE
查询,实际上是写查询(它们只是不写mysql,而是写磁盘)。
为什么杀戮是必要的(我只是为mysql说话,不要断章取义)
我有两个字给你- Slave lag
. 我们不希望这种情况发生,因为如果发生这种情况,所有用户、报告、消费者都会受到影响。
基于以下三个问题,我编写了以下代码来杀死mysql中的进程
查询运行了多长时间?
谁在运行查询?
你想杀人吗 write/modify
还有什么疑问?
我故意没有做的是,我还没有保持一个历史进程,已被杀死。我们应该这样做,以便分析并找出谁在运行所有错误的查询。但还有其他方法可以找到答案。
我已经建立了一个程序。我没花太多时间在这上面。所以,请建议这是否是一个好的方式做或不。
github基斯特
1条答案
按热度按时间apeeds0o1#
切换到mariadb。版本10.0和10.1实现了几个限制和超时:https://mariadb.com/kb/en/library/query-limits-and-timeouts/
然后在用户编写的内容和实际访问数据库之间编写一个api。在此层中,添加适当的限制。