如果未压缩的数据大小大于缓存大小,则MongoDB总是会出现校验和错误

问题描述

每当未压缩数据的大小大于缓存时,就会获得一致的校验和错误,并在MongoDB中崩溃。

一些信息:

计算机:(独立mongodb)
cpu AMD 3600X
内存32 * 4 = 128GB
存储2TB SSD
方法板B450M

系统:

Linux 5.4.0-42-通用#46〜18.04.1-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux

MongoDB data size:
Uncompressed data size 42GB (zstd)
Compressed data size 12GB
Index size 1.6GB
Average object size 1.4KB

我的问题是关于可能导致此崩溃的原因。到目前为止,我所知道的是:

-如果将cacheSizeGB设置为32GB(小于42GB,即未压缩的数据大小), mongodb几乎每天都会崩溃,并产生校验和错误。崩溃多发生在mongodump期间,有时在更新数据时发生。

-但是,如果我将cacheSizeGB设置为100GB(大于42GB),则不会发生崩溃。

其他信息:

  1. 所有对象每天更新,并每天运行mongodump进行备份。
  2. 系统内存缓冲区/缓存会随着时间增长,直到使用完所有可用内存为止。
  3. 收到校验和错误后,我将运行修复命令。

错误消息:

2020-08-07T10:51:39.094+0800 E  STORAGE  [conn399] WiredTiger error (0) [1596768699:94163][45915:0x7f32835f7700],file:collection-22--9089965868171986819.wt,WT_CURSOR.search: __wt_block_read_off,274: collection-22--9089965868171986819.wt: read checksum error for 28672B block at offset 6685696000: calculated block checksum  doesn't match expected checksum Raw: [1596768699:94163][45915:0x7f32835f7700],274: collection-22--9089965868171986819.wt: read checksum error for 28672B block at offset 6685696000: calculated block checksum  doesn't match expected checksum
2020-08-07T10:51:39.094+0800 E  STORAGE  [conn399] WiredTiger error (0) [1596768699:94321][45915:0x7f32835f7700],WT_CURSOR.search: __wt_bm_corrupt_dump,135: {6685696000,28672,0xdae2251d}: (chunk 1 of 28): 00 00 00 00 00 00 00 00 d7 d7 8a 01 00 00 00 00 67 75

解决方法

您有 MongoDB 的支持订阅吗?如果是这样,请打开一个支持案例,我们会查看它。

通常,这些情况是内存或磁盘损坏。