打造扛得住的Mysql架构(慢更)

打造扛得住的Mysql架构

导航:

  • 打造扛得住的Mysql架构
    • 一. 影响数据库性能的原因
      • 1.1 影响数据库的因素
      • 1.2 影响MYSQL性能的因素有哪些?
      • 1.3 事务
    • 二. 什么影响了MYSQL性能
      • 2.1 影响性能的几个方面
      • 2.2 CPU资源和可用内存大小

一. 影响数据库性能的原因

1.1 影响数据库的因素

  1. SQL查询速度
  2. 服务器硬件
  3. 网卡流量
  4. 磁盘IO

1.2 影响MYSQL性能的因素有哪些?

  1. 超高的QPS和TPS
    • 风险:效率低下的SQL(每运行一次SQL只能使用一个CPU,所以单个SQL效率低下影响CPU执行效率)

    QPS:每秒中的查询量。 80%的事故都是因为慢查询造成的

  2. 大量的并发和超高的CPU使用率
    • 大量的并发:
      • 数据库连接数被占满(max_connections默认100)
    • 超高的CPU使用率:
      • 因CPU资源耗尽出现宕机
  3. 磁盘IO
    1. 磁盘IO性能突然下降(使用更快的磁盘设备)
    2. 其他大量消耗磁盘性能的计划任务(调整计划任务,做好磁盘维护)
  4. 网卡流量:
    1. 网卡IO被占满
      1. 如何避免无法连接数据库的情况:
        1. 减少从服务器的数量
        2. 进行分集缓存
        3. 避免使用 select * 进行查询
        4. 分离业务网络和服务器网络
  5. 大表
    1. 什么样的表可以称之为大表
      1. 记录行数巨大,单表超过千万行
      2. 表数据文件巨大,表数据文件超过10G

      大表对查询的影响: 慢查询->很难在一定时间内过滤出所需要的数据

    2. 大表对DDL操作的影响:
      1. 建立索引需要很长时间
        1. MYSQL版本<5.5建立索引会锁表
        2. MYSQL版本>=5.5 虽然不会锁表但会引起主从延迟
        3. 修改表结构需要长时间锁表
          1. 会造成长时间的主从延迟
          2. 影响正常的数据操作
      2. 如何处理数据库中的大表:
        1. 分库分表:
          1. 把一张大表分成多个小表

          难点: 分表主键的选择 分表后跨分区数据的查询和统计

        2. 大表的历史数据归档
          1. 减少对前后端业务的影响

          归档时间点的选择
          如何进行归档操作

1.3 事务

  1. 什么是事务?
    • 事务是数据库系统区别于其他一切文件系统的重要特性之一。
    • 事务是一组具有原子性的SQL语句,或是一个独立的工作单元。
  2. 事务符合哪些特性?
    1. 事务的原子性

      • 定义:一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作;
    2. 事务的一致性

      • 定义:一致性是指事务将从数据库从一种一致性状态转换到另外一种一致性住哪个台,在事务开始之前和事务结束后数据库中数据的完整性没有被破坏;
    3. 事务的隔离性:

      • 定义:隔离性要求一个事务对数据库中数据的修改,在未提交完成前对于其他事务是不可见的。
      • SQL标准中定义的四种隔离级别:
        • 未提交读(READ UNCOMMITED)
        • 已提交度(READ COMMITED)
        • 可重复读(REPEATABLE READ)
        • 可串行化(SERIALIZABLE)

        并发性由高到低,隔离性能由低到高

    4. 事务的持久性:

      • 定义: 一旦事务提交,则其所作的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失。
  3. 什么是大事务?
    1. 定义:运行时间比较长,操作的数据比较多的事务;
    2. 风险:
      1. 锁定太多的数据,造成大量的阻塞和锁超时;
      2. 回滚时所需时间比较长
      3. 执行时间长,容易造成主从延迟
    3. 如何处理大事务:
      1. 避免一次处理太多数据
      2. 移除不必要在事务中的SELECT(让事务中只有写入或者修改操作,select可以不用在事务中完成

二. 什么影响了MYSQL性能

2.1 影响性能的几个方面

  1. 服务器硬件
  2. 服务器系统
  3. 数据库存储引擎的选择
    1. MyISAM:不支持事务,表级锁;
    2. InnoDB:事务级存储引擎,完美支持行级锁,事务ACID特性;
  4. 数据库参数配置
  5. 数据库结构设计和SQL语句

2.2 CPU资源和可用内存大小

  1. 如何选择CPU?

    1. 买单核性能更好的CPU。 因为MYSQL不支持多CPU对同一SQL并发处理,所以我们买多核对其帮助不大,更应该考虑单CPU性能更高的CPU
    2. 要考虑MYSQL版本。因为新版本对多核的支持更加好。要根据自己的版本进行选择
    3. 选择64位的CPU。因为MYSQL单线程的,使用32位对其有极大的限制。所以用64位更好。
  2. 如何选择内存?

    1. 要选择主板支持的最大内存频率;(频率越高,速度越快)
    2. 购买要点:
      1. 组成购买升级
      2. 每个通道的内存:相同品牌、颗粒
      3. 频率、电压、校验技术和型号
      4. 单条容量要尽可能大
    3. 根据数据库大小选择内存;
  3. 磁盘的配置和选择:

    1. 常见的磁盘种类:
      1. 传统机器磁盘
      2. 使用RAID增强传统机器硬盘的性能
      3. 使用固态存储SSD和PCIe卡
      4. 使用网络存储NAS和SAN
    2. 传统机器硬盘:
      1. 特点:最常见,使用最多,价格低,存储空间大,读、写较慢;
      2. 传统磁盘读取过程:
        1. 移动磁头到磁盘表面上的正确位置;
        2. 等待磁盘旋转,使的所需的数据在磁头之下;
        3. 等待磁盘旋转过去,所有所需的数据都被磁头读出;
      3. 如何选择传统机器硬盘
        1. 存储容量
        2. 传输速度
        3. 访问时间
        4. 主轴转速
        5. 物理尺寸(越大,存储空间越大)

你可能感兴趣的:(打造扛得住的Mysql架构,MYSQL,mysql入门到精通,mysql教程,mysql架构,数据库)