SQL Server 的最大容量规范

适用范围:SQL Server

本文介绍了 SQL Server 2016 (13.x) 及更高版本中定义的各种对象的大小和数量上限。 若要查看版本限制,请参阅按 SQL Server 版本划分的计算能力限制

对于 SQL Server 2014 (12.x),请参阅 SQL Server 2014 的最大容量规范

数据库引擎对象

在 SQL Server 数据库中定义的或在 Transact-SQL 语句中引用的各种对象的最大值。

SQL Server 数据库引擎 对象 SQL Server (64 位) 的最大值 其他信息
批大小 65,536 *(网络数据包大小) 网络数据包大小指的是用于在关系数据库引擎和应用程序之间进行通信的表格格式数据流 (TDS) 数据包的大小。 默认数据包大小为 4 KB。 网络数据包大小会控制此配置选项。
包含 Transact-SQL 语句的字符串的长度(字节) 65,536 *(网络数据包大小) 网络数据包大小指的是用于在关系数据库引擎和应用程序之间进行通信的表格格式数据流 (TDS) 数据包的大小。 默认的数据包大小为 4 KB,由“网络数据包大小”配置选项控制。
每个短字符串列的字节数 8,000
GROUP BYORDER BY 的字节数 8,060
每个索引键的字节数 聚集索引为 900 字节。 非聚集索引为 1,700 个字节。 对于 SQL Server 2014 (12.x) 及更早版本,所有版本对所有索引类型都支持 900 个字节。 聚集索引键的最大字节数不能超过 900。 对于非聚集索引键,最大值为 1,700 个字节。

你可以使用可变长度列来定义键,这些列的最大大小之和可超过此限制。 但是,这些列中数据的总大小绝不能超过此限制。
在非聚集索引中,可以包含额外的非键列,且这些非键列不会算入键的大小限制。 非键列可能有助于更好地执行某些查询。
内存优化表中的每个索引键的字节数 非聚集索引为 2,500 个字节。 哈希索引没有限制,只要全部索引键均适应行内即可。 在内存优化表上,非聚集索引不能具有声明的最大大小超过 2,500 个字节的键列。 这与键列中实际数据是否短于声明的最大大小并不相关。

哈希索引键的大小没有硬性限制。
对于内存优化表的索引,不存在“包含的列”这一概念,因为所有索引本来就覆盖了所有的列。
对于内存优化表,即使行大小为 8,060 个字节,一些可变长度列也可以物理方式存储于这 8,060 个字节以外的空间。 但是,表上所有索引的所有键列,加上表中任何其他固定长度列,其最大声明大小不得超过 8,060 个字节。
每个外键的字节数 900
每个主键的字节数 900
每行的字节数 8,060 SQL Server 支持行溢出存储,行溢出存储使长度可变的列可以被推送到行外。 对于被推送到行外的长度可变的列,主记录中仅存储 24 个字节根。 有关更多信息,请参阅大型行支持
内存优化表中的每行字节数 8,060 SQL Server 2016 (13.x) 及更高版本上的内存优化表支持行外存储。 如果表中的所有列的最大大小超过 8,060 个字节,则长度可变的列被推送到行外;此操作是编译时的决定。 存储于行外的列仅有 8 字节的引用存储于行内。 有关详细信息,请参阅 内存优化表中的表和行大小
存储过程源文本中的字节数 批处理大小中的较小者或 250 MB
每个 varchar(max)varbinary(max)xmltextimage 列的字节数 2^31-1
每个 ntextnvarchar(max) 列的字符数 2^30-1
每个表的聚集索引数 1
GROUP BYORDER BY 中的列 仅受字节数限制
GROUP BY WITH CUBEGROUP BY WITH ROLLUP 语句中的列或表达式 10
每个索引键的列数 32 如果表包含一个或多个 XML 索引,由于 XML 列被添加到主 XML 索引的聚集键,因此用户表的聚集键被限制为 31 列。 你可在非聚集索引中包括非键列以避免最多为 32 个键列的限制。 有关详细信息,请参阅 Create Indexes with Included Columns
每个外键或主键的列数 32
每个 INSERT 语句的列数 4,096
每个 SELECT 语句的列数 4,096
每个表的列数 1,024 包含稀疏列集的表最多包含 30,000 列。 请参阅稀疏列集
每个 UPDATE 语句的列数 4,096 稀疏列集有不同的限制。
每个视图的列数 1,024
每个客户端的连接个数 已配置连接的最大值
数据库大小 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 2016 (13.x) 及更高版本,此限制更为宽松。
每个内存优化数据文件的差异文件 1
每个表的外键表引用数 传出 = 253。
传入 = 10,000。
有关限制,请参阅 Create Foreign Key Relationships
标识符长度(以字符计) 128
每台计算机的实例数 独立服务器上为 50 个实例。

使用共享群集驱动器作为存储时,有 25 个故障转移群集实例。
使用 SMB 文件共享作为存储选项时,有 50 个故障转移群集实例。
每个内存优化表的索引个数 自 SQL Server 2017 (14.x) 起以及在 Azure SQL 数据库中,该值为 999。

在 SQL Server 2016 (13.x) 和 SQL Server 2014 (12.x) 中,该值为 8。
每个连接的锁数 每个服务器的最大锁数
每个 SQL Server 仅受内存限制 此值针对静态锁分配。 动态锁仅受内存限制。
嵌套存储过程级别数 32 如果存储过程访问的数据库多于 64 个,或者交替访问的数据库多于 2 个,将收到错误信息。
嵌套子查询个数 32
嵌套事务 4,294,967,296
嵌套触发器层数 32
每个表的非聚集索引数 999
当存在以下任意子句时,GROUP BY 子句中的非重复表达式数:CUBEROLLUPGROUPING SETSWITH CUBEWITH 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。
用户连接 32,767
XML 索引 249

SQL Server 数据层应用程序对象

在 SQL Server 数据层应用程序 (DAC) 中测试的各种对象的最大值。

SQL Server DAC 对象 SQL Server (64 位) 的最大值 其他信息
每个 DAC 的数据库数 1
每个 DAC 的对象数目 受数据库中对象数或可用内存限制。 限制中包含的对象类型为用户、表、视图、存储过程、用户定义函数、用户定义数据类型、数据库角色、架构和用户定义表类型。

复制对象

在 SQL Server 复制中定义的各种对象的最大值。

SQL Server 复制对象 SQL Server 的最大值
(64 位)
其他信息
项目(合并发布) 2,048
项目(快照发布或事务发布) 32,767
表中的列数(合并发布) 246 如果将列跟踪用于冲突检测(默认),则基表最多可包含 1024 列。 但是,发布需要对条目进行筛选,以便最多发布 246 列。 如果使用列跟踪,则基表最多可包含 246 列。
表中的列数(SQL Server 快照发布或事务发布) 1,000 基表可以包含 SQL Server 发布数据库中允许的最大数量的列 (1,024),但如果这些列的数目超过为发布类型指定的最大值,则必须从项目中筛选这些列。
表中的列数(Oracle 快照发布或事务发布) 995 基表可以包含 SQL Server 发布数据库中允许的最大数量的列 (1,024),但如果这些列的数目超过为发布类型指定的最大值,则必须从项目中筛选这些列。
行筛选器中使用的列的字节数(合并发布) 1,024
行筛选器中使用的列的字节数(快照发布或事务发布) 8,000