并行化数据库访问

时间:2011-04-07 15:29:56

标签: c# multithreading sqldatareader

我创建了包含要在SQL Server中处理的对象的表

数据库位于dbserver中。

然后,使用我的应用程序(c#),我使用SqlDataReader迭代所有对象,并在时间T中进行。我在我的应用程序中使用多线程和互斥,并使用相同的{ {1}}用于所有线程。我在serverp1中运行。

然后为了加快速度,我将2个等级或组中的对象按列分开。

然后我在serverp01中运行myapp以获取rank1(SqlDataReader中带有SqlDataReader)的对象,然后在serverp02中为rank2中的对象运行myapp(select where rank = 1带{ {1}})。

我的问题是两个配置需要相同的时间T.可能是我错了,但它应该花费T / 2时间或接近它。

有人知道它发生了什么?

1 个答案:

答案 0 :(得分:0)

听起来你受IO速度的束缚。当您在serverp1上运行该东西时,CPU的最大值是否超出?如果没有,则可能是网络或数据库磁盘是瓶颈。您可以检查数据库服务器上的磁盘和网络吞吐量,以查看它们是否达到了特定限制。

如果磁盘是瓶颈,他们会尝试使您的表行更窄,表中的每一行应尽可能少。确保您查询的表只包含您实际需要的几列,并且它们尽可能压缩(即使用整数键高度标准化而不是varchar值,不可空等)。

请记住,即使您只需要几列,整个页面也需要从磁盘读入内存。您可以在页面上放置的行越多,服务器需要读取的页面就越少。

如果网络是瓶颈,那么只选择你需要的列并使它们变窄(int键而不是varchar值)就足够了。

关心GJ