zoukankan      html  css  js  c++  java
  • 数据库容量和内存测算的一些想法

     数据库容量和内存测算的一些想法

    参考于:http://blog.itpub.net/12679300/viewspace-1443818/

    参考于:http://blog.sina.com.cn/s/blog_1533f3fb90102wktx.html

    一、数据库容量估算

    总体来说数据库容量核心分析对象还是数据库表,以及围绕数据库表的视图、索引、日志等相关附属信息。汇总这些信息后,再加上3--5年业务增长量给出数据库容量的评估。
    1、单表单行数据库容量分析:
    分析单表单行数据容量,就要分析各种数据库和各种数据类型占用字节的情况,比如Oracle数据库:
    char类型多长就多少字节,Number类型最多按22个字节计算,平均按10个字节计算足够,varchar类型按长度2/3计算,date型占有7个字节。
    按如上假设,如果一个客户表,有30个varchar(100),则一条客户记录是2k,10万客户信息则将近200M,每年30%的增长,则每年增加空间约60M。
     
    2、索引空间评估:
    一张表的索引空间一般是表空间的1/3,可以按照1/2表空间评估该表的索引存储空间。
     
    3、数据库缓存容量:
    数据库缓存(内存空间)一般为数据库空间的5%时性能较好。
     
    4、内存容量空间需求分析:
    首先根据数据库容量算出所需的数据库缓存大小,再估计出操作系统、系统软件等所需内存,合计即是所需的内存容量。
     
    5、机器系能:一般机器CPU达到70%系能较好,超出为过渡饱和,有系能隐患,低于的话,机器资源没有达到合理利用。
     
    除此之外,分析数据库空间还有表日志空间、rollback空间、redo空间、临时空间等。

     

    6、另外一种计算的方法

    当系统运行一段时间之后(比如三个月),这时候已经很清楚当前的数据总量和占用的总空间大小,通过对未来的业务估算可以很容易的计算出未来1年、3年的整体数据库容量大小;

    比如一个系统上线3个月后,数据库的大小达到了300GB,如果这三个月的业务属于正常范围,那么很容易计算出每个月差不多增长100个Gb,但是行业之间总是有差异的,比我鞋服行业就有分春夏和秋冬的区别,一件衣服夏天的和冬天的主数据量是不一样的,按这种方式会有比较大的误差,但是数据量级别应该是正确的,对于这种系统运行完一年之后进行容量的评估将会比较正确;

     

    这种方法计算容量有一个很明显的弊端:需要在系统运行一段时间之后才能计算出来,但是这个时候相应的硬件和存储都已经采购完毕了,只能在一段时间之后进行扩容。

     

    7、参考同行业同系统之间的数据容量

    这是一个最便捷的办法,在上SAP之前公司内部最大的系统数据也才500GB左右,所以在脑子里面对数据容量的大小也是一直停留在百GB的水平,刚好同行业中的其他公司也上了SAP,经过了解他们上SAP的模块和我们差不多,运行一段时间之后数据量已经达到了TB的水平了,每天数据的增长量是GB级别,这样一下子对整个系统的数据量级别有了个很明显的认识。在采购硬件的时候就不会有太大的偏差。

     

    二、内存需求的计算

    涉及到内存的缓存命中率的关系,数据库系统的内存的分配跟数据库总容量大小有很大的关系,行业的经验是当缓存容量达到数据库总容量的5%时性能较好,因此确定了数据库的大小之后缓存的大小也就可以的出来了。

    例如在aix平台下面一个1TB的数据库

    1、操作系统本身所占用的内存 128MB

    2、应用程序所占的内存   256MB

    3、数据库缓存 50GB

    4、合理的内存利用率75%

    总计 67GB

    考虑到数据的保存时间5年(一般3到5年要做一个数据结转),因此数据库最大容量有可能达到5TB,所以该主机的内存达到300GB可以满足未来5年的业务需求。

     

    总结:站得高尿得远,dba主动去考虑一下整体的it架构需求,当这种思考点多了站的高度也就高了。因为整个IT架构里面dba属于一个很重要的岗位,性能的规划、存储容量的规划只有dba最清楚,当dba不参与的时候,就变成了“猜”,根据系统的重要性去采买硬件、几个cpu、多少内存、多少存储,这些都是凭着系统的重要性和领导的重视程度、预算的多少,供应商当然也会提供相应的参考方案,但是他们提的方案肯定是越高越好的。

    附:基本类型长度

    (1)数值类型

    类型大小范围(有符号)范围(无符号)用途
    TINYINT 1 字节 (-128,127) (0,255) 小整数值
    SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
    MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
    INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
    BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
    FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
    浮点数值
    DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
    浮点数值
    DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

    (2)日期和时间类型

    类型大小
    (字节)
    范围格式用途
    DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
    TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
    YEAR 1 1901/2155 YYYY 年份值
    DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
    TIMESTAMP 4

    1970-01-01 00:00:00/2038

    结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

    YYYYMMDD HHMMSS 混合日期和时间值,时间戳

    (3)字符串类型

    类型大小用途
    CHAR 0-255字节 定长字符串
    VARCHAR 0-65535 字节 变长字符串
    TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
    TINYTEXT 0-255字节 短文本字符串
    BLOB 0-65 535字节 二进制形式的长文本数据
    TEXT 0-65 535字节 长文本数据
    MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
    MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
    LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
    LONGTEXT 0-4 294 967 295字节 极大文本数据
  • 相关阅读:
    制作A4纸打印的网页像素大小设置(转)
    关于Vue.use()详解
    Vue的axios如何全局注册
    JS中的apply,call,bind深入理解
    JS异步编程 (2)
    JS异步编程 (1)
    彻底搞清楚javascript中的require、import和export(js模块加载规范的前世今生)
    IPv6地址分类及表示方法
    SublimeText3追踪函数工具CTags设置及使用
    转-编写CGI小结
  • 原文地址:https://www.cnblogs.com/carsonwuu/p/9645054.html
Copyright © 2011-2022 走看看