MySQL---优化&日志

目录

一、MySQL优化

3、mysql  server上的优化 

3.1、MySQL查询缓存

 3.2、索引和数据缓存

3.2、线程缓存

二、MySQL日志

2.1、redo log   重做日志

2.2、undo log 回滚日志

 2.3、错误日志

2.4、查询日志

2.5、二进制日志

2.5.1、基于binlog数据恢复实践操作

六、慢查询日志


一、MySQL优化

MySQL---优化&日志_第1张图片

1、SQL和索引的优化

2、应用上的优化

3、mysql  server上的优化 

3.1、MySQL查询缓存

MySQL 的查询缓存是把 select 查询语句上一次的查询结果记录下来放在缓存当中,下一次再查询相同内 容的时候,直接从缓存中取出
来就可以了,不用再进行一遍真正的SQL 查询。但是当两个 select查询中 间出现insert,updatedelete 语句的时候,查询缓存就会
清空 查询缓存适用更新不频繁的表 ,因 为当表更新频繁的话,查询缓存也总是被清空,过多的查询缓存的数据添加和删除,就会影
响MySQL的 执行效率,还不如每次都从磁盘上查来得快(缓存指的就是一块内存,内存I/O比磁盘 I/O 快很多)。 可以在MySQL 上通
过以下命令,来查看查询缓存的设置:

MySQL---优化&日志_第2张图片

 通过show status命令,可以查看MySQL查询缓存的使用状况,如下:

MySQL---优化&日志_第3张图片

 3.2、索引和数据缓存

主要指的就是 innodb_buffffer_pool_size 配置项,从名字上就能看到,该配置项是针对 InnoDB 存储引擎 起作用的,这个参数定InnoDB
存储引擎的表数据和索引数据的最大内存缓冲区大小。 innodb_buffffer_pool_size是同时为数据块和索引块做缓存,这个值设得越高,
访问表中数据需要的磁 盘 I/O 就越少

innodb_buffer_pool_size=512M

3.2、线程缓存

主要指配置文件中 thread_cache_size 配置项。给大家讲过 MySQL Server 网络模块采用经典的 I/O 复用
+ 线程池模型,之所以引入线程池,主要就是为了在业务执行的过程中,不会因为临时创建和销毁线
程,造成系统性能降低,因为线程的创建和销毁是很耗费性能的,所以线程池就是在业务使用之前,先
创建一组固定数量的线程,等待事件发生,当有 SQL 请求到达 MySQL Server 的时候,在线程池中取一
个线程来执行该 SQL 请求就可以了,执行完成后,不销毁线程,而是把线程再归还到线程池中,等待下
一次任务的处理( MySQL 会根据连接量,自动加大线程池的数量)。

thread_cache_size=10
配置完 thread_cache_size ,重启 MySQL Server 服务生效。

二、MySQL日志

2.1、redo log   重做日志

redo log :重做日志,用于记录事务操作的变化,确保事务的 持久性 redo log 是在事务开始后就开始
记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电), InnoDB 会使用
redo log 恢复到掉电前的时刻,保证数据的完整性。

MySQL---优化&日志_第4张图片

 MySQL执行的时候都有缓存的辅助,不可能直接和磁盘打交道的

innodb_log_buffffer_size 默认是 16M ,就是 redo log 缓冲区的大小,它随着事务开始,就开始写 redo
log ,如果事务比较大,为了 避免事务执行过程中花费过多磁盘IO 可以设置比较大的 redo log缓存,节省磁盘IO

MySQL---优化&日志_第5张图片

2.2、undo log 回滚日志

undo log :回滚日志,保存了事务发生之前的数据的一个版本,用于事务执行时的回滚操作,同时也是
实现多版本并发控制( MVCC )下读操作的关键技术。
DB_TRX_ID: 事务 ID                      DB_ROLL_PTR: 回滚指针

MySQL---优化&日志_第6张图片

 2.3、错误日志

错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程
中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日
志。
mysqld 使用错误日志名 host_name.err(host_name 为主机名 ) 并默认在参数 DATADIR( 数据目录 ) 指定
的目录中写入日志文件。

2.4、查询日志

查询日志记录了客户端的所有语句。由于上线项目 sql 特别多,开启查询日志 IO 太多导致 MySQL 效率
低,只有在调试时才开启,比如通过查看 sql 发现热点数据进行缓存。

mysql> show global variables like "%genera%";

2.5、二进制日志

二进制日志 (BINLOG) 记录了所有的 DDL( 数据定义语言 ) 语句和 DML( 数据操纵语言 ) 语句,但是不包括
数据查询语句。语句以 事件 的形式保存,它描述了数据的更改过程。 此日志对于灾难时的数据恢复起
着极其重要的作用。
两个重要的应用场景:主从复制、数据恢复
查看 binlog mysql> show binary logs;
通过 mysqlbinlog 工具( mysql 原生自带的工具)可以快速解析大量的 binlog 日志文件,如:
shell> mysqlbinlog --no-defaults --database=school --base64-output=decode-rows
-v --start-datetime='2021-05-01 00:00:00' --stop-datetime='2021-05-10 00:00:00'
mysql-bin.000001 | more

2.5.1、基于binlog数据恢复实践操作

MySQL---优化&日志_第7张图片

六、慢查询日志

MySQL 可以设置慢查询日志,当 SQL 执行的时间超过我们设定的时间,那么这些 SQL 就会被记录在慢查
询日志当中,然后我们通过查看日志,用 explain 分析这些 SQL 的执行计划,来判定为什么效率低下,是
没有使用到索引?还是索引本身创建的有问题?或者是索引使用到了,但是由于表的数据量太大,花费
的时间就是很长,那么此时我们可以把表分成 n 个小表,比如订单表按年份分成多个小表等。
慢查询日志相关的参数如下所示:

你可能感兴趣的:(mysql,数据库,java)