SQL Server 的最大容量规范
适用于: SQL Server(所有支持的版本)
本文介绍 SQL Server 组件中定义的各种对象的最大大小和最大数量。
数据库引擎对象
在 SQL Server 数据库中定义的或在 Transact-SQL 语句中引用的各种对象的最大大小和最大数量。
SQL Server 数据库引擎 对象 | 最大大小/数量 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 | ||
每个 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 不会施加这样的严格限制。 | ||
每个内存优化数据文件的差异文件 | 1 | ||
每个表的外键表引用数 | 传出 = 253。 传入 = 10,000。 | 有关限制,请参阅 Create Foreign Key Relationships。 | |
标识符长度(以字符计) | 128 | ||
每台计算机的实例数 | 独立服务器上为 50 个实例。 使用共享群集磁盘作为存储时,有 25 个故障转移群集实例。 使用 SMB 文件共享作为存储选项时,有 50 个故障转移群集实例。 |
||
每个内存优化表的索引个数 | 自 SQL Server 2017 (14.x) 起以及在 Azure SQL 数据库 中为 999 SQL Server 2014 (12.x) 和 SQL Server 2016 (13.x) 中为 8 |
||
包含 SQL 语句的字符串的长度(批大小) | 65,536(网络数据包大小) | 网络数据包大小指的是用于在应用程序和关系数据库引擎之间进行通信的表格格式数据流 (TDS) 数据包的大小。 默认的数据包大小为 4 KB,由“网络数据包大小”配置选项控制。 | |
每个连接的锁数 | 每个服务器的最大锁数 | ||
每个 SQL Server | 仅受内存限制 | 此值针对静态锁分配。 动态锁仅受内存限制。 | |
嵌套存储过程级别数 | 32 | 如果存储过程访问的数据库多于 64 个,或者交替访问的数据库多于 2 个,将收到错误信息。 | |
嵌套子查询个数 | 32 | ||
嵌套事务 | 4,294,967,296 | ||
嵌套触发器层数 | 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。 | |
用户连接 | 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 版本中均提供 SQL Server 2019 (15.x)。 有关 SQL Server各版本支持的功能列表,请参阅 SQL Server 2016 各个版本支持的功能。
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),但如果这些列的数目超过为发布类型指定的最大值,则必须从项目中筛选这些列。