我的SQL SERVER数据库会装满吗?
概述
今天有個客戶問我一個蠻有意思的問題。我使用的SQL?SERVER?2008數據庫,目前數據庫130多G,其中某個表的記錄條數就有3億1千多萬,占用了50多G。那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)
?
總結
以上是生活随笔為你收集整理的我的SQL SERVER数据库会装满吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这里有一份面筋请查收(四)
- 下一篇: linux cmake编译源码,linu