2011-04-07 51 views
0

我在SQL Server中创建要处理对象的表格并行化数据库访问

数据库位于dbserver中。

然后,用我的应用程序(c#),我使用SqlDataReader遍历所有对象,并使它在时间T.我在我的应用程序中使用多线程和互斥,它使用相同的SqlDataReader为所有线程。我运行在serverp1中。

然后为了让它更快,我把这个对象分成两列或一组。

然后我(具有 SqlDataReader)运行MyApp在serverp01在等级-1中的对象,然后在秩2运行在serverp02的MyApp的用于对象(SqlDataReaderselect where rank = 2)。

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

有人知道它发生了什么?

+1

你看过你的SQL服务器,看看有没有像阻塞,等待等问题吗? – 2011-04-07 15:33:20

回答

0

听起来像受到IO速度的约束。当你在serverp1上运行这个东西时,CPU的最大值是多少?如果没有,那么网络或数据库磁盘可能是瓶颈。您可以检查数据库服务器上的磁盘和网络吞吐量,以查看它们是否达到某个限制。

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

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

如果网络是瓶颈,那么只需选择所需的列并将它们缩小(int键而不是varchar值)就足够了。

Regards GJ