db2oledb性能单线程与多线程

时间:2018-10-20 16:54:09

标签: sql-server ibm-midrange

使用sql server 2017从IBM i 7.3执行数据加载时,DB2OLEDB性能存在问题。

客户端为VMware VM,网络设置似乎正常,并且已尽我所能进行了调整(vmxnet3驱动程序1.8)。从其他VM或www加载的负载超过100mbits。

到目前为止的故障排除: DB2OLEDB(Microsoft)的性能(3-5倍)比IBMDASQL快得多。 将I / O Affinity掩码设置为一个内核可以使性能提高一倍,但是其他内核则没有影响。 RSS开启。 DB2OLEDB进程内打开/关闭对吞吐量没有影响,但是关闭会在每次查询开始时带来大量的假脱机时间。

目前的性能约为15兆位。来自另一台SQL Server(已缓存)的同一张表以50mbit +的速度加载大约3倍(显然是不同的提供程序)。

有趣的是,启用行缓存可使网络吞吐量在开始时达到100-150mbits。即我推断有足够的网络带宽可用。

最后,我们将内存表用作目标,以消除磁盘I / O的罪魁祸首。

CPU消耗了一个核心,其余的约为20%ish。

有什么想法吗?

我怀疑此时DB2OLEDB驱动程序或COM的某些部分是瓶颈。

编辑:@MandyShaw(对于评论来说太长了)Windows Side。 IBM i不会为我的特定工作负载造成1%的损失,并且根据TOD,它通常会运行25%-50%的负载。 SQL语句多种多样。从直接四部分查询到7表雪花作为传递的所有内容。一件有趣的事情:吞吐量(网络)根据行长而变化。较宽的表似乎以与较薄的表相同的行速率泵浦。对于IBM和Microsoft驱动程序都是如此。减少网络延迟对性能有很大影响(请参阅Vmxnet3驱动程序1.6.6.0的RSC问题)。如果我正确理解,OLEDB驱动程序一次只能获取一行(加载行集缓存时可能除外)。

换句话说,对于每一行,我们都通过光纤并登陆IBM i发出从SQL服务器到COM / OLEDB驱动程序到Supervisor网络驱动程序,Hypervisor网络驱动程序,物理NIC的请求。然后再回来。我们已经能够使用服务代理成功多路复用大表负载(但这对于大多数应用程序来说是不切实际的)。这以及其他指标表明,IBM i有足够的CPU和带宽可供使用。光纤结构大部分是闲置的,我们已经将虚拟机管理程序(VMware)和管理程序(tcp / ip堆栈)以及SQL Server本身的性能降低了。

这就是为什么我在寻找COM / OLEDB提供程序的原因。该模型中的某些内容似乎很臭。要么配置不正确,要么根本不支持多个执行线程。

我也很愿意接受它是SQL Server中的东西,但是对于我一生来说,我找不到一种使用配置,选项或提示的组合使链接服务器查询运行多线程的方法。同样,设计上可能无法实现。

在这一时间点上,我涉及的一些已知线索(1)调整网络中断请求合并和频率,以最大程度地减少对OLEDB驱动程序线程的中断,以及(2)将HIS网关扔到消费者x86盒上,并带有一个高单核频率(5ghz),以最大化单线程性能。

这些都是卑鄙的选择。

如果您对EBCIDIC / ASCII转换性能有特殊的想法,我很乐意尝试并进行报告。给我拍一个链接/信息。

0 个答案:

没有答案