2012-02-29 110 views
0

我在我的服務器上運行了7個XML解析器(從第三方網站獲取數據)。SQL Server性能問題

當我分別運行每個XML解析器時,需要大約1分鐘才能通過15MB XML(這非常大)。

當我把所有的7個跑在一起,每個人跑完10分鐘。

每個XML都向數據庫添加了大量信息,並且運行了大約50,000個查詢。

我正在我的解析器服務器是:

  • 服務器類型:HP DL180 G6
  • 處理器類型:英特爾至強E5504
  • 處理器速度:2000兆赫
  • CPU的數目: 2
  • 芯數:4
  • RAM:16 GB

在2個CPU上運行SQL Server Web版

問題出現在所有解析器並行運行時,SQL Server的CPU達到100%。

而真正的大問題是,我需要在未來大約50 XML解析器:(

你是什麼意見傢伙?我應該升級也許是XML服務器?或服務器本身?

也許SQL服務器在1個CPU,而不是2個CPU的運行?我該怎麼檢查?

任何意見將幫助...

+0

嘗試將少量解析器放在一起。如果您有4個內核,則一次運行4或3個分析。 – TcKs 2012-02-29 09:33:48

回答

1

有同樣的問題。我有60萬線XML的這即使過了一個小時也沒有完成處理。 對我來說,有效的方法是將XML分解成更小的塊,然後將塊插入臨時表(我所描述的XML電視鞋,因此我將其分解到200個不同的頻道),現在需要1分鐘時間才能完成整個XML

+0

那就是我做的!我正在解析足球比賽日程表的XML,所以現在我正在用小塊(每個單獨的比賽)解析它們,並且它的運行速度更快,但是當所有運行在一起時,CPU都如此之高......我認爲它很糟糕。 ..也許有其他想法? – 2012-02-29 09:29:41

+0

我試圖用我們的DBA解決這個問題,但沒有運氣。我猜XML引擎對於大型XML是有問題的。我留在臨時表。它適用於我 – uriz 2012-02-29 13:16:42

0

即使CPU達到100%,我認爲你的瓶頸是I/O。特別是因爲你說過你有多個進程同時讀取和寫入數據到磁盤。你可以檢查服務器上的I/O嗎?

如果進程打到不同的表,可能會有些事情可以做,比如使用Filegroups將數據庫拆分爲不同的HD。

如果它們碰到相同的表,那麼您的解析器A嘗試將數據讀取到同一個表分析器B正在寫入時,可能會遇到阻塞問題。我會推薦,只是爲了測試,並確定這是否真的是問題所在,在隔離級別讀取無法運行的情況下運行您的進程。如果運行良好,您會知道問題所在。

+0

嗨迭戈,感謝您的評論!你能解釋一下我應該怎麼做?我沒有100%的理解。 解析器正在向內存中讀取一次XML,並在所有elemet上循環運行,所以基本上,除了數據塊本身之外,沒有任何內容保存在磁盤上。 就像你說的,我只處理3個表格(所有的解析器)。 – 2012-02-29 09:38:06

+0

但你說過:「每個XML都向數據庫添加了大量信息,並且運行了大約50,000個查詢。」我知道你正在運行多個插入並選擇到你的數據庫,並且由於你有多個進程在執行,所以他們可能在爭奪資源。 無論如何,我的建議是在解析器中添加「set transaction isolation level read uncommitted」,所以它不會造成阻塞,所以我們可以看到這是否是真正的問題 – Diego 2012-02-29 09:47:42

+0

您能否介紹我應該怎麼做?我不是DBA,因爲您可以估計:) – 2012-02-29 10:00:58