我的SQL SERVER数据库会装满吗?
概述
今天有個(gè)客戶問我一個(gè)蠻有意思的問題。我使用的SQL?SERVER?2008數(shù)據(jù)庫,目前數(shù)據(jù)庫130多G,其中某個(gè)表的記錄條數(shù)就有3億1千多萬,占用了50多G。那SQL?SERVER?數(shù)據(jù)庫中的表有沒有行數(shù)和列數(shù)限制呢?會(huì)不會(huì)突然有一天,超過這個(gè)限制,我的系統(tǒng)就不能使用了??
?
最大容量
? ? ? SQL SERVER 是否會(huì)被裝滿,主要是在于數(shù)據(jù)庫的最大容量。包括最大行數(shù)和最大列數(shù) 以及其他。 具體內(nèi)容,我們可以查看下面列表:
| 每個(gè) GROUP BY、ORDER BY 的字節(jié)數(shù) | 8,060 |
| 每個(gè)索引鍵的字節(jié)數(shù)2 | 900 |
| 每個(gè)外鍵的字節(jié)數(shù) | 900 |
| 每個(gè)主鍵的字節(jié)數(shù) | 900 |
| 每行的字節(jié)數(shù)8 | 8,060 |
| 每個(gè)?varchar(max)、varbinary(max)、xml、text?或image?列的字節(jié)數(shù) | 2^31-1 |
| 每個(gè)?ntext?或?nvarchar(max)?列的字符數(shù) | 2^30-1 |
| 每個(gè)數(shù)據(jù)表的聚集索引數(shù) | 1 |
| GROUP BY、ORDER BY 中的列數(shù) | 僅受字節(jié)數(shù)限制 |
| GROUP BY WITH CUBE 或 WITH ROLLUP 語句中的列數(shù)或表達(dá)式數(shù)目 | 10 |
| 每個(gè)索引鍵的列數(shù)7 | 16 |
| 每個(gè)外鍵的列數(shù) | 16 |
| 每個(gè)主鍵的列數(shù) | 16 |
| 每個(gè)非寬表的列數(shù) | 1,024 |
| 每個(gè)寬表的列數(shù) | 30,000 |
| 每個(gè) SELECT 語句的列數(shù) | 4,096 |
| 每個(gè) INSERT 語句的列數(shù) | 4096 |
| 每個(gè)客戶端的連接個(gè)數(shù) | 已配置連接的最大值 |
| 數(shù)據(jù)庫大小 | 524,272 TB |
| 每個(gè) SQL Server 實(shí)例的數(shù)據(jù)庫個(gè)數(shù) | 32,767 |
| 每個(gè)數(shù)據(jù)庫的文件組個(gè)數(shù) | 32,767 |
| 每個(gè)數(shù)據(jù)庫的文件個(gè)數(shù) | 32,767 |
| 文件大小(數(shù)據(jù)) | 16 TB |
| 文件大小(日志) | 2 TB |
| 每個(gè)表的外鍵表引用數(shù)4 | 253 |
| 標(biāo)識(shí)符長度(以字符計(jì)) | 128 |
| 每臺(tái)計(jì)算機(jī)的實(shí)例數(shù) | 獨(dú)立服務(wù)器上為 50 個(gè)實(shí)例。 故障轉(zhuǎn)移群集上 25 個(gè)實(shí)例。 |
| 包含 SQL 語句的字符串的長度(批大小)1 | 65,536 * 網(wǎng)絡(luò)數(shù)據(jù)包大小 |
| 每個(gè)連接的鎖數(shù) | 每個(gè)服務(wù)器的最大鎖數(shù) |
| 每個(gè) SQL Server 實(shí)例的鎖數(shù)5 | 僅受內(nèi)存限制 |
| 嵌套存儲(chǔ)過程級(jí)別數(shù)6 | 32 |
| 嵌套子查詢個(gè)數(shù) | 32 |
| 嵌套觸發(fā)器層數(shù) | 32 |
| 每個(gè)數(shù)據(jù)表的非聚集索引個(gè)數(shù) | 999 |
| 存在以下任意子句的情況下 GROUP BY 子句中的非重復(fù)表達(dá)式數(shù)目:CUBE、ROLLUP、GROUPING SETS、WITH CUBE、WITH ROLLUP | 32 |
| GROUP BY 子句中的運(yùn)算符生成的分組集數(shù)目 | 4,096 |
| 每個(gè)存儲(chǔ)過程的參數(shù)個(gè)數(shù) | 2,100 |
| 每個(gè)用戶定義函數(shù)的參數(shù)個(gè)數(shù) | 2,100 |
| 每個(gè)數(shù)據(jù)表的 REFERENCE 個(gè)數(shù) | 253 |
| 每個(gè)數(shù)據(jù)表的行數(shù) | 受可用存儲(chǔ)空間限制 |
| 每個(gè)數(shù)據(jù)庫的表數(shù)3 | 受數(shù)據(jù)庫中對(duì)象數(shù)限制 |
| 每個(gè)分區(qū)表或索引的分區(qū)數(shù) | 1,000 |
| 非索引列的統(tǒng)計(jì)信息條數(shù) | 30,000 |
| 每個(gè) SELECT 語句的表個(gè)數(shù) | 僅受可用資源限制 |
| 每個(gè)表的觸發(fā)器個(gè)數(shù)3 | 受數(shù)據(jù)庫中對(duì)象數(shù)限制 |
| 每個(gè) UPDATE 語句(寬表)的列數(shù) | 4096 |
| 用戶連接 | 32,767 |
| XML 索引 | 249 |
最大行數(shù)
從表中可以看到,每個(gè)表的行數(shù)是受可用空間限制。而可用空間對(duì)于整個(gè)數(shù)據(jù)庫達(dá)到,524,272 TB。這是非常大的。不過值得注意的是,對(duì)于單個(gè)數(shù)據(jù)文件的大小限制是16TB。
自增列
剛才園子里的朋友提到了某種特殊的情況,如果表上的自增列情況呢?
create TABLE test (
id INT IDENTITY (2147483647,1),
name VARCHAR(100)
)
INSERT INTO test (name) VALUES ('Owen')
INSERT INTO test (name) VALUES ('Zeng')
?
?
果然溢出了。所以說,對(duì)于有自增列的表,表上的行數(shù)限制,跟定義的自增列的數(shù)據(jù)類型,起始值,步長都有關(guān)系。
針對(duì)這種情況可以使用bigint類型。防止超過行數(shù)限制。
?
最大列數(shù)
而對(duì)于列數(shù),非寬表的最大列數(shù)是1024.對(duì)于關(guān)系型數(shù)據(jù)庫這個(gè)值也非常大了,很難想象,你的列數(shù)超過這個(gè)值。
當(dāng)然這個(gè)1024 只是理論值,和上面的自增列一樣還是有其他條件制約著列數(shù)的限制。請(qǐng)看下面的例子:
?
CREATE TABLE test(id char(4030),name char(4030),title CHAR(10))
?
?
我的表才3個(gè)列就不讓我創(chuàng)建了,,,這個(gè)數(shù)據(jù)庫太無情了,,,,,,
這是為什么呢? 從之前的表上我們可以看到,字節(jié)數(shù)8060.其中包括7字節(jié)的內(nèi)部開銷。
所以,列數(shù)限制還和你定義的列的長度有關(guān).
其他
?對(duì)于其他容量限制就不一一贅述了,后續(xù)如果有遇到的時(shí)候再補(bǔ)充。
?
引用
官方文檔:https://technet.microsoft.com/zh-cn/library/ms143432(v=sql.100)
?
總結(jié)
以上是生活随笔為你收集整理的我的SQL SERVER数据库会装满吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这里有一份面筋请查收(四)
- 下一篇: zabbix开启报警声音 网页也可以有声