如何优先处理某些查询?

时间:2012-09-03 21:00:43

标签: mysql locking thread-priority

在某些情况下,当几个后端进程同时运行时(队列管理是别的,我可以像这样解决它,但这不是问题), 我得到General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACK

优先级较低的进程是锁定表的进程,因为它在高优先级之前几分钟启动。

如何为已经运行的流程优先处理查询?

希望它足够清楚。

1 个答案:

答案 0 :(得分:12)

一旦查询开始执行,就无法暂停/中断。唯一的例外是在数据库管理级别,您可以基本上强制查询停止(如果愿意,可以将其视为在Windows中终止正在运行的进程)。但是你不想那样做,所以不要忘了。

您最好的选择是使用LOW PRIORITY分块操作。基本上,这意味着如果对LOW PRIORITY的查询执行时间太长,请考虑在不在数据库中创建孤立数据或非法数据的情况下将其拆分为更快的方法。

一个非常基本的用例是想象一个插入10,000个新行的插入。通过“分块”插入使其以较小的数据集(即一次500个)多次运行插入,每个插入将更快地完成,因此允许以更及时的方式执行任何非LOW PRIORITY操作

如何

将某些内容设置为低优先级就像添加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"

相关问题