Sql-Server

我應該用 200 萬行對我的主表進行分區嗎?

  • April 6, 2018

我是一名開發人員,需要一些 DBA 建議。

我們開始遇到 MSSQL2005 數據庫的性能問題。這些事件的明顯影響主要是伺服器上的 CPU 佔用,但操作報告說它也耗盡了 SAN 的資源(並非總是如此)。問題的主要來源肯定是在某些應用程序中,但我想知道我們是否應該對一些主表進行分區以減輕 I/O 壓力。

一個文件的基本容量約為 60GB。

主表(訂單)有 210 萬行和 215 個冒號(但沒有一個很大)。

我們有一個整數作為 PK,因此定義分區函式應該沒問題。

我們會通過分區贏得一些東西嗎?分區索引會給我們帶來什麼嗎?

以下是有關數據庫和表的更多事實

database_name  database_size    unallocated space
My_base         57173.06 MB     79.74 MB
reserved        data            index_size      unused
29 444 808 KB   26 577 320 KB   2 845 232 KB    22 256 KB

name        rows            reserved    data        index_size      unused
Order   2 097 626       4 403 832 KB    2 756 064 KB    1 646 080 KB    1688 KB

感謝您的任何建議

判斷

啊——為什麼?15 年前,100 萬行被認為很小。今天,1 億行被認為很小。

如果你有一個 CPU-hog,我會開始尋找問題所在 - 這看起來更像是一個索引問題和/或糟糕的欄位設計而不是其他任何事情。

現在,SAN hogging - 這對於任何 SQL Server 來說都是完全正常的。SAN 人員通常對數據庫伺服器的 IO 很重這一事實非常無知。數據庫通常需要針對它們進行優化的特定 SAN 設置,並且可以被它們充分利用。它不是“佔用”它,它試圖盡可能好地使用所有資源。

您的數據庫很小 - 嚴重。我真的沒有在這裡看到任何問題。訂單表只有 4gb 的記憶體,這 - 足夠有趣 - 是一個應該從記憶體中回答的大小。

分區對於批量刪除很有用(每年一個表,刪除一年的訂單是表截斷,而不是刪除),但是對於您的大小,這不是問題(我有一個表 Prices 有大約 15 億個條目,那很小)。它不會加速查詢很多 - 要麼查詢只能選擇一個分區(不,整數 PK 沒有幫助,除非你選擇 PK 範圍作為過濾器) - 或者它不能。但即使可以,索引也幾乎一樣快。

什麼類型的查詢不好?執行計劃如何?可能是你:

  • 記憶體太少(8gb 或更多?)
  • 有一個次優/不匹配的索引佈局,以至於查詢基本上變成了表掃描?在這種情況下,我將開始修復那一側。
  • 您載入的數據超出了您的需要?

如果沒有您的查詢執行計劃,這是無法回答的。

順便說一句,一個文件中有 60GB 是嚴重忽視。任何大型數據庫都應該有盡可能多的文件,因為有可能的並行操作(即 SQL Server 的可用伺服器核心);)而且我確信您的 I/O 組織很糟糕 - 未對齊的分區,錯誤的格式,減慢您的速度(可能很多 - 糟糕的磁碟設置可能會使您損失高達 40% 的性能)。

放鬆 I/O 壓力:

  • 確保您的數據庫伺服器已正確安裝(我很少看到 - 管理員似乎喜歡忽略此處的文件)
  • 首先確保您擁有適當的資源。您在磁碟子系統上的 IOPS 預算有多高?你確實測量了它,或者?
  • 確保數據庫設置正確(同樣,大多數管理員喜歡在這種情況下無知)
  • 確保您具有良好的表結構和良好的主鍵(幾乎是您唯一正確的)。

然後 - 進入分析器,找出應用程序並確保優化此查詢。

引用自:https://serverfault.com/questions/138682