Sql-Server
使用 MAXDOP 1 條帶化磁碟
我們正在與堅持使用 MAXDOP = 1 的供應商合作(我知道……)。他們還強調了將我們的數據文件條帶化到不同磁碟上的重要性。
據我了解,I/O 操作總是與 CPU 週期配對。因此,如果我們有分佈在不同磁碟上的表,那麼 MAXDOP = 1 不會使讀/寫順序發生而不是並行發生嗎?
…不會 MAXDOP = 1 使讀/寫順序發生而不是並行發生
不,SQL Server 幾乎完全使用非同步 I/O。任何工作人員都可以發出 I/O 請求,然後將其交給作業系統和 I/O 子系統來完成。
工作人員可以自由地做其他工作(與查詢相關的甚至發出更多的非同步 I/O),而先前發出的 I/O 請求正在後台處理。
通過這種方式,SQL Server 甚至可以從單個工作執行緒驅動高 I/O 吞吐量,例如使用預讀。SQL Server 管理髮出的 I/O 請求的總數和深度,以最大限度地提高吞吐量,同時保持良好的響應時間。
跨多個 I/O 子系統條帶化數據的主要好處是提高 SQL Server 可用的總 I/O 頻寬。有了多個可用的 I/O 路徑,SQL Server 將嘗試將每個路徑推向其最大容量。
雖然發出(並隨後完成)非同步 I/O 並不是一項特別耗時的活動,但並行查詢中的多個執行緒可能比單個工作執行緒更難驅動 I/O。即便如此,一個在單個執行緒上執行多個並發查詢的系統,每個都發出大量預讀,即使是功能非常強大的 I/O 系統也很容易飽和。