zoukankan      html  css  js  c++  java
  • MySQL数据库服务器整体规划(go)

     我们在搭建MySQL数据库服务器的开始阶段就合理的规划,可以避免以后的很多问题的产生,大大节省我们的时间和精力,在一定幅度上降低成本。当然,这会涉及很多方面。比如机器的选型、业务评估和系统规划等。

           所有的设计都是跟具体的需求相关的,我们首先要做的就是对业务进行整体评估。我在下面分享一个具体的例子。

    一、业务需求

    要求 指标
    响应时间 查询和操作请求ms级别返回
    数据总量 1年内大约有500GB的数据量
    每秒请求量 每秒有3W次请求
    读写比 读写比是11
    重要程度 核心业务,P1级别故障
    其他说明 数据具有时效性,历史数据访问较少,一般处理最近7天内的数据,数据总体长度约为1K

    二、业务评估

     step1:1年的数据量大约是500GB

    结果:每秒产生的数据量为500*1024*1024/(365*24*60*60)=17KB

     step2:每秒3W次请求;读写比是1:1

    结果:每秒的读请求是15000次;每秒的写请求是15000次。

     step3:记录的长度大约为1KB

    结果:根据step1得出的结果,每秒insert的数据写入大约为17KB;根据step2得出的结果,每秒写入的请求为15000次,可知14083次为update和delete操作。由于mysql写入操作按照页来处理,页大小为16KB,假设每次操作的页都不相同,那么每秒写操作的数量为16KB*15000=234MB。每秒读操作的数量为16KB*15000=234MB

    step4:处理最近7天的数据

    结果:热数据量为:(500/365)*7=21GB

    step5:操作ms级别返回

       结果:操作ms级别返回,并且读写基本平衡。需要尽可能多的将数据加载到内存。按照内存命中率接近100%计算的话,那么innodb_buffer大约需要21GB,而其它的内存大约需要1~2GB,因此内存超配大约为32GB。按照超配原则,写带宽(wBPS)限制为250MB/s。读带宽(rBPS)限制为250MB/s
       

       三、硬盘选择(HDD vs SSD)

          HDD类型的硬盘更善于处理一些顺序读写的内容,而SSD硬盘不管是顺序还是随机的性能都有远远优于HDD的硬盘,但是SSD的硬盘价格比较昂贵。因此,我们可以通过合理的分配,降低整体拥有的成本。

             例如,对于一些日志文件,这些日志文件主要是顺序IO,我们可以把这些文件放到HDD上,可以考虑使用RAID5级别,提高日志系统的容错能力。对于数据文件,我们可以考虑放到SSD上,使用RAID10提高容错能力。

        

       四、机型测试

             性能对比测试:对不同硬件设备在压力测试下数据库表现性能指标。对于硬件性能做出整体的评估。

             稳定性测试:没有抖动现象,可以持续稳定的提供服务。

             掉电保护测试:这个环节挺麻烦,需要系统工程师的支持。

             内存异常测试:测试内存是否容易出现问题,能否对业务提供稳定支持。

             此外还有IO设备和坏盘重构。

             经过一系列的测试,我们可以选出2~3种候选机型,我们应当尽量避免应用和设备绑定,防止单个机型缺货,供应不足影响业务。

     

       五、成本评估

             通过前面的一系列的准备工作,我们可以选出候选的机型,考虑我们的使用成本。这包括:

                 设备成本

                 运维成本

                 功耗成本

             特别注意:我们虽然有的时候单机使用成本虽然会上升,但是整体的使用成本却下降了。这是因为我们提升了单个机器的性能,可以减少机器的数目。降低运维和功耗的成本,甚至也降低了整体设备的成本。

       

       六、文件系统规划

                 MySQL数据库的特点:

                       ——单数据目录(单个实例不能指定多个数据库)

                       ——混合读写(日志和数据的读写方式是不一样的)

                       ——请求随机

             文件系统划分:

         /dev/sda1                /boot

                       /dev/sda2                /

                       /dev/sda3                /home

                       /dev/sda4                /tmp

                       /dev/sdb1               /data

                       /dev/sdc1                /log

             根据使用经验,建议IO调度策略为deadline的方式:

             #echo      deadline  >    /sys/block/sd{b,c}/queue/scheduler

             MySQL数据库日志文件是顺序读写的,建议放在普通的SSD硬盘。

                       ——binlog日志文件、error日志文件、slow日志文件可以存放在/log日志目录中

                       ——tmp文件指定为系统的目录/tmp

                       ——其他所有目录指定为数据目录/data

             注意:虽然日志文件是随机读写的,但是由于把几个日志文件都放到一个分区,还是可能产生随机化读写的现象。

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/7337829.html
Copyright © 2011-2022 走看看