我有,我安裝了SQL Server的兩個服務器2008SQL服務器插入慢
- 製作:RAID 1的SCSI磁盤
- 測試:IDE磁盤
當我試圖執行一個腳本與大約35.000插入,在測試服務器上我需要30秒,而在生產服務器上超過2分鐘! 有誰知道爲什麼這樣的區別?我的意思是,數據庫配置方式相同,生產服務器也具有RAID配置,更好的處理器和內存...
感謝!
我有,我安裝了SQL Server的兩個服務器2008SQL服務器插入慢
當我試圖執行一個腳本與大約35.000插入,在測試服務器上我需要30秒,而在生產服務器上超過2分鐘! 有誰知道爲什麼這樣的區別?我的意思是,數據庫配置方式相同,生產服務器也具有RAID配置,更好的處理器和內存...
感謝!
請注意,RAID 1用於冗餘,速度因場景而異。 35k插入可能會導致繁重的隨機寫入開銷,從而降低性能。
你如何插入這些行,他們是否包裝在一個SQL Transaction?如果還沒有,那麼知道事務緩存查詢和批量磁盤更新,大大提高速度。
如果是通過SQL腳本文件,則將插入包裝在BEGIN TRANSACTION/END TRANSACTION中。對於這麼多的記錄importing from file is probably better。
批量插入解決了問題! – andrew0007 2010-03-15 14:52:23
也許某些其他程序正在耗用資源(如硬盤和處理器)的生產服務器上運行。
同樣在生產服務器上執行腳本的時間同時正在對數據庫執行操作,並且有些查詢正在執行。
服務器上的索引和填充是什麼?您可能需要在頁面中留出更多空間來重建索引,並且/或者考慮您真正需要的索引。如果您想要快速測試,請嘗試ALTER INDEX ALL ON dbname.dbo.tablename REORGANIZE.
另請考慮生產服務器上的使用情況。在你的測試中,你可能(或者很少)是唯一一個讀/寫的人。在做這個插入的時候,瞭解db中還有哪些內容。
如果兩者都失敗,請在生產服務器上運行一些監視,看看它是否被其他進程砰擊。
下拿了我的一個簡單的插入從30秒至約30毫秒的差異我會懷疑。謝謝! – tsilb 2012-08-09 19:26:41
真的很難說。
首先 - 是的,生產可能有更多的資源,但它們是否可用?或者當你碰到它時,生產已經接近限制其他東西了?畢竟,這是生產。
這將像我的第一個想法。
謝謝你的答案... 的資源可用,並且有連接在服務器上沒有其他用戶。而且,該指數都以同樣的方式配置在其他測試服務器... – andrew0007 2010-03-15 13:09:20
我還是想先看一個perfmon日誌。也許你的一些子系統存在問題 - 僅僅是因爲光盤速度更快並不意味着它確實是。垃圾發生。在那裏,看到了。衡量所有重要特徵。 – TomTom 2010-03-15 13:26:17
有三個(高級別)要考慮的問題:在服務器與可用資源
我認爲第三點可能是你的問題。意識到你放置在桌面上的更多(非集羣)索引(以及它們越複雜),數據操作將會越慢。索引(通常)是查詢速度和修改速度之間的折衷。很顯然,這是一種泛化,並且總是需要調整,但總的來說它是真實的。
比較兩個環境中有多少數據;如果生產環境的數量更多(或者您的表格索引很高),那麼這可能就是您的問題。
在測試服務器我導入生產數據庫的轉儲,因此數據和索引都是一樣的.. 也許一些相關的磁盤..我使用的是生產RAID1和我沒有對RAID測試服務器.. – andrew0007 2010-03-15 13:26:12
@andrew:根據您的RAID控制器上,這當然可以了問題的一部分。 RAID1(尤其是用軟件實現)將相同的數據寫入兩個驅動器。 – 2010-03-15 14:30:14
如果您還同時做數據庫的選擇,確保它們與做「與(NOLOCK)」
什麼是現有的數據在這兩個服務器的容量?
根據已經在表中的行數和索引的數量,INSERT的時間將擴大。如果您的測試服務器表包含比生產服務器更少的pre-INSERT行,則INSERT預計將在那裏更快地執行。
Andrew,你能回答,什麼類型的字段有主鍵,什麼類型的索引有這個字段(CLUSTERED OR NONCLUSTERED)。 – garik 2010-03-15 13:11:06
主鍵索引在兩臺服務器上集羣 – andrew0007 2010-03-15 13:15:16
什麼類型的字段(PK字段)? GUID? – garik 2010-03-15 13:15:53