首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高InnoDB在INSERTing中的选择性能

问如何提高InnoDB在INSERTing中的选择性能
EN

Stack Overflow用户
提问于 2013-07-03 04:50:20
回答 1查看 783关注 0票数 1

最近,我们将表具体转换为使用InnoDB (从MyISAM),这样我们就可以利用对数据库进行更新的能力,同时仍然允许进行SELECT查询(即不为每个INSERT锁定整个表)。

我们有一个每周运行的循环,并且使用INSERTS使用"INSERT INTO ... ON DUPLICATE KEY UPDATE ..."运行大约1亿行。

我们对当前每秒大约2000 insert/ update的更新性能相当满意。

但是,在运行此过程时,我们注意到常规查询需要很长时间。

例如,这需要大约5分钟来执行:

代码语言:javascript
复制
SELECT itemid FROM items WHERE itemid = 950768

(当INSERT没有发生时,上面的查询需要几毫秒。)

有没有办法迫使SELECT查询具有更高的优先级?否则,我是否可以在MySQL配置中更改任何参数来提高性能?

理想情况下,当流量较低时,我们将执行这些更新,但每次选择查询超过几秒钟的内容似乎都无法同时更新和从数据库读取。我正在寻找任何建议。

我们使用亚马逊的RDS作为我们的MySQL服务器。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-04-17 23:33:18

我想你差不多一年后就解决了这个问题:)但是我想我应该加入进来。根据MySQL关于内锁的文档(相对于用户启动的显式锁定):

表更新比表检索具有更高的优先级。因此,在释放锁时,该锁可用于写锁队列中的请求,然后可用于读锁队列中的请求。这可以确保对表的更新不会“饥饿”,即使表有大量的SELECT活动。但是,如果表有许多更新,请选择语句等待,直到没有更新。

因此,听起来您的SELECT正在排队,直到插入/更新完成(或者至少有一个暂停)。有关更改优先级的信息可以在MySQL的表锁定问题页面上找到。

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

https://stackoverflow.com/questions/17439895

复制
相关文章

相似问题

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