MySQL(四)数据库优化

优化从何入手?
如何进行性能调优?使得查询更快

调优步骤

观察服务状态,是否有不规则的延迟和卡顿,可以开启慢查询,explain执行计划,sql执行时间长短,优化sql。或者修改表结构。如果还是不行,就读写分离,分库分表。

查看系统参数
从下面每一个环节入手
在这里插入图片描述
客户端连接服务端,可以调整服务端最大连接参数。
客户端可以重复使用连接。mybatis自带连接,阿里的druid(默认8个,和机器是几核有关,为什么连接池越大不好,因为减少cpu切换),c3p0,从连接池获取

配置的优化
在这里插入图片描述
修改配置一般有专业的dba进行,不是开发人员关注的重点哦!!!

缓存服务,redis,架构层面,数据库集群方案,读写分离()

主从复制,如何实现?会有一个server层的binlog日志,进行数据主从复制
主从复制出现的延时时候到底是出现在哪里?
读写分离,如果主服务器写入,但是没有马上复制到从,
mysql默认是异步复制,
使用全同步,所有节点都同步,但是事务执行时间变长,
所以我们使用半同步复制,如果使用半同步复制,我们需要安装一个插件
在这里插入图片描述
主节点安装插件,从节点也需安装
在这里插入图片描述
在这里插入图片描述

GTID复制

事务分组编号到从服务上执行(解决中从复制延时问题)
大事务分解成小事务进行多次提交,解决延迟问题
在这里插入图片描述
如果单表数据大,单表压力大,性能差。我们可以进行分表操作(分库分表)

如果master宕机,挂了?
在这里插入图片描述
sql语句的执行情况记录,慢日志开启,需要开启慢日志,查看慢日志是否开启
在这里插入图片描述
在这里插入图片描述
那么一个sql语句执行时间多长我们才说他是慢日志呢?通过参数配置时间
在这里插入图片描述
long_query_time参数进行配置,超过这个时间,就是慢sql
sql语句慢是慢在哪里,通过explain进行查看

慢查询默认没有开启,调优时候打开就行。
sql超过时间就会进入慢查询日志。记录慢查询sql,定位到具体的查询语句,然后用explain,看执行计划。

删除log文件后mysqladmin -uroot -拍flush-logs slow重新生成日志

慢查询日志分析工具mysqldumpslow

查看sql执行成本,SHOW PROFILE

默认关闭,可以开启,show variables like 'profiling’查看状态,set profiling = ‘ON’ 开启

show profiles ; show profile

explain的使用

查看执行计划,没有真正执行语句,只是看下它的执行计划。
在这里插入图片描述
内连接,外连接
小表驱动大表

驱动表,被驱动表
内连接,查询优化器可以决定谁作为驱动表,谁作为被驱动表。都没有索引,小表作为驱动表
一个表有索引,有的作为被驱动表
先查询的表就是驱动表,优化器决定先查哪张表

索引嵌套循环连接,所以小表驱动大表,所以被驱动表上必须有索引,这样就先去找索引了,极大减少对内层匹配次数。被驱动表是主键索引,用不着回表了。索引主键索引最好

驱动表数据放到buffer,批量和非驱动表区匹配
8.0对算法进行优化,改成hash join

子查询执行效率不高,msql为内层查询语句的结果建立一个临时表,外层语句从临时表中查询记录,查询完后,再撤销临时表,这样会消耗过多的cpu和io资源,产生大量的慢查询
临时表不会存在索引,所以我们使用join代替子查询

索引下推是在存储引擎层使用索引过滤数据的优化方式
之前没有索引下推,第一个条件查询后不走索引了,现在第一个条件查询后,第二个条件还会过滤,而不是直接回表操作,这样减少回表
作用就是回表之前过滤数据,可以关闭开启

select count(1) count(*)

磁盘中真正存在的ib_logfile0,ib_logfile1,这两个就是redolog日志保存的文件,恢复数据从这两个文件去恢复。

undo更新数据之前记录数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值