2010-01-05 39 views
0

下面是這種情況:SQL資料和DTA

我已經運行使用三個事件(不去管這)是DTA尋找最大的服務器負載在幾個小時跟蹤。然後,我停止並將此分析器加載到DTA。它做了調整工作,並給出了我需要提交哪些索引的反饋。

這裏有一個問題:

幾個(高達15)不同指標的建議是單個表。如果我讓DTA做它的工作,這是否意味着要爲此創建幾個索引?這不會是一個問題嗎?

回答

0

SQL服務器的優化是複雜的,取決於的數據嚴重在你的數據庫。確定什麼影響的變化將有唯一的真正的方法是使用代表性的數據(最好是你的活動數據庫的備份)

這就是說,15指數似乎想了很多,以我對你的數據庫進行性能和負載測試 - 大量的索引可能會對寫入該表的速度產生不利影響。 DTA可能會將每個查詢單獨運行到該表,併爲每個查詢提出最佳索引。您可能會發現,通過創建適用於多個查詢的索引,可以減少索引的數量 - 這可能意味着某些查詢是稍微比慢,即所有15個索引都較慢,但是有可能獲得99改進的百分比。

+0

它顯示了96.5%的改進,但我認爲我同意你對某些由於新索引而變慢的查詢。這些大多是選擇語句。服務器需要大量命中並且查詢是相似的(不相同並且不能被緩存)。代表性數據頗具代表性。儘管如此,在我使用DTA之前,我會運行幾次。我也會檢查長時間運行,頻繁運行,死鎖等等。我只是不着急。但是,對於信息來說,這是一個很好 – Tesnep 2010-01-05 14:04:50

+0

另一件需要注意的事項 - 如果您應用索引(與DTA建議的完全相同),然後重新運行DTA,則您可能還會使用DTA建議的其他索引。我的建議是單獨考慮每個索引,直到您提出對性能有重大改進的索引(如果索引從2秒鐘的執行時間開始只需要20毫秒,那麼它真的值得嗎?) – Justin 2010-01-05 14:26:02

0

不知道任何更多的表,查詢或索引時,答案是「這取決於」 ......

你需要採取從DTA輸出爲出發點。如果您查看推薦的索引,您可能會發現它們之間有一些重疊,以減少索引數量。

+0

所以這意味着我需要逐個研究它? – Tesnep 2010-01-05 13:46:46

1

DTA在許多情況下是合理的,但並不總是能提供最佳的建議。重疊是非常常見的,聚簇索引作爲非聚簇索引(!)的重複也是如此。

如果你想手工更準確地做到這一點:MS SQL Server 2008 - How Can I Log and Find the Most Expensive Queries?

+0

那麼我該如何處理這種情況呢?這不僅僅是一張桌子。有幾個表是幾個建議。我認爲我沒有時間一個一個地看看他們。 – Tesnep 2010-01-05 13:48:17

+1

我正在考慮採取類似於此的路線,而不是相信DTA在看到結果後執行此操作。感謝鏈接。 – Tesnep 2010-01-05 14:01:03

0

對於單個表,15個索引似乎很多。我會看看它們自己的實際查詢。

查找對查詢結構進行更改的地方,以便他們對現有索引或建議索引的一小部分子集進行工作。