gpt4 book ai didi

mysql - 如何正确错开数以千计的插入以免锁定表?

转载 作者:行者123 更新时间:2023-11-29 06:21:42 24 4
gpt4 key购买 nike

我有一台服务器可以接收来自世界各地数千个位置的数据。该服务器定期连接到我的数据库服务器并使用多插入插入记录,每个多插入一次约 11,000 行,最多 6 个插入语句。发生这种情况时,所有 6 个进程都会锁定要插入的表。

我想弄清楚的是导致锁定的原因?我最好将我的多插入限制为一次说 100 行并端到端地进行吗?我用什么来指导?

数据库服务器有 100GB RAM 和 12 个处理器。它的使用率非常低,但是当这些插入内容进来时,每个人都会呆几分钟,这会扰乱人们运行报告等。

感谢您的任何建议。我知道我需要交错插入,我只是想问一下推荐的方法是什么。

更新:我错了。我和程序员谈过,他说有一个运行的 perl 程序可以尽可能快地向服务器发送单个插入。不是多插入。这些 perl 进程中有(当前)6 个同时运行。其中一个正在执行 91000 个插入,一次一个。也许因为我们有很多 RAM,多插入会更好吗?

最佳答案

您的问题缺少有关系统结构的大量详细信息。此外,如果您的数据库在具有 100 GB RAM 的服务器上运行,您应该可以访问专业的 DBA,而不是依赖互联网论坛。

但是,正如 lad2025 在评论中建议的那样,暂存表可能可以解决您的问题。您的锁定可能是由索引引起的,也可能是由触发器引起的。建议是将数据加载到暂存表中。然后从staging table中慢慢加载数据到final table。

一种可能性是执行 11,000 次插入,比如说每秒一次(这将需要大约三个小时)。尽管执行插入操作会产生更多开销,但每个操作都是自己的事务并且锁定时间会非常短。

当然,一次只插入1条记录可能不是最优的。也许 10 或 100 甚至 1000 就足够了。您可以使用事件调度程序管理插入。

并且,这假设锁定根据输入数据量进行缩放。这是一个假设,但我认为在没有其他信息的情况下这是一个合理的假设。

关于mysql - 如何正确错开数以千计的插入以免锁定表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003043/

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