Sql-Server

在 Microsoft SQL Server 2008 中優化實時數據庫表

  • July 15, 2012

我們正在使用 Web 界面來監控我們的作業狀態及其開始和完成的時間戳。我們每天為不同的作業執行使用者執行超過 200,000 個作業實例。我們在數據庫表中維護過去 6 個月內執行的所有作業的狀態。Microsoft sql server 2008 中使用的數據庫伺服器。隨著表中作業或記錄數量的增加,更新表中記錄所需的時間也比以前慢。

我們想重新設計我們的表和模式,以實時更新作業狀態,而不會導致作業執行出現任何延遲。我們正在考慮將這個單個表拆分為每個使用者的多個表,以便更新一個使用者作業狀態不會導致更新其他使用者作業狀態時出現任何延遲。在此添加說明:使用者數少於 25,但每個使用者的作業數超過 50,000。此外,每個使用者作業之間沒有依賴關係。

  1. 這種表拆分會是一種更好或優化的方式來更快地更新或搜尋表嗎?
  2. 或者 microsoft sql sever 中的行鎖定功能會解決這種情況嗎?
  3. 我們有任何最佳優化方法來處理這種情況嗎?
  4. 指數會是緩慢的原因嗎?

表:作業 ID

$$ primary key $$| 職位名稱 | 開始時間 | 結束時間 | 狀態 我們有 2 個索引:一個基於作業開始和結束時間。第二個索引僅基於作業名稱。

謝謝。

適合您情況的最佳策略是正確索引表、更新統計資訊並對其進行碎片整理。那應該可以解決問題。

SQL Server 中的行數沒有固有的限制。有了正確的索引,它不應該開始變慢。

您需要查看您的選擇和更新查詢並為它們建構有用的索引。

1.這種分錶會是一種更好或優化的方式來更快地更新或搜尋表嗎?

您將如何進行更新?您會根據使用者或其他標准進行更新嗎?擁有多個表是個壞主意,最好根據使用者對錶進行分區,因為您有大約 25 個使用者,因此您將擁有 25 個分區。您可以使用優化更新其他技術,但正如您提到的數據正在增長,我建議您使用分區,以便更容易刪除和重新創建索引。

2.或者microsoft sql sever中的行鎖定功能可以解決這種情況嗎?

SQL 伺服器預設使用此功能,但它可以根據要更新的行數升級,並且最好知道更新是如何發生的以及一次有多少行。此外,檢查索引是如何創建的?是 allow_rowlocks是真的還是假的?

3.我們有什麼最優化的方法來處理這個案例嗎?

這取決於您正在執行哪種更新。可以對其進行優化。

4.指數會不會是慢的原因?

這可能是一個可能的原因,但您可能需要選擇查詢的索引。這取決於您如何更新數據以及一次有多少行。

引用自:https://dba.stackexchange.com/questions/20909