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

上传人(卖家):三亚风情 文档编号:2249785 上传时间:2022-03-25 格式: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页
点击查看更多>>
资源描述

1、summarryMysql log fileMysql 检查点检查点Mysql doublewrite基本操作基本操作基本操作基本操作基本操作基本操作基本操作基本操作.为什么要采取异步刷新Why?为什么要采取异步刷新1Thisisanoptimization2Itcallitwritecombining关于log工作原理http:/ 干净的关闭数据库,删除日志文件,修改f 中innodb_log_file_size,重启mysql 2 干净的关闭数据库,rename日志文件,修改f 中innodb_log_file_size,重启mysql Log写入写入 LSN实际上对应日志文件的偏移量,新

2、的LSN旧的LSN+写入的日志大小。举例如下:LSN1G,日志文件大小总共为600M,本次写入512字节,则实际写入操作为:l求出偏移量:由于LSN数值远大于日志文件大小,因此通过取余方式,得到偏移量为400M;写入日志:找到偏移400M的位置,写入512字节日志内容,下一个事务的LSN就是1000000512;Innodb日志机制深入分析日志机制深入分析Innodb日志机制深入分析日志机制深入分析Checkpoint写入写入Innodb实现了FuzzyCheckpoint的机制,每次取到最老的脏页,然后确保此脏页对应的LSN之前的LSN都已经写入日志文件,再将此脏页的LSN作为Checkpo

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

4、创建一条日志;日志刷盘:日志写入到磁盘上的日志文件;数据刷盘:日志对应的脏页数据写入到磁盘上的数据文件;写CKP:日志被当作Checkpoint写入日志文件;Innodb日志机制深入分析日志机制深入分析对应这4个阶段,系统记录了4个日志相关的信息,用于其它各种处理使用:Logsequencenumber(LSN1):当前系统LSN最大值,新的事务日志LSN将在此基础上生成(LSN1+新日志的大小);Logflushedupto(LSN2):当前已经写入日志文件的LSN;Oldestmodifieddatalog(LSN3):当前最旧的脏页数据对应的LSN,写Checkpoint的时候直接将此L

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

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

7、的类型通常这里的sharp指的是刷新BP中所有的脏页到datafile中。脏页刷新完毕的时候产生一个sharpcheckpoint例如关闭数据库的时候发生sharp检查点大概步骤是1停止所有的更新操作2刷新所有的脏页到磁盘3写入当前的检查点信息到日志文件4把检查点信息写入到每个datafile中。Sharpcheckpoint介绍1受参数innodb_max_dirty_pages_pct影响2percona中引入innodb_adaptive_flushing_method3根据日志大小进行适时的刷新Fuzzycheckpoint每每1S若bufferpool中的脏页比率超过了srv_max

8、_buf_pool_modified_pct=75,则进行Checkpoint,刷脏页,flushPCT_IO(100)的dirtypages=200若采用adaptiveflushing,则计算flushrate,进行必要的flushflushPCT_IO(100)的dirtypages=200每每10S若bufferpool中的脏页比率超过了70%,flushPCT_IO(100)的dirtypagesdirtypages=200若bufferpool中的脏页比率未超过70%,flushPCT_IO(10)的dirtypages=20Checkpoint触发条件触发条件深入理解内存中的数据

9、结构内存结构结构中bufferpool中的数据结构FreelistLRUlistFlushlist和检查点相关的数据结构1.LRulist2.Flushlist关于LRUSpecifiestheapproximatepercentageoftheInnoDBbufferpoolusedfortheoldblocksublist.Therangeofvaluesis5to95.Thedefaultvalueis37(thatis,3/8ofthepool).关于FLUShlist实际上就是所有的脏页的一个先后的修改顺序排列Gettotalbufferpoolstatistics.*/buf_ge

10、t_total_list_len(for(i=0;iLRU);*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.cbuf_get_modified_ratio_pct(void)ulintratio;ulintlru_len=0;ulintfree_len=0;ulintflush_list_len=0;buf_get_total_list_len(&lru_len

11、,&free_len,&flush_list_len);ratio=(100*flush_list_len)/(1+lru_len+free_len);/*1+istheretoavoiddivisionbyzero*/return(ratio);innodb_max_dirty_pages_pct在数据库源代码中的体现buf0buf.c反映在数据库上的脏页比率脏页的比率计算可以看出数据库典型反映在数据库上的脏页比率相关性能参数在数据库上的反映Checkpoint触发触发Checkpoint触发触发计算过去一段时间内,flush的平均速度;与当前需要的flush速度其中,BUF_FLUSH_S

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

13、内的平均redo产生速度/*Numberofintervalsforwhichwekeepthehistoryofthesestats.Eachintervalis1second,definedbytherateatwhichsrv_error_monitor_thread()callsbuf_flush_stat_update().*/#defineBUF_FLUSH_STAT_N_INTERVAL20flush的统计信息,每隔20S会被buf_flush_stat_update函数重置Checkpoint触发检查点触发检查点刷新脏页到磁盘的算法首先计算可选的neighborsflush脏页

14、之前,必须保证脏页对应的日志已经写回日志文件将数据拷贝到doublewritememory将doublewritememory写出到diskdoublewritebuffer的写,为同步写,调用在doublewritebuffer被成功flush到disk之后,对应的dirtypages不会再丢失数据。此时再将doublewritebuffer对应的dirtypages写出到disk标识当前flush操作结束(buf_flush_end)收集当前flush操作的统计信息更新检查点信息检查点更新流程流程一每10秒更新检查点流程二在高IO系统中每1秒更新检查点Innodb日志机制深入分析日志机制深

15、入分析为了解决第二种情况导致数据丢失的问题,Innodb实现了一套日志保护机制,详细实现如下: 为了解决第二种情况导致数据丢失的问题,Innodb实现了一套日志保护机制,详细实现如下:“sync”pointisatabout7/8ofinnodb_log_file_size,andthe“async”pointisatabout6/8 = 3/4ofinnodb_log_file_size.Innodb日志机制深入分析日志机制深入分析Innodb日志机制深入分析日志机制深入分析概念概念计算计算含义含义Ckp ageLSN1- LSN4还没有做Checkpoint的日志范围,若Ckpage超过日

16、志空间,说明被覆盖的日志(LSN1LSN4Logcap)对应日志和数据“可能”还没有刷到磁盘上Innodb日志机制深入分析日志机制深入分析概念概念计算计算含义含义Ckp async日志空间大小 *31/32强制写Checkpoint,此时事务还可以继续执行,所以为async,对事务的执行速度没有影响(间接影响也不大,因为写Checkpoint的操作比较简单)Ckp sync日志空间大小 *64/64强制写Checkpoint,此时事务停止执行,所以为sync,但由于写Checkpoint的操作比较简单,即使阻塞,时间也很短检查点的一些总结mysql检查点事件受两个因素的制约:一个是amount

17、,另外一个是age.amount第一个amount,主要innodb_max_dirty_pages_pct参数控制,这个是控制脏也占Bp的百分比第二个agemount主要由日志文件大小有关。http:/ Double Write内存中存在一块区域,大小为2M系统表空间存在一块区域,大小为2MDoublewrite思考为什么需要doublewriteDoublewritebuffer写入量可以看到比例远小于64:1说明系统写入压力并不大关闭doublewrite关闭doublewrite的方法skip_innodb_doublewriteinnodb_doublewrite=0在soloris上的ZFS文件系统上可以保证数据一致性,可以禁用在slave为了达到最大性能也可以禁用Q&A

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(深入解析MySQL检查点课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|