8

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

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

如何将查询优先于已运行的进程?

希望它足够清楚。

4

1 回答 1

12

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

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

一个非常基本的用例是想象一个插入 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"

于 2012-09-03T21:22:01.097 回答