2008-11-27 46 views
2

我們必須在週末更新SqlServer2000數據庫。加速數據庫更新

它的大小差不多是10G。

更新範圍從架構更改,主鍵更新到更新,糾正或插入的某些百萬記錄。

週末對於這份工作來說已經不夠了。

我們建立了一個專門的服務器作業, 打開數據庫SINGLE_USER 做我們能想到的任何優化:滴/重新創建索引,關係等

你可以提出任何用來加快進程?

SQL SERVER 2000並不可否認(不是我的決定)。更新通過自定義程序運行,而不是BULK INSERT。

編輯:

架構更新由查詢分析器TSQL腳本完成(每個版本更新一個腳本)

數據更新由C#.NET 3.5的應用程序來完成。

數據來自一堆文本文件(帶有許多問題)並寫入本地數據庫。

計算機沒有連接到任何網絡。

回答

0

這個「定製程序」究竟是什麼樣子?即它如何與數據交談?儘量減少網絡IO(從數據庫服務器到應用程序)的數量是一個好的開始......通常這可能意味着在TSQL中做了很多工作,但即使只是在數據庫服務器上運行應用程序也可能有所幫助。 ..

如果應用程序正在重新編寫大塊數據,它可能仍然可以使用批量插入來提交新的表數據。通過命令行(bcp等)或通過代碼(.NET中的SqlBulkCopy)。這通常會比單獨的插頁等更快。但它確實取決於這個「定製程序」。

2

儘管刪除多餘的索引可能會有幫助,但您需要確保保留這些索引,以便升級腳本能夠輕鬆找到需要更新的那些行。否則,請確保服務器中有足夠的內存(儘管SQL Server 2000 Standard限制爲2 GB),並且如果需要預擴展MDF和LDF文件以應對任何增長。

如果可能,您的自定義程序應該作爲集合處理更新,而不是逐行處理。

編輯: 理想情況下,嘗試並確定哪些操作導致性能較差。如果是模式更改,可能是因爲您正在增大列並導致發生大量頁面拆分。但是,由於相同的原因,插入和更新時也會發生頁面拆分 - 該行不再適合頁面。

如果您的C#應用​​程序是瓶頸,您是否可以首先將更改運行到臨時表(在維護時段之前),然後對實際表執行單個更新?一百萬行的單個更新將比一百萬次更新調用的應用程序更有效。無可否認,如果你需要在這個週末做這個,你可能沒有足夠的時間去設置它。