2011-04-07 40 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