zoukankan      html  css  js  c++  java
  • mysql优化几个步骤笔记

    转 孤独烟 打杂的ZRJ     https://mp.weixin.qq.com/s/FG5KfyBfhonwrk7-ZOiEiQ

    步骤一:建立索引与优化sql语句

        首先用慢查询日志定位执行较慢的sql语句

        利用explain分子语句

        建立索引优化或优化sql语句

    步骤二:搭建缓存(缓存过期时间保证最终一致性,但并不保证绝对一致性,根据cap原则,高可用与高一致性)

        数据库和缓存双写一致性问题:

          先删除缓存,再更新数据库:

              线程一删除缓存,线程二读取缓存不存在去数据库读取,再设置缓存,线程一更新数据库,缓存与数据库不一致,脏数据,

              解决方案,删除与更新数据库操作后,线程一休眠一秒,然后再删除缓存,把这一秒的脏数据删除(双删策略)

              若是采用主从同步读写分离:也采用双删延时策略,加上主从同步时间

              该策略不好的地方:若是第二次删除失败怎么办,后面读到的都是脏数据

          先更新数据库,再删除缓存:

              也会发生高并发下的脏数据问题,但概率较低:缓存刚好失效,线程一更新数据库,线程二查询缓存失效查询数据库得到旧值,

              线程一删除缓存,线层二更新缓存,得到脏数据,但是线程二更新缓存会发生在线程一删除缓存之前,因为更新数据库操作慢于查询操作

        缓存击穿,缓存穿透,缓存雪崩:高并发绕过缓存将查询全部怼在数据库上

    步骤三:读写分离(主从复制读写分离)(引用层解决或者上mycat)

        主从架构问题:

          主从好处:实现备份,负载均衡

          主从实现:主库开log dump线程将binllog发送给从库,从库开io线程将binlog写入relay log,再开sql线程执行relaylog里面的sql语句

          主从架构的若已执行问题,要提高一致性还是用缓存吧

    步骤四:分区(这浑水我不趟)

    步骤五:利用mycat实现分表知道的不多(能不分表就不分表,减少join语句)

  • 相关阅读:
    Java学习:面向对象三大特征:封装、继承、多态之封装性
    Java学习:构造方法
    Java学习:集合双列Map
    斗地主综合案例:有序版本(双列)
    JDK9对集合添加的优化
    Java学习:Debug调试程序
    计算一个字符串中每一个字符出现的次数
    Java学习:Map接口
    Java学习:可变参数
    Pediy CTF 2018 reverse
  • 原文地址:https://www.cnblogs.com/ali-guili/p/9936025.html
Copyright © 2011-2022 走看看