我有大约 4 天的时间来加载 400 万行数据,其中存储过程似乎需要大约 500 毫秒/行,所以我建议我们暂时重新调整两台计算机的用途,一台作为 SQL Server,一台用于提供数据。每台机器都是 4 cpu、2 核/cpu 计算机,具有大量内存。
关于如何加载数据有两种相互竞争的想法。
- 在导入计算机上使用 VM 维护,这将我限制为 4 个使用核心。
- 放弃 VM 进行负载,并使用所有 8 个内核进行加载。
数据库将在实际计算机上,没有 VM。
我将展示一下使用 VM 会显着影响性能,但这只是一种直觉。我需要证明这一点,所以我建议我们使用较小的数据集进行测试加载,而不是加载大约 12G 的数据,我们可能只加载 6G,并获得数字。
但是,由于我对此有过一次尝试,因此我想合理猜测两种环境中可以使用多少线程。
我的猜测是 4 个线程/核心,因为数据库事务涉及大量线程等待时间,但我不知道这是否会导致 VM 上的线程过多。我不确定如何确定要建议的合理线程数。
限制因素可能不是具有加载数据的程序的计算机,可能是数据库计算机实际上是限制因素,对于 8 核机器来说,32 个并发数据库连接可能太多了。
那么,在这两种环境中,我对每个核心 4 个线程的猜测是否合理?
计算机上的操作系统是 Windows Server 2008 R2,VM 将使用 Hyper-V。
更新:
万一这很重要,我使用的是 .NET 4,使用并行框架,所以我通过在配置文件中更改并发线程数来调整它,所以我大量使用 PLINQ。
更新 2:
今天我有个想法来加快速度,我们将使用一个 4 核 VM 进行基准测试,但 SQL Server 将使用 24G 虚拟驱动器(ram 驱动器),因为计算机有 48G RAM,并且数据库将完全在内存中. 这样,我应该能够尽可能快地用几个线程来喂它。如果这还不够快,那么我们将使用所有 12 个内核来支持它,但他们预计不需要它。所以,我应该能够在 1 天而不是一个多月的时间内加载所有数据,但是,一旦我得到一些基准,我会让每个人都知道。我可能会看到使用较小的桌面来喂它,看看使用虚拟机是否会受到惩罚,但这个盒子上只有一个虚拟机,所以 8 个核心将未被使用。Hyper-V 机器上的操作系统是 Windows Core,顺便说一句。