MongoDB文档FAQ (https://docs.mongodb.com/manual/faq/storage/#wiredtiger-storage-engine)中指出了这一点:
避免将WiredTiger内部缓存大小增加到其默认值以上。
默认情况下,这应该是RAM的50 % ou 60 %。
和
storage.wiredTiger.engineConfig.cacheSizeGB限制WiredTiger内部缓存的大小。操作系统将为文件系统缓存使用可用的空闲内存,这允许压缩的MongoDB数据文件留在内存中。
我不明白这句话。WT缓存是否包含压缩数据和索引的工作集?如果是这样的话,我们是否需要为MongoDB数据文件保留一些内存映射文件的额外内存?
我的db.serverStatus().mem显示如下:
{
"bits" : 64,
"resident" : 10518,
"virtual" : 12131,
"supported" : true,
"mapped" : 0,
"mappedWithJournal" : 0
}所以我猜我没有内存映射的字节,那么我可以增加de缓存?
谢谢!
发布于 2017-06-12 12:12:18
我们是否需要为MongoDB数据文件保留一些内存映射文件的额外内存
mem.mapped和mem.mappedWithJournal输出中的度量标准仅适用于MMAPv1存储引擎,因此对于WiredTiger,预期为0。这些指标早于存储引擎API (和WiredTiger),因此可能会在某个时候移到serverStatus中特定于存储引擎的部分。
WT缓存是否包含压缩数据和索引的工作集?
WiredTiger内部缓存用于未压缩数据,这是与磁盘上的压缩数据格式不同的表示形式。WiredTiger缓存之外的内存可用于文件系统缓存(它缓存磁盘上的表示,包括压缩)以及其他临时内存需求,如每个连接开销(每个连接1MB)、内存中的排序、聚合和JavaScript上下文。
工作集是应用程序经常访问的数据和索引的总集。为了获得最好的性能,这应该最好地适合于RAM。一个更大的WiredTiger缓存将允许更多的未压缩数据在内存中使用,而牺牲了用于其他目的的内存。如果您的数据显著压缩,那么文件系统缓存的更多空闲内存将允许在RAM (未压缩+压缩数据)中设置更大的总工作集。
所以我猜我没有内存映射的字节,那么我可以增加de缓存?
根据MongoDB文档,通常应该将WiredTiger缓存保留在默认大小(甚至可能减少此值)。您可以尝试为您的工作负载和部署调整缓存大小,但是设置过大可能会对性能产生不利影响。
发布于 2017-06-12 11:47:15
答案是不!首先,因为你在看错误的信息。因为您使用的是wiredTiger,所以您应该看上去像db.serverStatus().wiredTiger.cache
很多信息但是
"bytes currently in the cache" : 88404告诉你现在的情况
"maximum bytes configured" : 19327352832最大缓存大小(内存的50%)
"bytes read into cache" : 43999,
"bytes written from cache" : 88126自启动以来,从磁盘读取了多少数据(并将其写回)
MongoDB还需要这个缓存之外的额外内存,用于聚合、排序、连接管理等,因此确保为MongoDB留出足够的内存来完成其工作非常重要。否则,MongoDB有可能被操作系统内存不足(OOM)杀手杀死。
https://dba.stackexchange.com/questions/176035
复制相似问题