我的SQL SERVER数据库会装满吗?

原文:我的SQL SERVER数据库会装满吗?

概述

  今天有个客户问我一个蛮有意思的问题。我使用的SQL SERVER 2008数据库,目前数据库130多G,其中某个表的记录条数就有3亿1千多万,占用了50多G。那SQL SERVER 数据库中的表有没有行数和列数限制呢?会不会突然有一天,超过这个限制,我的系统就不能使用了?

最大容量

SQL SERVER 是否会被装满,主要是在于数据库的最大容量。包括最大行数和最大列数 以及其他。 具体内容,我们可以查看下面列表:


SQL Server 数据库引擎对象


最大大小/数量


每个 GROUP BY、ORDER BY 的字节数


8,060


每个索引键的字节数2


900


每个外键的字节数


900


每个主键的字节数


900


每行的字节数8


8,060


每个 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


每个索引键的列数7


16


每个外键的列数


16


每个主键的列数


16


每个非宽表的列数


1,024


每个宽表的列数


30,000


每个 SELECT 语句的列数


4,096


每个 INSERT 语句的列数


4096


每个客户端的连接个数


已配置连接的最大值


数据库大小


524,272 TB


每个 SQL Server 实例的数据库个数


32,767


每个数据库的文件组个数


32,767


每个数据库的文件个数


32,767


文件大小(数据)


16 TB


文件大小(日志)


2 TB


每个表的外键表引用数4


253


标识符长度(以字符计)


128


每台计算机的实例数


独立服务器上为 50 个实例。

故障转移群集上 25 个实例。


包含 SQL 语句的字符串的长度(批大小)1


65,536 * 网络数据包大小


每个连接的锁数


每个服务器的最大锁数


每个 SQL Server 实例的锁数5


仅受内存限制


嵌套存储过程级别数6


32


嵌套子查询个数


32


嵌套触发器层数


32


每个数据表的非聚集索引个数


999


存在以下任意子句的情况下 GROUP BY 子句中的非重复表达式数目:CUBE、ROLLUP、GROUPING SETS、WITH CUBE、WITH ROLLUP


32


GROUP BY 子句中的运算符生成的分组集数目


4,096


每个存储过程的参数个数


2,100


每个用户定义函数的参数个数


2,100


每个数据表的 REFERENCE 个数


253


每个数据表的行数


受可用存储空间限制


每个数据库的表数3


受数据库中对象数限制


每个分区表或索引的分区数


1,000


非索引列的统计信息条数


30,000


每个 SELECT 语句的表个数


仅受可用资源限制


每个表的触发器个数3


受数据库中对象数限制


每个 UPDATE 语句(宽表)的列数


4096


用户连接


32,767


XML 索引


249

最大行数

从表中可以看到,每个表的行数是受可用空间限制。而可用空间对于整个数据库达到,524,272 TB。这是非常大的。不过值得注意的是,对于单个数据文件的大小限制是16TB。

自增列

刚才园子里的朋友提到了某种特殊的情况,如果表上的自增列情况呢?

create TABLE test (
id INT IDENTITY (2147483647,1),
name VARCHAR(100)
)

INSERT INTO test (name) VALUES (‘Owen‘)
INSERT INTO test (name) VALUES (‘Zeng‘)

果然溢出了。所以说,对于有自增列的表,表上的行数限制,跟定义的自增列的数据类型,起始值,步长都有关系。

针对这种情况可以使用bigint类型。防止超过行数限制。

最大列数

而对于列数,非宽表的最大列数是1024.对于关系型数据库这个值也非常大了,很难想象,你的列数超过这个值。

当然这个1024 只是理论值,和上面的自增列一样还是有其他条件制约着列数的限制。请看下面的例子:

CREATE TABLE test(id char(4030),name char(4030),title CHAR(10))

我的表才3个列就不让我创建了,,,这个数据库太无情了,,,,,,

这是为什么呢? 从之前的表上我们可以看到,字节数8060.其中包括7字节的内部开销。

所以,列数限制还和你定义的列的长度有关.

其他

对于其他容量限制就不一一赘述了,后续如果有遇到的时候再补充。

引用

官方文档:https://technet.microsoft.com/zh-cn/library/ms143432(v=sql.100)

