【发布时间】:2023-03-25 18:50:01
【问题描述】:
我有一台服务器,可以接收来自世界各地数千个地点的数据。定期,该服务器连接到我的数据库服务器并插入具有多插入的记录,每个多插入一次大约 11,000 行,最多 6 个插入语句。发生这种情况时,所有 6 个进程都会锁定要插入的表。
我想弄清楚是什么导致了锁定?我是否最好将我的多插入限制为一次 100 行并端对端进行?我用什么作为指南?
数据库服务器有 100GB RAM 和 12 个处理器。它的使用非常轻,但是当这些插入物进来时,每个人都会冻结几分钟,这会破坏人们运行报告等。
感谢您的任何建议。我知道我需要错开插入,我只是在问什么是推荐的方法来做到这一点。
更新:我错了。我与程序员交谈,他说有一个 perl 程序正在运行,它可以尽可能快地向服务器发送单个插入。不是多插入。 (目前)有 6 个这些 perl 进程同时运行。其中一个正在做 91000 次插入,一次一个。也许因为我们有很多 RAM,多插入会更好?
【问题讨论】:
-
也许你应该准备没有外键和索引的临时表
-
也许dba.stackexchange.com 更适合这个问题......也许
-
你用的是什么引擎?它是基于 HDD 的,还是基于 SSD 的?服务器上做了哪些调整?在我看来,它的规格可能在某些部门令人发指,但在其他部门却完全不足。例如,对数据库使用 RAID-5 将使写入速度变得非常糟糕。您是否尝试过对较小的刀片和较大的刀片进行基准测试?您是否查看过哪些锁可能会干扰写入性能?
-
谢谢豪尔赫。我会这样做的。
-
了解那些 Perl 程序在做什么会很有帮助。他们是否在单个事务中执行 91,000 次插入?他们在锁定表吗?你使用什么表格式(MyISAM 对锁很糟糕)?这些表上有哪些索引?插入了多少张表?慢查询日志说明了什么?