主题:  想问一下关于sql server数据库大小如何计算的问题

zhnagyi

职务:普通成员
等级:1
金币:0.0
发贴:53
#12003/11/5 3:47:05
我想做一个电子商务网站,我前几天去中国万网购买了一个200M的WEB空间和50M的SQL SERVER数据库空间,但是不知道50M到底够不够了.我也不清楚这个数据库空间到底是怎么计算的,是不是有什么函数和计算方法呢?我以前做过一个网站,经常因为数据库空间不够而造成网站无法显示.这次我想做好完全的准备.请高手指教,谢谢了.



{ 在指尖上绽放的花朵 }

职务:普通成员
等级:5
金币:14.0
发贴:3209
#22003/11/5 18:27:18
这个算法是微软的秘密的说。

我当时学MCSE的时候特意问了这个问题,

结果那个老师也不知道…… 汗……

如果单纯的存贮文字数据的话,50M应该够了吧?



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#32003/11/5 20:19:01
SQL Server 联机文档:

估计表的大小

下列步骤可用于估计存储表中的数据所需的空间量。

指定表中的行数:
表中的行数 = Num_Rows

如果在表的定义中有固定长度和可变长度列,请计算数据行中这两组列的每一组所占用的空间。列的大小取决于数据类型和长度说明。有关更多信息,请参见数据类型。
列数 = Num_Cols

所有固定长度列中的字节总和 = Fixed_Data_Size

可变长度列数 = Num_Variable_Cols

所有可变长度列的最大值 = Max_Var_Size

如果表中有固定长度列,行的一部分(称为空位图)将保留以管理列的可为空性。计算大小:
空位图 (Null_Bitmap) = 2 + (( Num_Cols + 7) / 8 )

仅使用上述表达式中的整数部分,而去掉其余部分。

如果表中有可变长度列,请确定在行中存储这些列需使用的空间:
可变长度列的总大小 (Variable_Data_Size) = 2 + (Num_Variable_Cols x 2) + Max_Var_Size

如果没有可变长度列,请将 Variable_Data_Size 设置为 0。

此公式假设所有可变长度列均百分之百充满。如果预计可变长度列占用的存储空间比例较低,则可以按照该比例调整结果以对整个表大小得出一个更准确的估计。

计算行大小:
行总大小 (Row_Size) = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap +4

最后一个值 4 表示数据行首结构。

下一步,计算每页的行数(每页有 8096 可用字节):
每页的行数 (Rows_Per_Page) = ( 8096 ) / (Row_Size + 2)

因为行不跨页,所以每页的行数应向下舌入到最接近的整数。

如果要在表上创建聚集索引,那么要根据指定的填充因子计算每页保留的可用行数。有关更多信息,请参见填充因子。如果不创建聚集索引,请将 Fill_Factor 指定为 100。
每页的可用行数 (Free_Rows_Per_Page) = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)

计算中使用的填充因子为整数值,而不是百分数。

因为行不跨页,所以每页的行数应向下舍入到最接近的整数。填充因子增大时,每页将存储更多的数据,因此页数将减少。

计算存储所有行所需的页数:
页数 (Num_Pages) = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)

估计的页数应向上舍入到最接近的整数。

最后,计算存储表中的数据所需的空间量(每页总字节为8192):
表大小(字节)= 8192 x Num_Pages



zhnagyi

职务:普通成员
等级:1
金币:0.0
发贴:53
#42003/11/5 23:06:53
谢谢,太详细了,虽然看起来很复杂,不过我会拿回去慢慢研究的.谢谢你了



{ 在指尖上绽放的花朵 }

职务:普通成员
等级:5
金币:14.0
发贴:3209
#52003/11/6 17:52:07
哇哇~~~

好厉害~~~~

学习ing~~~