如何对特定查询的优先?(How to give priority to certain querie

2019-07-31 08:31发布

在某些场合,当几个后端过程发生在同一时间运行(队列管理是别的东西,我可以解决这个问题这样的,但在这里,这不是问题),我得到的General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK

具有较少的优先级的进程是锁定表,由于它的高优先级的一个开始前几分钟的事实之一。

如何以一个查询对一个已经运行的进程优先?

希望它是很清晰。

Answer 1:

一旦查询已经开始执行,不能暂停/中断。 唯一的例外是在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"



文章来源: How to give priority to certain queries?