我创建了包含要在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时间或接近它。
有人知道它发生了什么?
答案 0 :(得分:0)
听起来你受IO速度的束缚。当您在serverp1上运行该东西时,CPU的最大值是否超出?如果没有,则可能是网络或数据库磁盘是瓶颈。您可以检查数据库服务器上的磁盘和网络吞吐量,以查看它们是否达到了特定限制。
如果磁盘是瓶颈,他们会尝试使您的表行更窄,表中的每一行应尽可能少。确保您查询的表只包含您实际需要的几列,并且它们尽可能压缩(即使用整数键高度标准化而不是varchar值,不可空等)。
请记住,即使您只需要几列,整个页面也需要从磁盘读入内存。您可以在页面上放置的行越多,服务器需要读取的页面就越少。
如果网络是瓶颈,那么只选择你需要的列并使它们变窄(int键而不是varchar值)就足够了。
关心GJ