精华内容
下载资源
问答
  • oracle数据库空间估算

    千次阅读 2011-11-24 09:57:57
    oracle数据库空间估算 如何计算存储空间,整理了一下 我们在设计一个数据库的时候除了考虑数据块的大小,可能还要和开发沟通,这个数据库要存储多少数据,那么这个数据库应该具备多大的容量来满足一个应用的...
    oracle数据库空间估算

    如何计算存储空间,整理了一下

    我们在设计一个数据库的时候除了考虑数据块的大小,可能还要和开发沟通,这个数据库要存储多少数据,那么这个数据库应该具备多大的容量来满足一个应用的存储呐?DBA就需要计算一下这个应用占用多大的存储空间

    首先我们来看一下几个换算的单位:
    1K=1024Bytes;
    1M=1024K
    1G=1024M
    1T=1024G

    而我们的表里一个字段能占用多大的空间呐?我们先看一下字段的类型:
    1.        变成:number(),varchar2 (),long ,blob等都是变成 (单位都是Bytes)
    2.        定长:date (7bytes) ,char()

    根据经验:
    1.对于变长字段的处理:
    我们在估算一行所占用空间的时候只能是取最大值,比如x number(20),这个字段,我们不管插入x列里的内容是否真正的满足20个bytes,我们都按照20来计算;
    2.对于定长字段的处理:
      这个就直接取实际长度就ok了;

    具个例子来计算一下平均行占用的存储空间:

    Create table test (x number(20),y varchar2(20),z date ,char(20));

    那么这个表平均每行最大使用的空间为:
    (20+20+7+20)=67 (Bytes)
      假设这个表里有20000000条数据,那么这个表所使用的净空间(pur_stroage)为:
    (20+20+7+20)*20000000 (Bytes)=1278M


    但是ORACLE在组织存储的时候是有空间结构的,oracle要把一部分空间分配给数据库作为结构存储(str_storage),不会把所有的空间都分配给我们用来数据存储,这么大的数据量我们要给多少真正的存储空间(real_stroage)?

    我们可以用下边这个简单的公式来计算:
       real_stroage= str_storage+ pur_stroage


    上边这个公式中,我们已知了pur_stroage 要求出real_stroage就需要知道str_storage,ok现在我们来了解一下每个块的存储形式下图是个block的结构图

    _______________________________________________________________________
    |                     |                                                                                                                     |
    |  1fixed          |                                                                                                                     |
    |   header        |                                                                                                                    |
    |___________|                                                                                                                    |
    |                       |                                                                                                                   |
    | 2. variable      |                                                                                                                  |
    | trans_header |             5- available_block                                                                         |
    |___________ |                                                                                                                   |
    |                       |                                                                                                                   |
    |  3.table dir     |                                                                                                                   |
    |                      |                                                                                                                    |
    |___________|                                                                                                                     |
    |                      |                                                                                                                     |
    |  4.row dir      |                                                                                                                     |
    |                      |                                                                                                                     |
    |___________|___________________________________________________________|

        
    1-4部分组成了一个数据块的块头(block_header)
    5 是数据块的块身(block_body)

    一个一个说吧:

    1.        定长的数据块头 57bytes
    2.        块中事务并发使用空间,这个值是有可能变化的,如果多个事务并发,那么这个块的大小会发生改变,一个事务是23*1 bytes,2个事务是23*2 bytes,依次类推,一般我们计算的似乎后按照23*1来计算
    3.        使用块的表 4 bytes
    4.        使用块的行 2 *n bytes 这个块的列使用情况在于有多少行如果有4行数据存储在这个块里那么n=4
    5.        才是表和索引能使用的存储空间


    那么是不是5里的空间我们能够完全使用呐?
    非也,拿上边的例子来说吧,假设有一行数据里test.x里存储的数值是1,这个时候有一个语句来执行:
      Update test set x=100000000,而恰好这个时候此行数据所在的block满了怎么办?
    Oracle为了避免这种情况的发生,引入了两个概念:
      PCTUSED和PCTFREE,这两个值相当于2个水位线,我们拿一个杯子来比喻数据块,那么PCTUSED控制这个杯子什么时候可以继续倒水;而PCTUSED表示什么时候这个杯子不能再倒水了

       假设PCTUSED设置成了6,PCTFREE设置成了2 ,那么它就表示,当一个杯子达到了60%空的时候可以再继续使用,当杯子的水达到80%的时候就不能再倒水了,而这个值全部都记录在数据块的freelist列表里;


        所以可见,5里的初次使用率最高也不会超过available_block*PCTFREE



        str_storage=(fix_header+trans_header+table_dir+row_dir*N)*pctfree/10
                 
       real_stroage= str_storage+ pur_stroage
                                    =(fix_header+trans_header+table_dir+row_dir*N)*pctfree/10+(20+20+7+20)* N
                   N=该表里的数据量


        当然这个值所求出来的也是个近似的值;
    展开全文
  • 数据库估算

    2010-03-08 15:29:16
    计算一条数据占用物理空间多少可以大体如下计算: 统计表的所有字段分别按字段大小计算:常用的char()括号里数字多少就站多少B,varchar2()实际存储几位就占几B,括号内位最大值, DATE类型存储为7个字节,...

    计算一条数据占用物理空间多少可以大体如下计算:

    统计表的所有字段分别按字段大小计算:常用的char()括号里数字多少就站多少B,varchar2()实际存储几位就占几B,括号内位最大值,

    DATE类型存储为7个字节,TIMESTAMP存储为11个字节。

    number比较复杂 如下:

     

    number:位数(scale),精度(precision)只能用来限定存储范围,不能决定存储的实际空间字节大小。

    对于number类型,负号(-)占用1个字节,正号(+)不占字节,小数点占用1个字节,小数点左右两边的数字每2个数字占用1个字节,小数点右边最后的0不占字节,如果小数部分为0,则小数点左边的最后数量为2的倍数的0不占用字节。对于任何number型,都占用一个小数点(即一个字节)。如下:

     

    占用字节统计

    Number(10,2)

    Number(10,0)

    (int,integer)

    BINARY_DOUBLE

    BINARY_FLOAT

    (会出现精度不准的情况)

    FLOAT(n)

    N=1,2,8

    Number(float)

    1234

    3

    3

    8

    4

    2,3

    3

    12340

    4

    4

    8

    4

    2,3

    4

    123400

    3

    3

    8

    4

    2,3

    3

    1000000

    2

    2

    8

    4

    2,2

    2

    1.234

    3

    2

    8

    4

    2,3

    4

    1.23400

    3

    2

    8

    4

    2,3

    4

    123400.0012

    3

    3

    8

    4

    2,3

    6

    -1234

    4

    4

    8

    4

    2,4

    4

     

     

     

     

    展开全文
  • 通过Mysql系统表,information_schema数据库tables数据表的DATA_LENGTH, INDEX_LENGTH, TABLE_ROWS字段来估算SAAS系统租户数据存储空间

      有个快消品中小企业进销存SaaS系统需要跟踪租户的数据增长量并估算租户数据存储空间,数据增长量比较容易计算求数据表租户记录数变化量即可,但是估算租户数据存储空间却不是那么直接,需要一点小技巧。当时,估算Mysql存储空间用了2种方案:

    1、根据表结构、记录数估算表存储空间

    1)汇总数据表各字段类型所占字节大小,rowSize;
    2)租户表空间 = rowSize * 租户记录数;
    3)租户数据存储空间 = sum(租户所有表空间)

    存在问题:
    1)表结构各字段类型所占字节大小 * 租户记录数,并不能正确代表表存储空间,索引空间、页最小存储空间等没有考虑;
    2)表结构有变化,需要更新元数据,否则表结构各字段类型所占字节大小求和不准确;
    3)索引空间没考虑在内;

    2、使用Mysql系统表,或show命令查看

    以系统表为例,information_schema数据库tables数据表,关键字段如下:

    TABLE_NAME ENGINE TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH INDEX_LENGTH
    base_goods InnoDB 1327 234 311296 180224
    sale_account_discount_detail InnoDB 6235 254 1589248 671744

    其中:

    • TABLE_NAME:表名
    • TABLE_ROWS:表记录数
    • DATA_LENGTH:表数据存储空间
    • INDEX_LENGTH:表索引存储空间
    • 表所占空间 TABLE_LENGTH = DATA_LENGTH + INDEX_LENGTH

    则租户表空间计算如下:

    • TENANT_LENGTH = 租户表记录数/TABLE_ROWS * TABLE_LENGTH
    • 租户存储空间 = sum(租户不同表的TENANT_LENGTH)

    该方案优缺点:

    • 优点:数据库自身功能,相对较准确,取数据快;
    • 缺点:部分表空间计算,受表碎片影响,可能存在严重的虚大情况

    综合上述2各方案,最终使用Mysql系统表来估算租户数据空间。

    展开全文
  • http://jinnianshilongnian.iteye.com/blog/2031823估计表的大小(一)估计表的大小下列步骤可用于估计存储表中的数据所需的空间量。指定表中的行数:表中的行数 = Num_Rows如果在表的定义中有固定长度和可变长度列,...

    http://jinnianshilongnian.iteye.com/blog/2031823

    估计表的大小(一)

    估计表的大小

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

    指定表中的行数:

    表中的行数 = 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

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcxc/archive/2006/06/25/833776.aspx

    估计表的大小(二)--估计带有聚集索引的表的大小

    估计带有聚集索引的表的大小

    下列步骤可用于估计存储带有聚集索引的表上的数据和任何附加的非聚集索引所需的空间。

    计算存储数据所用的空间。

    计算存储聚集索引所用的空间。

    计算存储每个附加非聚集索引所用的空间。

    汇总计算所得的值。

    对于每个计算,都要指定将在表中出现的行数。表中的行数将对表的大小有直接影响:

    表中的行数 = Num_Rows

    计算存储数据所用的空间

    有关如何计算存储数据所用空间的更多信息,请参见估计表的大小。

    记下计算所得的值:

    存储数据所用的空间 = Data_Space_Used

    计算存储聚集索引所用的空间

    下列步骤可用于估计存储聚集索引所需的空间。

    聚集索引定义可以包括固定长度和可变长度列。为了估计聚集索引的大小,需要指定索引行中这两组列的每一组所占用的空间。

    索引键中的列数 = Num_CKey_Cols

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

    索引键中的可变长度列数 = Num_Variable_CKey_Cols

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

    如果聚集索引中有固定长度列,那么索引行的一部分将为空位图保留。计算大小:

    索引空位图 (CIndex_Null_Bitmap) = 2 + (( Num_CKey_Cols + 7) / 8 )

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

    如果索引中有可变长度列,请确定存储索引行中的这些列需使用的空间:

    可变长度列的总大小 (Variable_CKey_Size) = 2 + (Num_Variable_CKey_Cols x 2) + Max_Var_CKey_Size

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

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

    计算索引行大小:

    索引行总大小 (CIndex_Row_Size) = Fixed_CKey_Size + Variable_CKey_Size + CIndex_Null_Bitmap + 1 + 8

    下一步,计算每页的索引行数(每页有 8096 个可用字节):

    每页的索引行数 (CIndex_Rows_Per_Page) = ( 8096 ) / (CIndex_Row_Size + 2)

    由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。

    下一步,计算存储索引的每一级别的所有索引行所需的页数。

    页数(第 0 级)(Num_Pages_CLevel_0) = (Data_Space_Used / 8192) / CIndex_Rows_Per_Page

    页数(第 1 级)(Num_Pages_CLevel_1) = Num_Pages_CLevel_0 / CIndex_Rows_Per_Page

    重复第二个计算,将从前面的第 n 级中计算的页数除以 CIndex_Rows_Per_Page,直到指定的第 n (Num_Pages_CLevel_n) 级页数等于 1(索引根页)。例如,若要计算第二个索引级别所需的页数:

    页数(第 2 级) (Num_Pages_CLevel_2) = Num_Pages_CLevel_1 / CIndex_Rows_Per_Page

    对于每一级别,预计的页数应向上舍入到最接近的整数。

    汇总存储各索引级别所需页数:

    总页数 (Num_CIndex_Pages) = Num_Pages_CLevel_0 + Num_Pages_CLevel_1 +

    Num_Pages_CLevel_2 + ...+ Num_Pages_CLevel_n

    计算聚集索引的大小(每页总共有 8192 字节):

    聚集索引大小(字节) = 8192 x Num_CIndex_Pages

    计算存储每个附加非聚集索引所用的空间

    下列步骤可用于估计存储每个附加的非聚集索引所需空间量。

    非聚集索引定义可以包括固定长度和可变长度列。为了估计非聚集索引的大小,需要计算索引行中这两组列的每一组所占用的空间。

    索引键中的列数 = Num_Key_Cols

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

    索引键中的可变长度列数 = Num_Variable_Key_Cols

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

    如果索引中有固定长度列,那么索引行的一部分将为空位图保留。计算大小:

    索引空位图 (Index_Null_Bitmap) = 2 + (( Num_Key_Cols + 7) / 8 )

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

    如果索引中有可变长度列,请确定存储索引行中的这些列需使用的空间:

    可变长度列的总大小 (Variable_Key_Size) = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size

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

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

    计算非叶级索引行大小:

    非叶级索引行总大小 (NL_Index_Row_Size) = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 + 8

    计算每页的非叶级索引行数:

    每页的非叶级索引行数 (NL_Index_Rows_Per_Page) =

    ( 8096 ) / (NL_Index_Row_Size + 2)

    由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。

    计算叶级索引行大小:

    叶级索引行总大小 (Index_Row_Size) = CIndex_Row_Size + Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1

    最后一个值 1 表示索引行首结构。CIndex_Row_Size 是聚集索引键的索引行总大小。

    计算每页的叶级索引行数:

    每页的叶级索引行数 (Index_Rows_Per_Page) = ( 8096 ) / (Index_Row_Size + 2)

    由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。

    根据为非聚集索引指定的填充因子,计算每页保留的可用索引行数。有关更多信息,请参见填充因子。

    每页的可用索引行数 (Free_Index_Rows_Per_Page) = 8096 x ((100 - Fill_Factor) / 100) / Index_Row_Size

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

    由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。

    计算存储索引的每一级别的所有索引行所需的页数:

    页数(第 0 级) (Num_Pages_Level_0) = Num_Rows / (Index_Rows_Per_Page - Free_Index_Rows_Per_Page)

    页数(第 1 级) (Num_Pages_Level_1) = Num_Pages_Level_0 / NL_Index_Rows_Per_Page

    重复第二个计算,将从前面的第 n 级中计算的页数除以 NL_Index_Rows_Per_Page,直到指定的第 n (Num_Pages_Level_n) 级页数等于 1(根页)。

    例如,若要计算第二个和第三个索引级别所需页数:

    数据页数(第 2 级) (Num_Pages_Level_2) = Num_Pages_Level_1 / NL_Index_Rows_Per_Page

    数据页数(第 3 级) (Num_Pages_Level_3) = Num_Pages_Level_2 / NL_Index_Rows_Per_Page

    对于每一级别,预计的页数应向上舍入到最接近的整数。

    汇总存储各索引级别所需页数:

    总页数 (Num_Index_Pages) = Num_Pages_Level_0 + Num_Pages_Level_1 +Num_Pages_Level_2 + ...+ Num_Pages_Level_n

    计算非聚集索引的大小:

    非聚集索引大小(字节) = 8192 x Num_Index_Pages

    计算表的大小

    计算表的大小:

    表的总大小(字节) = Data_Space_Used + Clustered index size + Nonclustered index size + ...n

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcxc/archive/2006/06/25/833782.aspx

    估计表大小(三)--估计无聚集索引的表的大小

    估计无聚集索引的表的大小

    下列步骤可用于估计存储没有聚集索引的表上的数据和任何附加的非聚集索引所需的空间。

    计算存储数据所用的空间。

    计算存储每个附加非聚集索引所用的空间。

    汇总计算所得的值。

    对于每个计算,都要指定将在表中出现的行数。表中的行数将对表的大小有直接影响:

    表中的行数 = Num_Rows

    计算存储数据所用的空间

    若要计算存储数据所用的空间,请参见估计表的大小。

    记下计算所得的值:

    存储数据所用的空间 = Data_Space_Used

    计算存储每个附加非聚集索引所用的空间

    下列步骤可用于估计没有聚集索引的表上的单个非聚集索引的大小。

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

    索引键中的列数 = Num_Key_Cols

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

    索引键中的可变长度列数 = Num_Variable_Key_Cols

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

    如果索引中有固定长度列,那么索引行的一部分将为空位图保留。计算大小:

    索引空位图 (Index_Null_Bitmap) = 2 + (( Num_Key_Cols + 7) / 8 )

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

    如果索引中有可变长度列,请确定存储索引行中的这些列需使用的空间:

    可变长度列的总大小 (Variable_Key_Size) = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size

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

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

    计算索引行大小:

    索引行总大小 (Index_Row_Size) = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 + 8

    下一步,计算每页的索引行数(每页有 8096 个可用字节):

    每页的索引行数 (Index_Rows_Per_Page) = ( 8096 ) / (Index_Row_Size + 2)

    由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。

    根据为非聚集索引指定的填充因子,计算每叶级页保留的可用索引行数。有关更多信息,请参见填充因子。

    每叶级页的可用索引行数 (Free_Index_Rows_Per_Page) = 8096 x ((100 - Fill_Factor) / 100) /

    Index_Row_Size

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

    由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。

    下一步,计算存储索引的每一级别的所有索引行所需的页数:

    页数(第 0 级) (Num_Pages_Level_0) = Num_Rows / (Index_Rows_Per_Page - Free_Index_Rows_Per_Page)

    页数(第 1 级) (Num_Pages_Level_1) = Num_Pages_Level_0 / Index_Rows_Per_Page

    重复第二个计算,将从前面的第 n 级中计算的页数除以 Index_Rows_Per_Page,直到指定的第 n (Num_Pages_Level_n) 级页数等于 1(根页)。例如,若要计算第二个索引级别所需的页数:

    页数(第 2 级) (Num_Pages_Level_2) = Num_Pages_Level_1 / Index_Rows_Per_Page

    对于每一级别,预计的页数应向上舍入到最接近的整数。

    汇总存储各索引级别所需页数:

    总页数 (Num_Index_Pages) = Num_Pages_Level_0 + Num_Pages_Level_1 +Num_Pages_Level_2 + ...+ Num_Pages_Level_n

    计算聚集索引的大小(每页总共有 8192 个字节):

    非聚集索引大小(字节) = 8192 x Num_Index_Pages

    计算表的大小

    计算表的大小:

    表的总大小(字节)= Data_Space_Used +  Nonclustered index size + ...n

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcxc/archive/2006/06/25/833796.aspx

    --------------------

    --单表查询表的大小。

    EXEC sp_spaceused 'authors'

    /*

    name       rows reserved data index_size unused

    ---------- ---- -------- ---- ---------- -------

    authors    23   40 KB    8 KB 32 KB      0 KB

    */

    --查询一个库所有表占空间的大小情况

    use pubs --进入相应的数据库

    go

    --==========================================================

    declare @dbname varchar(40)

    declare @dbsize int

    declare @sql nvarchar(1000)

    declare @tablename varchar(40)

    --==========================================================

    --修改这里

    set @dbname='pubs' --设置想要查询的数据库名字

    --==========================================================

    --创建存放各数据表所占用空间的中间表

    if object_id('table_info') is not null drop table table_info

    create table table_info(

    Name nvarchar(40),

    Rows char(21),

    reserved varchar(28),

    Data varchar(28),

    index_size varchar(28),

    Unused varchar(28))

    --查看每一个用户表

    DECLARE cur_table CURSOR

    FOR SELECT name FROM sysobjects where xtype='U'

    OPEN cur_table

    FETCH NEXT FROM cur_table into @tablename

    SET NOCOUNT ON

    WHILE @@FETCH_STATUS = 0

    BEGIN

    insert table_info exec sp_spaceused @tablename

    FETCH NEXT FROM cur_table into @tablename

    END

    SET NOCOUNT OFF

    CLOSE cur_table

    DEALLOCATE cur_table

    --求出数据库的大小

    SET @sql=N'select @size=size from  '+@dbname+'..sysfiles where groupid=1'

    print @sql

    EXEC sp_executesql @sql, N' @size int OUTPUT', @dbsize output

    --@size的单位为8KB

    set @dbsize=@dbsize*8

    select 数据名=@dbname,

    数据库大小=convert(varchar(40), @dbsize)+' KB',

    用户表的数目=convert(varchar(10), count(1))+' 个',

    所有表的数据所占的空间=convert(varchar(100), sum(convert(int, replace(data, 'KB', ''))))+' KB'

    from table_info

    --输出表的信息

    select 表名=Name,表中记录数=Rows, 为该表分配的总量=reserved,

    表中数据所占的空间=data, 表中索引所占的空间=index_size

    from table_info order by data desc , rows desc

    --清除

    drop table table_info

    http://www.simple-talk.com/sql/database-administration/managing-data-growth-in-sql-server/看这段 Beware of default autogrowth and recovery测试比较了默认增长条件下和修改后的io。然后建议修改model database具体建议:Correctly size the files –if you know that the database you are managing can expect a 2 Gig growth per month, size the data file(s) at 4G initially, not the 3 MB size that will be the default from the Model database.Set correct auto grow properties – while 10% growth for data and log files may be sufficient for low utilization databases, typically I set at least 500 MB for the auto growth settings for the data and log files. Unless I expect there to be unusually high data growth, 500 MB represents a good average growth rate, and keeps space utilization at a manageable level but allows for growth over time without heavy I/O impact.Make sure only those databases that need FULL recovery are using it – you will determine this from the business and will be part of the SLA for the application and database. If point-in-time recovery is required, make sure you have regular log backups taken of the databases in Full recovery mode.Switch to bulk-logged mode for bulk insert operations – bulk loading is a common practice and, if done correctly, will incur minimal log growth, while reaping the performance benefits bulk loading brings. However, make sure you understand the consequences of changing the recovery models while bulk loading data. For instance, you will be unable to perform a point-in-time recovery for the bulk transactions.

    展开全文
  • zabbix从入门到精通至zabbix对数据库空间的要求 1.1 概述 影响zabbix数据库大小的数据表主要有4种...然而各个表的空间大小我们是可以估算的,并不会无线的增大,这和我们前期的规划有关。 每秒处理的数据量=i...
  • TimesTen与Oracle不同,由于TimesTen是内存数据库,基本...我们该如何估算并配置足够的存储空间来存储TimesTen日志呢? 1、首先创建脚本获取日志文件的平均生成时间: $ cat get_logtime.sh #!/bin/sh log_dir=
  • 原文:找到SQL Server数据库历史增长信息 很多时候,在我们规划SQL Server数据库空间,或向存储方面要空间时,都需要估算所需申请数据库空间的大小,估计未来最简单的办法就是看过去的趋势,这通常也是最合理的...
  • 这篇文章主要介绍了SQL Server中聚合历史备份信息对比数据库增长的方法,需要的朋友可以参考下 很多时 在我们规划SQL Server数据库空间或向存储方面要空间时都需要估算所需申请数据库空间的大小 估计未来最简单的...
  • 很多时候,在我们规划SQL Server数据库空间,或向存储方面要空间时,都需要估算所需申请数据库空间的大小,估计未来最简单的办法就是看过去的趋势,这通常也是最合理的方式。 通常来讲,一个运维良好的数据库都...
  • 8.3.1 空间数据库概念介绍 162 8.3.2 多媒体数据库概念介绍 163 8.4 演绎数据库介绍 164 8.4.1 演绎数据库概述 164 8.4.2 Prolog/Datalog表示法 165 8.4.3 Datalog表示法 166 8.4.4 子句...
  • 6.2.4 数据库对象的存储分配 175 6.2.5 增加表空间的大小 176 6.2.6 删除表空间 177 6.2.7 用户表空间的数目 178 6.2.8 表空间限额 178 6.2.9 主动的表空间空间预警 178 6.2.10 管理重做数据的生成 ...
  • 6.2 存储空间规划 3 6.3 冗余设计 3 6.4 索引设计 4 7 数据组织 4 7.1 数据分布方式 4 7.2 数据传输与通讯 4 7.3 历史数据管理 4 7.4 数据量估计 4 引言 编写目的 本文档是对xxx项目数据库模型的概要...
  • 5.3.3.2 临时表空间存储参数(Oracle9i/10g) 26 5.3.3.3 Undo/temp表空间估算 26 5.4 其他文件设计 26 5.4.1 参数文件 27 5.4.1.1 参数文件命名规则 27 5.4.2 控制文件 27 5.4.2.1 控制文件命名规则 28 5.4.3 ...
  • 目录: 设计、开发和维护一个性能好的数据库系统 1 1 设计部分 6 1.1 做好并发量和数据量的分析 6 1.2 各种数据类型的存储 6 1.3 表及索引的存储估算 6 1.4 表空间...
  • in bytes)...这里要注意一点,要给备份留足存储空间。 一般备份需要的空间是DB的2-3倍。 如果DB 是100G,那么给备份的空间最好是200G以上。根据dba_
  • 4.1 “表空间”物理存储参数 105 4.2 数据库系统实体创建SQL规程 105 4.3 数据库SQL规程 105 4.4 表空间SQL规程 105 4.4.1 永久表空间 ERMISDATA01 105 4.4.2 临时表空间 ERMISTEMP 105 4.4.3 索引表空间ERMISIDX ...
  • 存储引擎方面,为了提升大规模集群的稳定性和性能,TiDB 优化了 Raft 的流程,引入 Region Merge、Raft Learner 等新特性;优化热点调度机制,统计更多的信息,并根据这些信息做更合理的调度;优化 RocksDB 的性能...
  • 存储引擎方面,为了提升大规模集群的稳定性和性能,TiDB 优化了 Raft 的流程,引入 Region Merge、Raft Learner 等新特性;优化热点调度机制,统计更多的信息,并根据这些信息做更合理的调度;优化 RocksDB 的性能...
  • oracle 调优

    2012-02-03 17:12:49
    表及索引的存储容量估算是根据其记录长度及估算 的最大记录数确定的。数据库表如何分布,规划相应的表空间注意: 1. 把频繁访问的表 尽量放置到不同的表空间中 2. 把索引和表数据分开放置到不同的表空间中 3. ...
  • 又过了几天,晓红找到小张,告诉小张说他们正在开发的销售应用系统需要用大量磁盘空间存储 SQL 数据库。小张估算了当前的容量,发现无法满足晓红的要求。同时小张也知道公司没有预算来购买存储设备或新硬盘。 ...
  • 存储容量:这里介绍了如何估算表所占空间的大小。 存储的物理设计:SAN存储结构 数据的安全:Data Guard结构、RAC结构、Rman+归档。 锁和阻塞 外键的创建,会影响性能。当你需要修改或者删除主表
  • ORACLE技术考察点

    2018-05-12 23:16:23
    一般了解Oracle基础知识n 关系数据库基本概念n Oracle DB 体系结构Oracle数据库模型设计n 物理模型设计ên 数据库大小、存储、性能和安全...ên 数据表占用空间估算方法(存储结构简介)n OLAP与OLTP数据库...
  • 方案一根据K3系统并发用户数为20个估算 且服务器部署在现厂区 采用一台IBM X3500 M3 2路4核服务器 将中间层和数据库部署在同一台服务器 服务器硬盘配置Raid5阵列 实现数据的安全存储 硬盘容量配置为146GB 5 6 1 730...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

数据库存储空间估算