SQL Server的最大容量規範整理標註(2019)

最近在做批量插入SQL Server時,出現了SQL參數過多的錯誤異常。經查閱資料,發現SQL server對於SQL中用戶自定義的參數限制爲2100個。於是變更了批量插入的分組數,解決該問題。

以下是蒐集的關於SQL Server的最大容量規範,包含數據庫引擎對象、實用工具對象、數據層引用對象、複製對象四個對象中的相關最大數量和最小數量。一般開發者重點還是在數據庫引擎對象這塊。個人覺得比較重要的都進行了加粗變色處理。

數據庫引擎 對象

在 SQL Server 數據庫中定義的或在 Transact-SQL 語句中引用的各種對象的最大大小和最大數量。

SQL Server 數據庫引擎 對象 (object) 最大大小/數量 SQL Server (64 位) 其他信息
批大小 65,536 * 網絡數據包大小 網絡數據包大小指的是用於在應用程序和關係 數據庫引擎之間進行通信的表格格式數據流 (TDS) 數據包的大小。 默認的數據包大小爲 4 KB,由“網絡數據包大小”配置選項控制。
每個短字符串列的字節數 8,000  
每個 GROUP BY、ORDER BY 的字節數 8,060  
每個索引鍵的字節數 聚集索引爲 900 字節。 非聚集索引爲 1,700 字節。 在 SQL Server中,聚集索引鍵的最大字節數不能超過 900。 對於非聚集索引鍵,最大值爲 1700 個字節數。

你可以使用可變長度列來定義鍵,這些列的最大大小之和可超過此限制。 但是,這些列中數據的總大小絕不能超過此限制。

在非聚集索引中,可以包含額外的非鍵列,且這些非鍵列不會算入鍵的大小限制。 非鍵列可能有助於更好地執行某些查詢。
內存優化表中的每個索引鍵的字節數 非聚集索引爲 2,500 字節。 哈希索引沒有限制,只要全部索引鍵均適應行內即可。 在內存優化表上,非聚集索引不能具有聲明的最大大小超過 2500 個字節的鍵列。 這與鍵列中實際數據是否短於聲明的最大大小並不相關。

因爲,哈希索引沒有硬性大小限制。

對於內存優化表的索引,不存在“包含的列”這一概念,因爲所有索引本來就覆蓋了所有的列。

對於內存優化表,即使行大小爲 8060 個字節,一些可變長度列也可以物理方式存儲於這 8060 個字節以外的空間。 但是,表上所有索引的所有鍵列,加上表中任何其他固定長度列,其最大聲明大小不得超過 8060 個字節。
每個外鍵的字節數 900  
每個主鍵的字節數 900  
每行的字節數 8,060 SQL Server 支持行溢出存儲,行溢出存儲使長度可變的列可以被推送到行外。 只有 24 字節的根存儲在推送出行外的可變長度列的主記錄中;因此,此版本中的有效行限制高於 SQL Server早期版本中的有效行限制。 有關更多信息,請參閱大型行支持
內存優化表中的每行字節數 8,060 啓動 SQL Server 2016 (13.x) 內存優化表支持行外存儲。 如果表中的所有列的最大大小超過 8060 個字節,則可變長度列將被擠出行,這是編譯時的決定。 存儲於行外的列僅有 8 字節的引用存儲於行內。 有關詳細信息,請參閱 內存優化表中的表和行大小
存儲過程源文本中的字節數 批處理大小中的較小者或 250 MB  
每個 varchar(max) 、 varbinary(max) 、 xml、 text或 image 列的字節 2^31-1  
每個 ntext 或 nvarchar(max) 列的字符 2^30-1  
每個表的聚集索引數 1  
GROUP BY、ORDER BY 中的列數 僅受字節數限制  
GROUP BY WITH CUBE 或 WITH ROLLUP 語句中的列數或表達式數目 10  
每個索引鍵的列數 32 如果表包含一個或多個 XML 索引,由於 XML 列被添加到主 XML 索引的聚集鍵,因此用戶表的聚集鍵被限制爲 31 列。 在 SQL Server中,可在非聚集索引中包括非鍵列以避免最多爲 32 個鍵列的限制。 有關詳細信息,請參閱 Create Indexes with Included Columns
每個外鍵的列數 32  
每個主鍵的列數 32  
每個非寬表的列數 1,024  
每個寬表的列數 30,000  
每個 SELECT 語句的列數 4,096  
每個 INSERT 語句的列數 4,096  
每個客戶端的連接個數 已配置連接的最大值  
數據庫大小 524,272 TB  
每個 SQL Server 32,767  
每個數據庫的文件組個數 32,767  
每個數據庫的內存優化數據文件組個數 1  
每個數據庫的文件個數 32,767  
文件大小(數據) 16 TB  
文件大小(日誌) 2 TB  
每個數據庫的內存優化數據文件個數 SQL Server 2014 (12.x) 中爲 4,096。 更高版本的 SQL Server 不會施加這樣的嚴格限制。  
每個內存優化數據文件的差異文件 1  
每個表的外鍵表引用數 傳出 = 253。 傳入 = 10,000。 有關限制,請參閱 Create Foreign Key Relationships
標識符長度(以字符計) 128  
每臺計算機的實例數 獨立服務器上爲 50 個實例。

