深入解析MySQL检查点课件.ppt

上传人:牧羊曲112 文档编号:3388827 上传时间:2023-03-12 格式:PPT 页数:67 大小:2.67MB
返回 下载 相关 举报
深入解析MySQL检查点课件.ppt_第1页
第1页 / 共67页
深入解析MySQL检查点课件.ppt_第2页
第2页 / 共67页
深入解析MySQL检查点课件.ppt_第3页
第3页 / 共67页
深入解析MySQL检查点课件.ppt_第4页
第4页 / 共67页
深入解析MySQL检查点课件.ppt_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《深入解析MySQL检查点课件.ppt》由会员分享,可在线阅读,更多相关《深入解析MySQL检查点课件.ppt(67页珍藏版)》请在三一办公上搜索。

1、summarry,Mysql log fileMysql 检查点Mysql doublewrite,基本操作,基本操作,基本操作,基本操作,基本操作,基本操作,基本操作,基本操作,.,为什么要采取异步刷新,Why?,为什么要采取异步刷新,1 This is an optimization 2 It call it write combining,关于log工作原理,http:/,innodb_flush_log_at_trx_commit,Log buffer设置建议,mysqladmin var|grep log_bufferinnodb_log_buffer_size|8388608通常设

2、置范围816M通常8M 比较合适,除非有很多blob/text字段操作,或大事务操作。,Log buffer设置,show global status like%Innodb_log_waits%;+-+-+|Variable_name|Value|+-+-+|Innodb_log_waits|0|+-+-+Innodb_log_waits The number of times that the log buffer was too small and a wait was required for it to be flushed before continuing.,innodb_log

3、_file_size,关于innodb_log_file_size大小设置如何找到最佳的均衡点呢?http:/,innodb_log_file_size,innodb_log_file_size设置,大概7M每分钟,那么一个小时是多少呢,7*60=420M,所以单个logfile大小256M大小足够。2008 By Baron Schwartzhttp:/,innodb_log_file_size设置,修改innodb_log_file_size,1 干净的关闭数据库,删除日志文件,修改f 中innodb_log_file_size,重启mysql 2 干净的关闭数据库,rename日志文件,

4、修改f 中innodb_log_file_size,重启mysql,Log写入LSN实际上对应日志文件的偏移量,新的LSN旧的LSN+写入的日志大小。举例如下:LSN1G,日志文件大小总共为600M,本次写入512字节,则实际写入操作为:l 求出偏移量:由于LSN数值远大于日志文件大小,因此通过取余方式,得到偏移量为400M;写入日志:找到偏移400M的位置,写入512字节日志内容,下一个事务的LSN就是1000000512;,Innodb日志机制深入分析,Innodb日志机制深入分析,Checkpoint写入,Innodb实现了Fuzzy Checkpoint的机制,每次取到最老的脏页,然后

5、确保此脏页对应的LSN之前的LSN都已经写入日志文件,再将此脏页的LSN作为Checkpoint点记录到日志文件,意思就是“此LSN之前的LSN对应的日志和数据都已经写入磁盘文件”。恢复数据文件的时候,Innodb扫描日志文件,当发现LSN小于Checkpoint对应的LSN,就认为恢复已经完成。Checkpoint写入的位置在日志文件开头固定的偏移量处,即每次写Checkpoint都覆盖之前的Checkpoint信息。,Innodb日志机制深入分析,管理机制,Checkpoint和日志紧密相关,将日志和Checkpoint一起说明,详细的实现机制如下:,Innodb日志机制深入分析,如上图所

6、示,Innodb的一条事务日志共经历4个阶段:创建阶段:事务创建一条日志;日志刷盘:日志写入到磁盘上的日志文件;数据刷盘:日志对应的脏页数据写入到磁盘上的数据文件;写CKP:日志被当作Checkpoint写入日志文件;,Innodb日志机制深入分析,对应这4个阶段,系统记录了4个日志相关的信息,用于其它各种处理使用:Log sequence number(LSN1):当前系统LSN最大值,新的事务日志LSN将在此基础上生成(LSN1+新日志的大小);Log flushed up to(LSN2):当前已经写入日志文件的LSN;Oldest modified data log(LSN3):当前最

7、旧的脏页数据对应的LSN,写Checkpoint的时候直接将此LSN写入到日志文件;Last checkpoint at(LSN4):当前已经写入Checkpoint的LSN;对于系统来说,以上4个LSN是递减的,即:LSN1=LSN2=LSN3=LSN4.,Innodb日志机制深入分析,Innodb日志机制深入分析,Innodb日志机制深入分析,Innodb的数据并不是实时写盘的,为了避免宕机时数据丢失,保证数据的ACID属性,Innodb至少要保证数据对应的日志不能丢失。对于不同的情况,Innodb采取不同的对策:宕机导致日志丢失Innodb有日志刷盘机制,可以通过innodb_flush

8、_log_at_trx_commit参数进行控制;日志覆盖导致日志丢失Innodb日志文件大小是固定的,写入的时候通过取余来计算偏移量,这样存在两个LSN写入到同一位置的可能,后面写的把前面写得就覆盖了,以“写入机制”章节的样例为例,LSN100000000和LSN1600000000两个日志的偏移量是相同的了。这种情况下,为了保证数据一致性,必须要求LSN=1000000000对应的脏页数据都已经刷到磁盘中,也就是要求Last checkpoint对应的LSN一定要大于1000000000,否则覆盖后日志也没有了,数据也没有刷盘,一旦宕机,数据就丢失了。,1 Sharp 检查点。2 Fuzz

