美文网首页
数据库优化

数据库优化

作者: 摸摸脸上的胡渣 | 来源:发表于2020-02-11 14:56 被阅读0次

    优化整体可以分为两方面,软件方面和硬件方面。

    硬件方面

    成本过高,但收益也较高。

    软件方面

    后台程序员一般涉及到的是软件方面,成本较低且收益比较大。

    其中软件方面的优化也可以分为两方面,上线前check和上线后check

    上线前check

    1.创建表时,要考虑表的常用字段,一般要为常用字段增加索引,但也不能全加,索引的创建和维护更新,也是耗费资源的。
    2.写sql语句时,要注意尽量用到索引字段,可使用Explain命令对sql进行检查。主要是对type字段进行查看,一般用到的是type是const(应用主键或者唯一索引进行等值查询),ref(应用join或者联合索引),range(应用主键或者唯一索引进行范围查询)。
    3.还应注意写sql语句时,避免因为使用函数,对列进行运算,模糊查询,错误使用联合索引等造成的索引失效情况。

    上线中check

    发布后,会观察后台服务器的错误日志,并且观察数据库集群的写tps和读tps,并且也会观察主从延迟等指标

    上线后check

    1. 慢查询日志
      一般公司使用的是pt-query-digest工具进行异常查询的统计,涉及的字段相关含义及其应注意点,已经总结成图。


      pt-query-digest.png

      我遇到的慢查询一般通过加索引解决,但是注意不要在业务高峰期进行操作,会对表的性能有影响。DBA在改表结构时,使用的是pt-online-schema-change工具,原理如下


      pt-online-schema-change.png
    2. 死锁查询
      MySQL通过开启innodb_deadlock_detect开关,可以进行死锁检测,每当有事务被锁时,就会开始检测进行检测是否出现了循环依赖,如果有的话,就会将持有数据行数最少的事务进行回滚。
      todo 死锁的具体案例和解决

    相关文章

      网友评论

          本文标题:数据库优化

          本文链接:https://www.haomeiwen.com/subject/gceqxhtx.html