在某些场合,当几个后端过程发生在同一时间运行(队列管理是别的东西,我可以解决这个问题这样的,但在这里,这不是问题),我得到的General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK
General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK
具有较少的优先级的进程是锁定表,由于它的高优先级的一个开始前几分钟的事实之一。
如何以一个查询对一个已经运行的进程优先?
希望它是很清晰。
一旦查询已经开始执行,不能暂停/中断。 唯一的例外是在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"