首页 > 其他分享 >WiredTiger的日志和检查点机制

WiredTiger的日志和检查点机制

时间:2023-04-11 09:47:01浏览次数:40  
标签:00 WiredTiger WT 检查点 日志 size

1.日志

·对于每个写操作,mongodb将改变写入日志文件,即事务日志文件。写入的频率收到storage.journal.commitIntervalMs参数的控制。默认是100毫秒,可取值的范围是1--500毫秒。

·WT缓存中的页数据也会被标记为脏数据

日志文件的格式示例:

$ wt printlog -u -x

{ "lsn" : [15,256],
    "hdr_flags" : "",
    "rec_len" : 256,
    "mem_len" : 256,
    "type" : "commit",
    "txnid" : 3836082,
    "ops": [
      { "optype": "row_put",
        "fileid": 14 0xe,
        "key": "u00e8du001au0015bu00ffu00ffu00dfu00c1",
        "key-hex": "e8641a1562ffffdfc1",
        "value": "gu0000u0000u0000u0002o….,
        "value-hex": "67000000026f7….."
      }
    ]
  },
  { "lsn" : [15,512],
    "hdr_flags" : "",
    "rec_len" : 128,
    "mem_len" : 128,
    "type" : "commit",
    "txnid" : 3836083,
    "ops": [
      { "optype": "row_modify",
        "fileid": 6 0x6,
        "key": "u0081",
        "key-hex": "81",
        "value": "u0001u0000u0000u….",
        "value-hex": "010000000000000008000000000000003e0000000000000008000000000000000100000063151a64"
      }

2.检查点

检查点在持久性和一致性方面的作用同样重要。检查点相当于日志,记录了上一次检查点之后相关数据文件的变化情况。

每个检查点由一个根页、三个指向磁盘上特定位置的页列表以及磁盘上的文件大小组成。

在每个检查点间隔(默认为60秒),MongoDB将缓存中标记为脏的已修改页面刷新到各自的数据文件(collection-*.Wt和index-*.Wt)。

使用相同的“wt”程序,我们可以列出检查点并查看它们包含的信息。下面显示的检查点信息是根据每个数据文件(集合和索引)存储的。这些检查点存储在WiredTiger中.wt文件。

上面的图显示了检查点中的信息,而下面的输出显示了使用“wt”程序列出检查点时的信息。

$ wt list -c 
WiredTigerCheckpoint.33: Sun Mar 26 08:35:59 2022 (size 8 KB)   	
file-size: 8 KB, checkpoint-size: 4 KB           	offset, size, checksum   root : 8192, 4096, 3824871989 (0xe3faea35)   	
alloc: 12288, 4096, 4074814944 (0xf2e0bde0)   	
discard : 0, 0, 0 (0)   	
available : 0, 0, 0 (0)

WiredTigerCheckpoint.34: Sun Mar 26 08:35:59 2022 (size 8 KB)   	
file-size: 8 KB, checkpoint-size: 4 KB           	offset, size, checksum   root : 8192, 4096, 997122142 (0x3b6ee05e)   	
alloc: 12288, 4096, 4074814944 (0xf8e0cde0)   	
discard : 0, 0, 0 (0)   	available : 0, 0, 0 (0)

检查点信息中的重要点:

·根页

    包含了根页的大小,在文件中的偏移量,检查和。创建一个新的检查点就会创建一个根页

·内部页

    只含有keys。WiredTiger遍历内部页面以查找相应的Leaf页面。

·叶子页

    包含实际的key:value对

·分配的列表页

    发生检查点后,wt引擎的块管理器记录了新分配的页已经他们的信息,比如大小、偏移量、检查和。

·丢弃的列表页

    检查点结束后,相应的页会被丢弃。

·可用的列表页

    当这个检查点被执行时,所有由WiredTiger块管理器分配但尚未使用的页面;当删除之前创建的检查点时,附加到该检查点的可用页面将被合并到该检查点的最新可用列表中,并且每个可用页面的大小、偏移量和校验和也将被记录。

·文件大小

    文成检查点时,磁盘上数据文件的大小

检查点的触发机制:

·每60秒,除非有非常大的数据需要写,这样会因为io瓶颈生成backlog

·eviction_dirty_target或eviction_dirty_trigger分别达到5%和20%。一般不会达到,除非硬件真的无法处理写负载

 

如果发生了硬件故障或者不明原因的奔溃,会发什么呢?我们来看看mongodb的启动过程:

(1).mongodb尝试做奔溃恢复,查看事务日志是否有数据

以下是缩减过的日志:

{"t":{"$date":"2023-03-27T11:22:48.360+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1679916168:360670][9811:0x7f43b45d
7bc0], txn-recover: [WT_VERB_RECOVERY_PROGRESS] Recovering log 15 through 16"}}
7bc0], txn-recover: [WT_VERB_RECOVERY | WT_VERB_RECOVERY_PROGRESS] Set global recovery timestamp: (1679916159, 1)"}}
{"t":{"$date":"2023-03-27T11:22:48.688+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1679916168:688481][9811:0x7f43b45d
7bc0], txn-recover: [WT_VERB_RECOVERY | WT_VERB_RECOVERY_PROGRESS] Set global oldest timestamp: (1679916154, 1)"}}
{"t":{"$date":"2023-03-27T11:22:48.695+00:00"},"s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"initandlisten","msg":"WiredTiger message","attr":{"message":"[1679916168:695497][9811:0x7f43b45d
7bc0], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 10, snapshot max: 10 snapshot count: 0, oldest timestamp: (1679916154, 1) , meta checkpoint timest
amp: (1679916159, 1) base write gen: 11982970"}}
{"t":{"$date":"2023-03-27T11:22:48.705+00:00"},"s":"I",  "c":"RECOVERY", "id":23987,   "ctx":"initandlisten","msg":"WiredTiger recoveryTimestamp","attr":{"recoveryTimestamp":{"$timestamp":{"
t":1679916159,"i":1}}}}

(2).从数据文件找到上一次运行成功的检查点,从日志文件恢复未提交的脏数据到wt引擎的缓存中,缓存中的页一会被标记成脏页。

以下是缩减过的日志:

file:demo/collection/108-2625234990440311433.wt
access_pattern_hint=none,allocation_size=4KB,app_metadata=(formatVersion=1),assert=(commit_timestamp=none,durable_timestamp=none,read_timestamp=none,write_timestamp=off),block_allocation=best,block_compressor=snappy………checkpoint=(WiredTigerCheckpoint.33=(addr="018081e49e1d91ae9a81e4b44eefcd9b81e4be132c8a808080e30d3fc0e30c4fc0",order=33,time=1679897278,size=819200,newest_start_durable_ts=7215101747935576783,oldest_start_ts=0,......,checkpoint_backup_info=,checkpoint_lsn=(4294967295,2147483647)

(3).刷脏页到对应的数据文件

 

标签:00,WiredTiger,WT,检查点,日志,size
From: https://www.cnblogs.com/abclife/p/17303007.html

相关文章

  • [golang]使用logrus自定义日志模块
    简介logrus是一个第三方日志库,性能虽不如zap和zerolog,但方便易用灵活。logrus完全兼容标准的log库,还支持文本、JSON两种日志输出格式。特点相较于标准库,logrus有更细致的日志级别,从高到低分别是:trace>debug>info>warn>error>fatal>panic支持自定义日志格式,内置支......
  • java 日志框架总结
    日志级别ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFFALL:最低等级的,用于打开所有日志记录。TRACE:designatesfiner-grainedinformationaleventsthantheDEBUG.Since:1.2.12,很低的日志级别,一般不会使用。DEBUG:指出细粒度信息事件对调试应用程序是非常有帮......
  • ubuntu 20.04服务器 syslog客户端日志发送至深信服日志系统服务器中
    1.ubuntu设置Linux下syslog客户端配置:修改配置⽂件:vi/etc/rsyslog.conf在最后⼀⾏加⼊:*.*@192.168.190.50:514#将所有消息发送到该地址重启服务:#servicersyslogrestart查看服务状态#servicersyslog2.日志服务器设置添加源设置源名称----接入类型(syslog)---源IP(你......
  • Loki采集Mysql errorlog,你值得拥有的错误日志聚合系统
    说到分布式日志存储系统,大家肯定对ELK、EFK这些工具并不陌生。可是它们都基于Elasticsearch存储,搭建复杂,耗资源,上手难。所以,个人非常推崇Grafana Labs开源的Loki 轻量级日志聚合分析系统Loki使用标签来作为索引,而不是对全文进行检索,所以在搜索上会有一定的局限性。但是,也能满......
  • ELK日志分析系统
    ELK日志分析系统  一、ELK概述  1、ELK日志分析系统  ELK是由Elasticsearch、Logstash、Kiban三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于Elastic.co公司名下,故有此简称。  2.、ELK中日志处理步骤  1.将日志进行集中化管......
  • ELK 日志分析系统的部署
    文章目录一、ELK前言1.1需要收集的日志1.2日志收集后,如何可视化1.3日志收集可视化后,怎么使用1.4要怎么收集日志二、ELK简介2.1ElasticSearch介绍2.2ElasticSearch核心概念2.2ELK里面有哪些组件2.3ELK的工作原理三、ELK日志分析系统集群部署3.1ELKElasticsearch集群部......
  • ELK日志分析系统
    一、ELK简介1、ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。●ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。Elasticse......
  • ELK日志分析系统
    一、ELK日志分析系统简介1、日志服务器的优缺点优点:提高安全性集中存放日志缺点:对日志的分析困难2、ELK日志简化分析的管理工具,由Elasticsearch(ES)、Logstash、Kibana三个开源工具组成,官方网站:https://www.elastic.co/productsES(nosql非关数据库):存储功能和索引......
  • 操作日志的实现
    1,用到spring中的切面编程,用网址http://whois.pconline.com.cn/ipJson.jsp查询到访问者的ip信息2,了解到了异步类:CompletableFuture是Java8中新增的类,用于实现异步编程。它提供了一些方法,可以方便地对异步操作进行组合、转换和处理异常。下面是一些常用的方法:runAsync(Runn......
  • ELK企业级日志分析系统
    一、ELK简介ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。  1.ELK组件介绍Elasticsearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来......