时间: 2024-11-18 04:30:44

我的SQL SERVER数据库会装满吗?的相关文章

SQL server数据库的在server 2008R2上的安装及基本管理

         SQL server数据库的在server 2008R2上的安装及基本管理(一) 选择SQL的数据库的镜像文件 双击setup.ext 执行安装程序 这里选择安装项,并选择全新安装 安装的环境监测全部通过 因为这里是使用的破解版的镜像,所以会自动生成密钥 再一次检测安装环境 这里选择第一项 这里选择全部的功能 这里选择默认的实例名 这里将系统的内置账户添加到服务中,NT 这里选择混合式身份 验证,并输入sa的密码.并添加本地的管理员 这里添加本地的管理员账户 选择第一项 开始安

SQL Server数据库镜像关键性能计数器

SQL Server数据库镜像关键性能计数器 监视数据库镜像基本有以下5种方法: 1. 配置数据库镜像监视器.设置告警阈值. 2. 配置WMI EVENT ALERT,配置镜像状态修改后的动作或告警. 3. 使用系统监视器查看关键性能计数器. 4. 部署作业监控异常镜像状态,发送告警. 5. 使用sp_dbmmonitorresults获取镜像数据. 当然,使用扩展事件和SQL Server Profiler也能监控到数据库事件中的数据库镜像状态修改.这种工具主要用于跟踪,而非监控的常规手段.

[转]C#操作SQL Server数据库

转自:C#操作SQL Server数据库 1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用: 第三,对SQL或存储过程执行后返回的“结果”进行操作. 对返回“结果”的操作可以分为两类: 一是用SqlDataReader直接一行一行的读取数据集: 二是DataSet联合SqlDataAdapter来操作数据库. 两者比较: SqlDataRead

SQL Server数据库空间管理 (1)

数据库经常遇到的问题: 1).数据库文件空间用尽  2).日志文件不停增长 3).数据库文件无法收缩  4).自动增长和自动收缩 本系列就以上面的4个问题入手分析并总结数据库空间的管理方法.   1.文件的分配方式以及文件空间检查方法 首先,你在你的数据库中运行sp_spaceused;之后会看到当前数据库的使用空间信息:这个命令也就会将大概的数据库空间信息给你展现出来,并不能查看每个数据文件和日志文件的使用情况:其中对于数据库tempdb来说里面存储的临时数据对象,这个命令是统计不到的.我们知

.NET跨平台之旅:升级至ASP.NET 5 RC1,Linux上访问SQL Server数据库

今天微软正式发布了ASP.NET 5 RC1(详见Announcing ASP.NET 5 Release Candidate 1),.NET跨平台迈出了关键一步. 紧跟这次RC1的发布,我们成功地将运行在Linux上的示例站点(http://about.cnblogs.com)升级到了ASP.NET 5 RC1,并且增加了数据库访问功能——基于Entity Framework 7 RC1访问SQL Server数据库. 示例站点页面左侧的导航是从数据库读取数据动态加载的,数据库服务器用的是阿里

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

SQL Server数据库性能优化之SQL语句篇(转载)

SQL Server数据库性能优化之SQL语句篇 原文地址:http://www.blogjava.net/allen-zhe/archive/2010/07/23/326927.html 期项目需要,做了一段时间的SQL Server性能优化,遇到了一些问题,也积累了一些经验,现总结一下,与君共享.SQL Server性能优化涉及到许多方面,如良好的系统和数据库设计,优质的SQL编写,合适的数据表索引设计,甚至各种硬件因素:网络性能.服务器的性能.操作系统的性能,甚至网卡.交换机等.这篇文章主

提高SQL Server数据库效率常用方法

1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优化 ●可以通过如下方法来优化查询 : 1.把数据.日志.索引放到不同的

SQL Server数据库ROW_NUMBER()函数使用

下面以几个实例来说明ROW_NUMBER()函数的使用. 实例如下: 1.使用row_number()函数进行编号,如 select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer 原理:先按psd进行排序,排序完后,给每条数据进行编号. 2.在订单中按价格的升序进行排序,并给每条记录进行排序代码如下: select DID,customerID,totalPrice,ROW_NUMBER()