mysql查看io线程与sql线程_MySQL IO线程及相关参数调优

本文详细介绍了MySQL SQL执行的过程,包括DQL和DML操作,强调了物理读、日志写入和磁盘排序对性能的影响。通过监控`Innodb_buffer_pool_reads`、`Innodb_data_reads`等状态变量评估物理读性能,并通过`Innodb_log_writes`、`Innodb_os_log_written`监控日志写入。文章还解析了MySQL的IO线程工作原理,包括读写线程、日志线程,并提供了调整线程数量的方法和监控指标。
摘要由CSDN通过智能技术生成

一、关于一个SQL的简单的工作过程

1、工作前提描述

1、启动MySQL,在内存中分配一个大空间innodb_buffer_pool(还有log_buffer)

2、多用户线程连接MySQL,从内存分配用户工作空间(其中排序空间)

3、磁盘上有数据库文件、ib_logfile、tmp目录、undo

2、SQL的简易流程

1、DQL操作

1、首先进行内存读

2、如果buffer pool中没有所需数据,就进行物理读

3、物理读数据读入buffer pool,再返回给用户工作空间

2、DML操作(例update)

1、内存读,然后进行物理读,读取所需修改的数据行

2、从磁盘调入undo页到buffer pool中

3、修改前的数据存入undo页里,产生redo

4、修改数据行(buffer pool中数据页成脏页),产生redo

5、生成的redo先是存于用户工作空间,择机拷入log_buffer中

6、log线程不断的将log_buffer中的记录写入redo logfile中

7、修改完所有数据行,提交事务,刻意再触发一下log线程

8、待log_buffer中的相关信息都写完,响应事务提交成功

至此,日志写入磁盘,内存脏块还在buffer pool中(后台周期写入磁盘,释放buffer pool空间)。

二、影响SQL执行性能的因素,及具体看方式

1、大量物理读

mysql>show global status like 'i%read%';

| Innodb_buffer_pool_reads | 647 |

| Innodb_data_read | 48402944 |

| Innodb_data_reads | 2996 |

| Innodb_pages_read | 2949 |

| Innodb_rows_read | 1002172 |

1、Innodb_buffer_pool_reads:物理读次数

2、Innodb_data_read:物理读数据字节量

3、Innodb_data_reads:物理读IO请求次数

4、Innodb_pages_read:物理读数据页数

5、Innodb_rows_read:物理读数据行数

2、Log写性能

mysql> show engine innodb status \G

---

LOG

---

Log sequence number 144064129  //已经生成的日志量(累计值)/单位:字节

Log flushed up to 144064129  //已经写入的日志量(累计值)

Pages flushed up to 144064129  //已经

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值