mysql io thread_MySQL IO线程及相关参数调优

一、关于一个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、大量物理读

copycode.gifmysql> 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  |

copycode.gif

1、Innodb_buffer_pool_reads:物理读次数

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

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

4、Innodb_pages_read:物理读数据页数

5、Innodb_rows_read:物理读数据行数

2、Log写性能

copycode.gifmysql> show engine innodb status \G---LOG---Log sequence number 144064129  //已经生成的日志量(累计值)/单位:字节Log flushed up to   144064129  //已经写入的日志量(累计值)Pages flushed up to 144064129  //已经写入的脏页量(累计值)Last checkpoint

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值