mysql之抖动

藏宝库编辑 7 天前 3684 0 来自 中国
flush: 就是把内存里的数据写入磁盘的过程。
脏页:当内存数据页跟磁盘数据页内容不同等的时候。
干净页:内存数据写入到磁盘后,内存和磁盘上的数据页的内容同等的时候。
脏页和干净页都是在内存中。
1、数据库的flush场景


  • 对应的redo log日志满了,体系会停止所有更新操纵,把checkpoint往前推进,redo log日志留出空间继承写。
  • 对应的体系内存不敷,当必要新的内存页,而内存不够用的时候,就要淘汰一些数据页,空出内存给别的数据页使用。假如淘汰的是脏页,就要先将脏页写到磁盘。InnoDB用缓冲池(buffer pool)管理内存,缓冲池中的内存页有3种状态:
    1、还没有使用的
    2、使用了而且是干净页
    3、使用了而且是脏页
  • mysql体系空闲的时候,刷一点脏页。
  • mysql正常关闭的时候,mysql会把内存的脏页都flush到磁盘上。
2、InnoDB刷脏页的控制计谋

innodb_io_capacity <75%进行参数设置,可以设置InnoDB刷脏页的控制计谋。
根据上述算得的 F1(M) 和 F2(N) 两个值,取此中较大的值记为 R,之后引擎就可以按照 innodb_io_capacity 定义的本领乘以 R% 来控制刷脏页的速率。
脏页比例:Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total
mysql> select VARIABLE_VALUE into @a from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty'; select VARIABLE_VALUE into @b from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_total'; select @a/@b;
InnoDB刷脏页速率计谋:

1.png 测试磁盘随机读写的下令:fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest
redo log状态图:

2.png
更新和flush过程:

您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 14:21, Processed in 0.155555 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表