2010-03-15 368 views
6

我有,我安裝了SQL Server的兩個服務器2008SQL服務器插入慢

  • 製作:RAID 1的SCSI磁盤
  • 測試:IDE磁盤

當我試圖執行一個腳本與大約35.000插入,在測試服務器上我需要30秒,而在生產服務器上超過2分鐘! 有誰知道爲什麼這樣的區別?我的意思是,數據庫配置方式相同,生產服務器也具有RAID配置,更好的處理器和內存...

感謝!

+1

Andrew,你能回答,什麼類型的字段有主鍵,什麼類型的索引有這個字段(CLUSTERED OR NONCLUSTERED)。 – garik 2010-03-15 13:11:06

+0

主鍵索引在兩臺服務器上集羣 – andrew0007 2010-03-15 13:15:16

+0

什麼類型的字段(PK字段)? GUID? – garik 2010-03-15 13:15:53

回答

3

請注意,RAID 1用於冗餘,速度因場景而異。 35k插入可能會導致繁重的隨機寫入開銷,從而降低性能。

你如何插入這些行,他們是否包裝在一個SQL Transaction?如果還沒有,那麼知道事務緩存查詢和批量磁盤更新,大大提高速度。

如果是通過SQL腳本文件,則將插入包裝在BEGIN TRANSACTION/END TRANSACTION中。對於這麼多的記錄importing from file is probably better

+0

批量插入解決了問題! – andrew0007 2010-03-15 14:52:23

2

也許某些其他程序正在耗用資源(如硬盤和處理器)的生產服務器上運行。

同樣在生產服務器上執行腳本的時間同時正在對數據庫執行操作,並且有些查詢正在執行。

3

服務器上的索引和填充是什麼?您可能需要在頁面中留出更多空間來重建索引,並且/或者考慮您真正需要的索引。如果您想要快速測試,請嘗試ALTER INDEX ALL ON dbname.dbo.tablename REORGANIZE.

另請考慮生產服務器上的使用情況。在你的測試中,你可能(或者很少)是唯一一個讀/寫的人。在做這個插入的時候,瞭解db中還有哪些內容。

如果兩者都失敗,請在生產服務器上運行一些監視,看看它是否被其他進程砰擊。

+0

下拿了我的一個簡單的插入從30秒至約30毫秒的差異我會懷疑。謝謝! – tsilb 2012-08-09 19:26:41

0

真的很難說。

首先 - 是的,生產可能有更多的資源,但它們是否可用?或者當你碰到它時,生產已經接近限制其他東西了?畢竟,這是生產。

這將像我的第一個想法。

+0

謝謝你的答案... 的資源可用,並且有連接在服務器上沒有其他用戶。而且,該指數都以同樣的方式配置在其他測試服務器... – andrew0007 2010-03-15 13:09:20

+0

我還是想先看一個perfmon日誌。也許你的一些子系統存在問題 - 僅僅是因爲光盤速度更快並不意味着它確實是。垃圾發生。在那裏,看到了。衡量所有重要特徵。 – TomTom 2010-03-15 13:26:17

2

有三個(高級別)要考慮的問題:在服務器與可用資源

  1. 活動:這聽起來像(從你的反應來看),這不是一個問題
  2. 你的指標配置:再次,它聽起來就像如果開發環境真正在配置一樣的,這不是一個問題(因爲它應該是)
  3. 的數據量對你的指標如何徹底是

我認爲第三點可能是你的問題。意識到你放置在桌面上的更多(非集羣)索引(以及它們越複雜),數據操作將會越慢。索引(通常)是查詢速度和修改速度之間的折衷。很顯然,這是一種泛化,並且總是需要調整,但總的來說它是真實的。

比較兩個環境中有多少數據;如果生產環境的數量更多(或者您的表格索引很高),那麼這可能就是您的問題。

+0

在測試服務器我導入生產數據庫的轉儲,因此數據和索引都是一樣的.. 也許一些相關的磁盤..我使用的是生產RAID1和我沒有對RAID測試服務器.. – andrew0007 2010-03-15 13:26:12

+1

@andrew:根據您的RAID控制器上,這當然可以了問題的一部分。 RAID1(尤其是用軟件實現)將相同的數據寫入兩個驅動器。 – 2010-03-15 14:30:14

0

如果您還同時做數據庫的選擇,確保它們與做「與(NOLOCK)」

0

什麼是現有的數據在這兩個服務器的容量?

根據已經在表中的行數和索引的數量,INSERT的時間將擴大。如果您的測試服務器表包含比生產服務器更少的pre-INSERT行,則INSERT預計將在那裏更快地執行。