Performance

將數據文件儲存在單獨的物理驅動器中

  • April 3, 2021

將 1 個數據庫的 sql server 數據文件儲存在不同的驅動器中會提高性能嗎?是否建議這樣做?將數據文件拆分到多個物理驅動器有什麼好處?沒有分區表。數據庫是讀寫密集型的 oltp。

範例數據庫 AdventureWorks

D:\Data\AdventureWorks_1.mdf
D:\Data\AdventureWorks_1.ndf
E:\Data\AdventureWorks_2.ndf
F:\Data\AdventureWorks_3.ndf
F:\Data\AdventureWorks_4.ndf

要回答這個問題,通常最好的選擇是所有數據庫都相同!

Stripe And Mirror Everything - 也稱為RAID 10(或 RAID 1+0)。

根據製造商規格和官方獨立基準,在大多數情況下 RAID 10

$$ 8 $$提供比所有其他 RAID 級別更好的吞吐量和延遲$$ 9 $$除了 RAID 0(它在吞吐量方面獲勝)。$$ 10 $$因此,它是 I/O 密集型應用程序(例如數據庫、電子郵件和 Web 伺服器)以及任何其他需要高磁碟性能的用途的首選 RAID 級別。$$ 11 $$

正如您從 oracle-base 連結(Oracle BTW 所有事物的絕對超級站點)中看到的那樣,您可以看到這是 Oracle 首選的通用RAID 級別 - 附帶條件是可以更深入地研究並使用其他 RAID不同文件類型(數據、日誌、控製文件…)的級別。請參閱下面連結中的表格,

在此處輸入圖像描述

但這是帶回家的資訊(恕我直言) - 在該RAID Levels部分:

1+0 或 10 顧名思義,這是 RAID 1 和 RAID 0 的組合。這聽起來應該和 0+1 一樣,但它有細微的不同。每個磁碟都單獨進行鏡像,並且在所有鏡像對中進行條帶化。這是 Oracle 的最佳 RAID。

所以,1+0 絕對是首選。

微軟的頁面RAID Levels and SQL Server也說:

RAID 10 提供磁碟條帶化的性能優勢和鏡像的磁碟冗餘。RAID 10 提供任何其他 RAID 級別的最高讀寫性能,但代價是使用兩倍的磁碟。

請注意最後一點but at the expense of using two times as many disks- 一個人一無所獲!“Yae cannae beet the law o’ Physics, Jim…”(向 Gene Roddenberry 道歉)。

為了完整起見,Shounnines(一家頂級 PostgreSQL 諮詢公司)說:

為數據庫驅動器設置 RAID 不僅可以防止數據失去,如果使用正確的 RAID 配置,還可以提高性能。RAID 1 或 10 通常被認為是最好的,而 10 提供奇偶校驗和整體速度。

對於 MySQL,請考慮 Percona 的建議(Percona 是一個非常受推崇的 MySQL 諮詢小組,擁有自己的伺服器分支):

在不影響冗餘的情況下獲得最佳性能是通過使用具有電池支持的高速記憶體單元的高級控制器實現的,最好是跨多個磁碟的 RAID-10 卷。

因此,通常情況下,RAID 1+0 被認為是最佳解決方案。但是,如果您閱讀此主題,您會發現存在諸如費用之類的問題 - 沒有組織擁有無限的資源,因此有時會根據預算做出決定,不使用 RAID 1+0 而是使用 RAID 5。

恕我直言,這是一個巨大的錯誤——這是一種虛假的經濟。您可能會在磁碟上節省一些錢,但您的員工和客戶的時間(和理智)本身就是寶貴的資源(過去的痛苦經歷,但我已經接受了治療,現在我很好……)。

因此,理想情況下,最好將數據分佈在磁碟上。要回答關於是否在同一台伺服器上執行多個數據庫的部分問題,就會出現多租戶問題。

例如,您必須問自己“如果我關閉系統,那兩個客戶端就消失了,或者如果需要,我寧願能夠單獨關閉它們?”。這是一個只有您自己組織中的利益相關者才能回答的問題——管理層、客戶、DBA……

就我個人而言,我會盡可能地將單獨的客戶數據分開,但是您還要考慮預算 - 每個客戶的單獨磁碟子系統、軟體許可問題等。我的建議是深入閱讀該領域,以便能夠為您自己的組織提供合理的策略,並提供手頭的資源。

ps +1 提出一個有趣的問題,歡迎來到論壇!

“這取決於”是唯一真正的答案。

如果在不同的表中有很多寫入活動,那麼將這些表分佈在不同的驅動器上會產生很大的不同,尤其是對於傳統的基於旋轉磁碟的驅動器(注意:與普遍認為的 SSD確實存在隨機訪問延遲相反,寫入更是如此,只是不像傳統驅動器那樣遠端)。但是,如果您通過在不同的文件組中創建表/索引來手動傳播數據,您可能會發現好處不會超過麻煩。只有在不同驅動器上的表上有大量活動時,它才會有所幫助。

通過使用 RAID10 剝離驅動器(或者如果您的控制器/軟體支持以這種方式使用 RAID1 陣列,也可以),您可能會發現總體上更好的性能優勢,或者至少是更好的收益/麻煩比。這可能沒有手動優化數據位置的相同峰值性能優勢,但它可能會增加所有操作的吞吐量。

此外,在考慮在多個軸上破壞數據文件之前,首先要考慮將事務日誌保存在數據文件的不同驅動器上,並將 tempdb 也分開。寫入數據文件的所有內容都首先通過 tlog,因此您也可以通過這種方式在驅動器之間分散寫入負載,並且保持 tempdb 分開會阻止由於繁重的查詢影響其他活動事務的 IO 而導致的溢出到磁碟,因為它們會影響其他活動事務的 IO .

如果您的通用工作集適合伺服器的 RAM,那麼對於讀取重負載,您不會看到與上述任何一個有太大區別,因為它們大部分時間都是從 RAM 讀取,因此它們的性能將是記憶體頻寬和/或CPU 綁定。

確定的最佳方法是執行適當的負載測試,以在不同情況下使用不同磁碟佈局對應用程序進行基準測試。確保與實際應用程序使用相比,使用真實的訪問和並發模式測試工作負載。如果您沒有真正做到這一點的硬體,您也許可以使用虛擬機,人為地限制每個虛擬磁碟的 IOP 和吞吐量,以便每個虛擬磁碟的限制是您要測試的瓶頸,而不是整體隨機訪問性能主機的驅動器。

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