1

我有大约 4 天的时间来加载 400 万行数据,其中存储过程似乎需要大约 500 毫秒/行,所以我建议我们暂时重新调整两台计算机的用途,一台作为 SQL Server,一台用于提供数据。每台机器都是 4 cpu、2 核/cpu 计算机,具有大量内存。

关于如何加载数据有两种相互竞争的想法。

  1. 在导入计算机上使用 VM 维护,这将我限制为 4 个使用核心。
  2. 放弃 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,顺便说一句。

4

2 回答 2

0

There are so many variables involved that I would say your guess is as good as any. You have thought it out reasonably and testing will be your best bet to see if you need to adjust for the big run.

于 2010-09-16T01:56:33.060 回答
0

Make a small test, and test with 1, 2, 3, 4, 5, 6 threads per core. Graph it out. Should show pretty clearly...

于 2010-09-16T01:59:35.143 回答