网站大量收购闲置独家精品文档,联系QQ:2885784924

深入解析MySQL检查点.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入解析MySQL检查点

Innodb日志机制深入分析 Innodb的数据并不是实时写盘的,为了避免宕机时数据丢失,保证数据的ACID属性,Innodb至少要保证数据对应的日志不能丢失。对于不同的情况,Innodb采取不同的对策: 宕机导致日志丢失 Innodb有日志刷盘机制,可以通过innodb_flush_log_at_trx_commit参数进行控制; 日志覆盖导致日志丢失 Innodb日志文件大小是固定的,写入的时候通过取余来计算偏移量,这样存在两个LSN写入到同一位置的可能,后面写的把前面写得就覆盖了,以“写入机制”章节的样例为例,LSN=100000000和LSN=1600000000两个日志的偏移量是相同的了。这种情况下,为了保证数据一致性,必须要求LSN=1000000000对应的脏页数据都已经刷到磁盘中,也就是要求Last checkpoint对应的LSN一定要大于1000000000,否则覆盖后日志也没有了,数据也没有刷盘,一旦宕机,数据就丢失了。 1 Sharp 检查点。 2 Fuzzy 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_method 3 根据日志大小进行适时的刷新 Fuzzy checkpoint 每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%,flush PCT_IO(10)的dirty pages= 20 Checkpoint触发条件 深入理解内存中的数据结构 内存结构中buffer pool中的数据结构 Free list LRU list Flush list 和检查点相关的数据结构 1.LRu list 2.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 (that is, 3/8 of the pool). 关于FLUSh list 实际上就是所有的脏页的一个先后的修改顺序排列 Get total buffer pool statistics. */ buf_get_total_list_len( for (i = 0; i srv_buf_pool_instances; i++) { buf_pool_t* buf_pool; buf_pool = buf_pool_from_array(i); *LRU_len += UT_LIST_GET_LEN(buf_pool-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_ratio_pct(void) { ulint ratio; ulint lru_len = 0; ulint free_len = 0; ulint

文档评论(0)

638922bb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档