SQL SERVER工作日志--我的数据库会装满吗?
Posted owen zeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER工作日志--我的数据库会装满吗?相关的知识,希望对你有一定的参考价值。
背景
今天有个客户问我一个蛮有意思的问题。我使用的SQL SERVER 2008的数据库。目前数据库130多G了。其中某个表的就有
3亿1千多万的记录数,占用了50多G。那SQL SERVER 数据库中某一表有没有行数限制和列数限制呢?会不会突然有一天,超过这个限制
我的系统就不能使用了?
分析
这个问题其实在微软的官方文档已经给出了解释。只是大家可能没有注意看。具体结果如下图所示:
SQL Server 数据库引擎对象 |
最大大小/数量 - SQL Server(32 位) |
最大大小/数量 - SQL Server(64 位) |
---|---|---|
每个 GROUP BY、ORDER BY 的字节数 |
8,060 |
8,060 |
每个索引键的字节数2 |
900 |
900 |
每个外键的字节数 |
900 |
900 |
每个主键的字节数 |
900 |
900 |
每行的字节数8 |
8,060 |
8,060 |
每个 varchar(max)、varbinary(max)、xml、text 或image 列的字节数 |
2^31-1 |
2^31-1 |
每个 ntext 或 nvarchar(max) 列的字符数 |
2^30-1 |
2^30-1 |
每个数据表的聚集索引数 |
1 |
1 |
GROUP BY、ORDER BY 中的列数 |
仅受字节数限制 |
仅受字节数限制 |
GROUP BY WITH CUBE 或 WITH ROLLUP 语句中的列数或表达式数目 |
10 |
10 |
每个索引键的列数7 |
16 |
16 |
每个外键的列数 |
16 |
16 |
每个主键的列数 |
16 |
16 |
每个非宽表的列数 |
1,024 |
1,024 |
每个宽表的列数 |
30,000 |
30,000 |
每个 SELECT 语句的列数 |
4,096 |
4,096 |
每个 INSERT 语句的列数 |
4096 |
4096 |
每个客户端的连接个数 |
已配置连接的最大值 |
已配置连接的最大值 |
数据库大小 |
524,272 TB |
524,272 TB |
每个 SQL Server 实例的数据库个数 |
32,767 |
32,767 |
每个数据库的文件组个数 |
32,767 |
32,767 |
每个数据库的文件个数 |
32,767 |
32,767 |
文件大小(数据) |
16 TB |
16 TB |
文件大小(日志) |
2 TB |
2 TB |
每个表的外键表引用数4 |
253 |
253 |
标识符长度(以字符计) |
128 |
128 |
每台计算机的实例数 |
所有 SQL Server 版本(Workgroup 除外)的独立服务器上为 50 个实例。Workgroup 支持每台计算机上最多有 16 个实例。 SQL Server 支持故障转移群集上有 25 个实例。 |
独立服务器上为 50 个实例。 故障转移群集上 25 个实例。 |
包含 SQL 语句的字符串的长度(批大小)1 |
65,536 * 网络数据包大小 |
65,536 * 网络数据包大小 |
每个连接的锁数 |
每个服务器的最大锁数 |
每个服务器的最大锁数 |
每个 SQL Server 实例的锁数5 |
最多 2,147,483,647 |
仅受内存限制 |
嵌套存储过程级别数6 |
32 |
32 |
嵌套子查询个数 |
32 |
32 |
嵌套触发器层数 |
32 |
32 |
每个数据表的非聚集索引个数 |
999 |
999 |
存在以下任意子句的情况下 GROUP BY 子句中的非重复表达式数目:CUBE、ROLLUP、GROUPING SETS、WITH CUBE、WITH ROLLUP |
32 |
32 |
GROUP BY 子句中的运算符生成的分组集数目 |
4,096 |
4,096 |
每个存储过程的参数个数 |
2,100 |
2,100 |
每个用户定义函数的参数个数 |
2,100 |
2,100 |
每个数据表的 REFERENCE 个数 |
253 |
253 |
每个数据表的行数 |
受可用存储空间限制 |
受可用存储空间限制 |
每个数据库的表数3 |
受数据库中对象数限制 |
受数据库中对象数限制 |
每个分区表或索引的分区数 |
1,000 |
1,000 |
非索引列的统计信息条数 |
30,000 |
30,000 |
每个 SELECT 语句的表个数 |
仅受可用资源限制 |
仅受可用资源限制 |
每个表的触发器个数3 |
受数据库中对象数限制 |
受数据库中对象数限制 |
每个 UPDATE 语句(宽表)的列数 |
4096 |
4096 |
用户连接 |
32,767 |
32,767 |
XML 索引 |
249 |
249 |
从表中可以看到,每个表的行数是受可用空间限制。而可用空间对于整个数据库达到,524,272 TB。这是非常大的。不过值得注意的是,
对于单个数据文件的大小限制是16TB。
而对于列数,非宽表的最大列数是1024.对于关系型数据库这个值也非常大了,很难想象,你的列数超过这个值。
而表中的其他项目就不一一赘述了。需要的时候可以比对看看。
引用
官网的地址:https://technet.microsoft.com/zh-cn/library/ms143432(v=sql.100)
注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!
以上是关于SQL SERVER工作日志--我的数据库会装满吗?的主要内容,如果未能解决你的问题,请参考以下文章
sql server 2008 日志文件已经到了最大值,还会记录日志吗
在 SQL Server Always ON 配置中 - 将事务日志备份到 Nul 会中断 Always On 配置吗?