2010-01-21 70 views
2

我是一個新手,在這裏堆棧溢出以及在sql服務器,所以請讓我知道如果這個問題是不適當的任何方式:)實現Sql Server讀寫性能的策略是什麼?

那麼,我正在開發一個Web應用程序,將用於分析存儲在SQL Server 2008數據庫中的大量數據。該接口不允許用戶更新或插入任何數據,所以除了用戶數據的一些更新之外,主要是SELECT命令將被髮送到數據庫。

每天晚上,系統都會關閉並刷新其他來源的信息。此刷新還將涉及大量數據,因此數據庫在此階段將主要執行INSERT和UPDATE命令。

我已經創建了適當的索引以在SELECTS上實現良好的性能,但是這些索引導致夜間刷新變慢。我想要「兩全其美」,所以我搜索了一下,發現一個常見的策略是在寫入數據之前刪除/禁用所有索引,並在之後重新創建它們。我也聽說,更好的方法是限制索引的填充因子,這將使我無法編寫用於刪除和重新創建索引的腳本。

您認爲在這裏使用的最佳方法是什麼?我的主要目標是良好的性能?我應該使用「fillfactor」-approach,還是應該弄髒並編寫腳本來刪除/重新創建索引?歡迎任何建議!

+0

避免太多索引 - 只是明確地索引每一列,只是因爲你可以,肯定會殺死你的perf! ;-) – 2010-01-21 11:36:06

回答

2

每晚刪除/重新創建索引將有所幫助。填充因子只會在插入/更新級別導致分段時提供益處。您可以通過運行DBCC SHOWCONTIG(小心生產,如果DB很大)來檢查。

+0

就像補充一樣,我們有一個客戶流程,每晚處理大約100GB的數據。在我們的例子中,我們刪除索引,截斷表,做我們的插入,然後添加索引。我們正在談論數以億計的記錄。這條道路將處理速度提高了40倍。意思是,過去需要20個小時,現在需要30分鐘。 – NotMe 2010-01-21 15:01:51

+0

另外,請注意您的恢復模式。當以這種方式處理大量數據時,它變得至關重要。您可能想要嘗試使用不同的模型,直到找到能夠滿足所需恢復功能的性能。 – NotMe 2010-01-21 15:03:18

0

應該提高性能的另一個選擇是在系統刷新期間將數據庫的恢復模式從完全切換到簡單,然後切換回來。

您應該在切換回完整後進行完整備份,但這可能是值得的,最好的方法是針對工作負載&查看。

+0

感謝提示尼克(和克里斯),我不得不承認,我還沒有想過恢復模式,直到現在。我會試一試! – Ozzy 2010-01-22 09:32:47