在使用共享羣集磁盤作爲您的羣集安裝的存儲選項時,在故障轉移羣集上支持 25 個實例。如果您爲羣集安裝選擇 SMB 文件共享作爲存儲選項,則 SQL Server 在故障轉移羣集上支持 50 個實例。
 
每個內存優化表的索引個數 自 SQL Server 2017 (14.x) 起以及在 Azure SQL Database 中爲 999
SQL Server 2014 (12.x) 和 SQL Server 2016 (13.x) 中爲 8
 
包含 SQL 語句的字符串的長度(批大小) 65,536 * 網絡數據包大小 網絡數據包大小指的是用於在應用程序和關係 數據庫引擎之間進行通信的表格格式數據流 (TDS) 數據包的大小。 默認的數據包大小爲 4 KB,由“網絡數據包大小”配置選項控制。
每個連接的鎖數 每個服務器的最大鎖數  
每個 SQL Server 僅受內存限制 此值針對靜態鎖分配。 動態鎖僅受內存限制。
嵌套存儲過程級別數 32 如果存儲過程訪問的數據庫多於 64 個,或者交替訪問的數據庫多於 2 個,將收到錯誤信息。
嵌套子查詢個數 32  
嵌套觸發器層數 32  
每個表的非聚集索引數 999  
當存在以下任意子句時,GROUP BY 子句中的非重複表達式數:CUBE、ROLLUP、GROUPING SETS、WITH CUBE、WITH ROLLUP 32  
GROUP BY 子句中的運算符生成的分組集數目 4,096  
每個存儲過程的參數個數 2,100  
每個用戶定義函數的參數個數 2,100  
每個數據表的 REFERENCE 個數 253  
每個數據表的行數 受可用存儲空間限制  
每個數據庫的表數 受數據庫中對象數限制 數據庫對象包括諸如表、視圖、存儲過程、用戶定義函數、觸發器、規則、默認值和約束等對象。 數據庫中所有對象的數量總和不能超過 2,147,483,647。
每個分區表或索引的分區數 15,000  
非索引列的統計信息條數 30,000  
每個 SELECT 語句的表個數 僅受可用資源限制  
每個表的觸發器數 受數據庫中對象數限制 數據庫對象包括諸如表、視圖、存儲過程、用戶定義函數、觸發器、規則、默認值和約束等對象。 數據庫中所有對象的數量總和不能超過 2,147,483,647。
每個 UPDATE 語句(寬表)的列數 4096  
用戶連接 32,767  
XML 索引 249  

SQL Server 實用工具對象

在 SQL Server 實用工具中測試的各種對象的最大大小和最大數量。

SQL Server 實用工具對象 最大大小/數量 SQL Server (64 位)
每個 SQL Server 實用工具的計算機數(物理計算機或虛擬計算機) 100
每臺計算機的 SQL Server 實例數 5
每個 SQL Server 實用工具的 SQL Server 實例總數 200*
每個 SQL Server實例的用戶數據庫數(包括數據層應用程序) 50
每個 SQL Server 實用工具的用戶數據庫總數 1,000
每個數據庫的文件組數 1
每個文件組的數據文件數 1
每個數據庫的日誌文件數 1
每臺計算機的卷數 3

* SQL Server 實用工具支持的 SQL Server 託管實例的最大數目將會依服務器的硬件配置而定。

SQL Server 數據層應用程序對象

在 SQL Server 數據層應用程序 (DAC) 中測試的各種對象的最大大小和最大數量。

SQL Server DAC 對象 最大大小/數量 SQL Server (64 位)
每個 DAC 的數據庫數 1
每個 DAC 的對象數* 受數據庫中對象數或可用內存限制。

*限制中包含的對象類型爲用戶、表、視圖、存儲過程、用戶定義函數、用戶定義數據類型、數據庫角色、架構和用戶定義表類型。

複製對象

在 SQL Server 複製中定義的各種對象的最大大小和最大數量。

SQL Server 複製對象   最大大小/數量 SQL Server(64 位)
項目(合併發佈)   2048
項目(快照發布或事務發佈)   32,767
表中的列數*(合併發佈)   246
表中的列數**(SQL Server 快照發布或事務發佈)   1,000
表中的列數**(Oracle 快照發布或事務發佈)   995
行篩選器中使用的列的字節數(合併發佈)   1,024
行篩選器中使用的列的字節數(快照發布或事務發佈)   8,000

*如果將行跟蹤用於衝突檢測(默認設置),則基表最多可以包含 1,024 列,但必須從項目中對這些列進行篩選,以便最多可發佈 246 列。 如果使用列跟蹤,則基表最多可包含 246 列。

**基表可以包含發佈數據庫中允許的最大數量的列(在 SQL Server中爲 1,024),但如果這些列的數目超過爲發佈類型指定的最大值,則必須從項目中篩選這些列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章