9、y checkpoint,Mysql 检查点的类型,通常这里的sharp指的是刷新BP中所有的脏页到datafile中。脏页刷新完毕的时候产生一个sharp checkpoint例如关闭数据库的时候发生sharp检查点大概步骤是 1停止所有的更新操作2 刷新所有的脏页到磁盘3 写入当前的检查点信息到日志文件4 把检查点信息写入到每个datafile中。,Sharp checkpoint介绍,1 受参数innodb_max_dirty_pages_pct 影响2 percona 中引入innodb_adaptive_flushing_method3 根据日志大小进行适时的刷新,Fuzzy che

10、ckpoint,每1S 若buffer pool中的脏页比率超过了srv_max_buf_pool_modified_pct=75,则进行Checkpoint,刷脏页,flush PCT_IO(100)的dirty pages=200 若采用adaptive flushing,则计算flush rate,进行必要的flush flush PCT_IO(100)的dirty pages=200 每10S 若buffer pool中的脏页比率超过了70%,flush PCT_IO(100)的dirty pages dirty pages=200 若buffer pool中的脏页比率未超过70%,f

11、lush PCT_IO(10)的dirty pages=20,Checkpoint触发条件,深入理解内存中的数据结构,内存结构中buffer pool中的数据结构Free listLRU listFlush list,和检查点相关的数据结构,1.LRu list2.Flush list,关于LRU,Specifies the approximate percentage of the InnoDB buffer pool used for the old block sublist.The range of values is 5 to 95.The default value is 37(t

12、hat is,3/8 of the pool).,关于FLUSh list,实际上就是所有的脏页的一个先后的修改顺序排列,Get total buffer pool statistics.*/buf_get_total_list_len(for(i=0;i LRU);*free_len+=UT_LIST_GET_LEN(buf_pool-free);*flush_list_len+=UT_LIST_GET_LEN(buf_pool-flush_list);,innodb_max_dirty_pages_pct 在数据库源代码中的体现,buf0buf.c,buf_get_modified_rat

13、io_pct(void)ulint ratio;ulint lru_len=0;ulint free_len=0;ulint flush_list_len=0;buf_get_total_list_len(,innodb_max_dirty_pages_pct 在数据库源代码中的体现,buf0buf.c,反映在数据库上的脏页比率,脏页的比率计算,可以看出数据库典型,反映在数据库上的脏页比率,相关性能参数在数据库上的反映,Checkpoint触发,Checkpoint触发,计算过去一段时间内,flush的平均速度;与当前需要的flush速度其中,BUF_FLUSH_STAT_N_INTERVAL

14、=20S不变,计算的仍旧是过去20S内的平均flush速度 若当前所需速度 20S内的平均速度,则adaptive flushing会尝试进行一次flush操作。flush的dirty pages数量仍旧是PCT_IO(100),200个dirty pages。,Checkpoint触发检查点,函数流程:buf0buf.cbuf_flush_get_desired_flush_rate1.从buf_pool_t结构中,获得总dirty page的数量2.计算最近一段时间之内,redo日志产生的平均速度其中,BUF_FLUSH_STAT_N_INTERVAL=20S,20S内的平均redo产生速

15、度/*Number of intervals for which we keep the history of these stats.Each interval is 1 second,defined by the rate at which srv_error_monitor_thread()calls buf_flush_stat_update().*/#define BUF_FLUSH_STAT_N_INTERVAL 20 flush的统计信息,每隔20S会被buf_flush_stat_update函数重置,Checkpoint触发检查点,刷新脏页到磁盘的算法,首先计算可选的neig

16、hborsflush脏页之前,必须保证脏页对应的日志已经写回日志文件将数据拷贝到double writememory将double writememory写出到diskdoublewrite buffer的写,为同步写,调用在doublewrite buffer被成功flush到disk之后,对应的dirty pages不会再丢失数据。此时再将doublewrite buffer对应的dirty pages写出到disk标识当前flush操作结束(buf_flush_end)收集当前flush操作的统计信息更新检查点信息,检查点更新流程,流程一 每10秒更新检查点流程二 在高IO系统中每1秒更

17、新检查点,Innodb日志机制深入分析,为了解决第二种情况导致数据丢失的问题,Innodb实现了一套日志保护机制,详细实现如下:,为了解决第二种情况导致数据丢失的问题,Innodb实现了一套日志保护机制,详细实现如下:,“sync”point is at about 7/8 of innodb_log_file_size,and the“async”point is at about 6/8=3/4 of innodb_log_file_size.,Innodb日志机制深入分析,Innodb日志机制深入分析,Innodb日志机制深入分析,检查点的一些总结,mysql检查点事件受两个因素的制约:

18、一个是amount,另外一个是age.amount第一个amount,主要innodb_max_dirty_pages_pct参数控制,这个是控制脏也占Bp的百分比第二个age mount主要由日志文件大小有关。http:/,影响检查点整检查点的参数,关于恢复,数据库在恢复过程中,从检查点开始,到日志文件尾部,先进行redo,然后再进行undo。影响undo的因素 与REDO阶段不同,减小日志文件的大小并不能缩短 UNDO阶段,甚至会出现更小的日志时UNDO更慢的情况。解决办法:缩短UNDO阶段的唯一办法是使用合适的事务大小,使得更新操作只影响少量的行,Innodb Double Write,内存中存在一块区域,大小为2M系统表空间存在一块区域,大小为2M,Double write思考,为什么需要double write,Double write buffer写入量,可以看到比例远小于64:1 说明系统写入压力并不大,关闭doublewrite,关闭doublewrite的方法skip_innodb_doublewriteinnodb_doublewrite=0在soloris上的ZFS文件系统上可以保证数据一致性,可以禁用在slave为了达到最大性能也可以禁用,Q&A,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号