在某些情况下,当几个后端进程同时运行时(队列管理是另一回事,我可以这样解决它,但这不是这里的问题),我得到General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK。
优先级较低的进程是锁表的进程,因为它比高优先级的进程早几分钟就开始了。
如何在已经运行的进程上优先处理查询?
希望一切都足够清楚。
发布于 2012-09-03 21:22:01
查询一旦开始执行,就不能暂停/中断。这方面的唯一例外是在DB管理级别,您实际上可以强制停止查询(如果愿意,可以将它看作是杀死windows中正在运行的进程)。但是你不想这么做,所以算了吧。
您最好的选择是使用低优先级的块操作。基本上,这意味着如果对低优先级的查询执行时间太长,可以考虑如何将其分割成更快的方式,而无需在数据库中创建孤立的数据或非法数据。
一个非常基本的用例是设想一个插入,插入10,000个新行。通过“分块”插入,以便使用较小的数据集(一次500次)运行插入多次,每个插入将更快地完成,因此允许更及时地执行任何非低优先级的操作。
如何实现
设置低优先级的东西就像添加LOW_PRIORITY标志一样简单。
INSERT LOW_PRIORITY INTO xxx(a,b,c,) VALUES()
UPDATE LOW_PRIORITY xxx SET a=b
DELETE LOW_PRIORITY FROM xxx WHERE a="value"
https://stackoverflow.com/questions/12253963
复制相似问题