gpt4 book ai didi

sql-server - 实现每秒 30,000 次插入 SQL 的最佳方法

转载 作者:行者123 更新时间:2023-12-03 16:42:47 28 4
gpt4 key购买 nike

不使用 SSIS 或大容量插入、大容量加载或大容量任何东西;我需要能够调用插入数据的存储过程。

我有一个 2.8 gig 文件,其中包含超过 1800 万条记录。我的解决方案是用 C# 编写并利用并行处理和 ASYNC-AWAIT,在多个服务器上使用多线程进程在 10 分钟内解析此文件。但是,无论我尝试什么,增加线程、增加服务器,甚至通过传递表值参数在一次调用中插入多条记录,我将这些记录插入 SQL 数据库的最快速度是每秒 3100 条。存储过程只包含 INSERT 语句,表没有索引或键。按照这个速度,将解析的结果存储到数据库中需要 100 分钟。我需要将其缩短到 10 分钟,这意味着我必须将插入记录的能力提高十倍。数据库是我唯一的瓶颈。

A) 使用多个文件组是否有效?

B) 将表格分成多个版本怎么样,例如:EtlRecords001,EtlRecords002,EtlRecords003,...,EtlRecords100。这里的想法是让表格变小。

C) 最后,使用多个 SQL 服务器分散工作这里的想法也是使用较小的表并结合使用多个数据库服务器。

在 B 和 C 的情况下,解决方案显然会使不同机器上的进程目标不同; B.) 表格版本; C) 服务器实例。

我对文件组知之甚少,我不得不相信有比情况 B 和 C 更好的方法。

最后,购买 48 核服务器和 128 gig 内存对我来说不是一个可行的选择:)

最佳答案

你能试着把数据分成批处理吗?由于您无法衡量计算资源瓶颈。我最好的猜测是你的内存是瓶颈。

create cursor ....
select YEAR(timestamp)-- or anything else

while ....
insert into table1(...)
select * from whatever
where YEAR(timestamp) = year
end

第二点 exec dbo.insert1 with recompile 您可能想重新编译 sp 以获得每次调用时适合数据大小的新计划。

关于sql-server - 实现每秒 30,000 次插入 SQL 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785533/

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