首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优先处理某些查询?

如何优先处理某些查询?
EN

Stack Overflow用户
提问于 2012-09-03 21:00:43
回答 1查看 9.3K关注 0票数 8

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

优先级较低的进程是锁表的进程,因为它比高优先级的进程早几分钟就开始了。

如何在已经运行的进程上优先处理查询?

希望一切都足够清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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"

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12253963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档