从MSSQL向DB2表中插入数据的最佳方法

sbdsn5lh  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(200)

我有一个SSIS包,它可以将MSSQL表中的行插入DB2表。
大约2分钟后开始。
我的任务是将其转换为非SSIS解决方案。
我已经尝试了多种解决方案,所有的例子都非常慢。
使用TSQL将行插入到DB2表中大约需要90分钟。
我试过INSERT OPENQUERY、INSERT到链接服务器、动态SQL。
从##MSSQLTable中选择列1;
DB2表由1列和超过3百万行组成。
谢谢

mkshixfv

mkshixfv1#

我的网络上运行着2台MSSQL 2012服务器。我在AdvetureWorks 2012数据库中的“报告”服务器上创建了一个测试表。然后,我在主生产服务器上创建了一个查询,该查询生成了300万行并将它们插入到报告服务器表中。仅创建300万条记录的select语句就需要14秒的时间。下面的脚本插入了大约1。11分钟记录800万条。
这两台服务器都是运行4核(3 GHz)和64 GB RAM的虚拟机。源/生产服务器运行的是IOPS约为1400的HDD。目标/报告服务器运行的是未经基准测试的SSD。
下面是我在源服务器上使用的脚本:

INSERT INTO [LinkedServerName].[AdventureWorks2012].[dbo].[TestInsert] (
    [uid]
    , test1
    , test2
    , test3
)
SELECT 
    ROW_NUMBER() OVER(ORDER BY y.a, y.b, y.c, y.d, y.e, y.f, y.g) as [uid]
    , 1 as test1
    , 2000000 as test2
    , 30000 as test3
FROM (
        SELECT * 
        FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as tens(a)
             , (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as hundreds(b)
             , (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as thousands(c)
             , (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as tenthousands(d)
             , (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as hundredthousands(e)
             , (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as millions(f)
             , (VALUES (0),(1),(2)) as m3(g) --times 3 = 3 million records.
) as y

这不是一个快速的过程,而且我推送的数据是微不足道的(4个整数)。正如其他帖子(hereherehere)所讨论的,最快的选择是使用某种脚本在源端生成一个.csv文件,然后让目标服务器导入该文件。或者,具有讽刺意味的是,使用SSIS包。

相关问题