gpt4 book ai didi

mysql - 如何在插入时提高 InnoDB 的 SELECT 性能

转载 作者:行者123 更新时间:2023-11-29 06:48:00 25 4
gpt4 key购买 nike

我们最近将表切换为专门使用 InnoDB(来自 MyISAM),这样我们就可以利用更新数据库的能力,同时仍然允许发生 SELECT 查询(即不锁定每个 INSERT)

的整个表格

我们有一个每周运行的循环,使用“INSERT INTO ... ON DUPLICATE KEY UPDATE ...”INSERT 大约 1 亿行

我们对当前每秒大约 2000 次插入/更新的更新性能感到相当满意。

但是,在这个过程运行时,我们观察到常规查询需要很长时间。

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

SELECT itemid FROM items WHERE itemid = 950768

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

有没有办法强制SELECT 查询获得更高的优先级?否则,我可以在 MySQL 配置中更改任何参数来提高性能吗?

理想情况下,我们会在流量较低时执行这些更新,但是每个 SELECT 查询超过几秒钟似乎会破坏能够同时更新和读取数据库的目的。我正在寻找任何建议。

我们使用 Amazon 的 RDS 作为我们的 MySQL 服务器。

谢谢!

最佳答案

我想你已经在将近一年后解决了这个问题 :) 但我想我会插话。根据 MySQL 在 internal locking 上的文档(与显式的、用户启动的锁定相反):

Table updates are given higher priority than table retrievals. Therefore, when a lock is released, the lock is made available to the requests in the write lock queue and then to the requests in the read lock queue. This ensures that updates to a table are not “starved” even if there is heavy SELECT activity for the table. However, if you have many updates for a table, SELECT statements wait until there are no more updates.

所以听起来您的 SELECT 正在排队,直到您的插入/更新完成(或至少有一个暂停。)有关更改该优先级的信息可以在 MySQL 的 Table Locking Issues 上找到。页面。

关于mysql - 如何在插入时提高 InnoDB 的 SELECT 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17439895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com