如何确定STARTUP2 BTree Bottom Up步骤的整体进度?

时间:2015-01-27 21:17:06

标签: mongodb

确定新辅助成员的初始同步(STARTUP2)的索引构建阶段的总体进度的有效方法是什么?在我的情况下(几天),索引构建阶段需要很长时间,能够看到它在过程中的位置会很棒。

日志输出如下所示:

Tue Jan 27 20:04:45.006 [rsSync]    Index: (2/3) BTree Bottom Up Progress: 782212700/946547617  82%

就我而言,这意味着“82%的某些物体,来自未知数量的未知数量的物体。”

2 个答案:

答案 0 :(得分:2)

目前还没有监控此进度的方法,尽管有一张票据可以使用rs.status()增强对STARTUP2的监控:

https://jira.mongodb.org/browse/SERVER-7526 https://jira.mongodb.org/browse/SERVER-7019

也就是说,这个阶段所需的时间大致是每个索引乘以索引数所需时间的函数。反过来,每个索引所需的时间是每个索引中文档数量的函数。

因此,如果您测量创建索引所需的时间,请将其除以该索引中的文档总数。这应该可以让您大致了解索引单个文档的速度。然后将其乘以所有索引中的文档总数,这样可以让您了解剩余的时间。

现在,这是一个粗略的想法 - 影响总时间的一件事是需要索引的数据总量与可用内存量。如果你必须创建一个索引,在创建了另一个触及相同文档的索引之后,如果数据仍然缓存在内存中,它可能会快得多。没有办法轻易预测这一点,除了说总文件大小是否>>由于以前的文档缓存,你的内存不会超过内存。

长期我会投票https://jira.mongodb.org/browse/SERVER-7019,看看我们是否可以将其纳入队列,因为没有大型MongoDB数据库真的很痛苦。

答案 1 :(得分:0)

现在可以通过修复SERVER-7526SERVER-7019来实现:

MongoDB 4.2.1及更高版本:

在mongo shell中运行: db.adminCommand( { replSetGetStatus: 1 } )

  

如果在成员的初始同步期间(即STARTUP2状态)在成员上运行replSetGetStatus或mongo shell助手rs.status(),该命令将返回replSetGetStatus.initialSyncStatus指标。

以下是 initialSyncStatus 的示例输出:

        "initialSyncStatus" : {                                       
                "failedInitialSyncAttempts" : 0,                            
                "maxFailedInitialSyncAttempts" : 10,                                 
                "initialSyncStart" : ISODate("2019-10-29T20:01:12.516Z"),                                      
                "initialSyncAttempts" : [ ],                                       
                "fetchedMissingDocs" : 0,                                     
                "appliedOps" : 0,                                                                              
                "initialSyncOplogStart" : Timestamp(1572379269, 4),                
                "databases" : {                                                                                
                        "databasesCloned" : 3,                     
                        "admin" : {                           
                                "collections" : 4,                                    
                                "clonedCollections" : 4,                            
                                "start" : ISODate("2019-10-29T20:01:13.393Z"),
                                "end" : ISODate("2019-10-29T20:01:14.777Z"),
                                "elapsedMillis" : 1384,         
                                "admin.system.roles" : {                      
                                        "documentsToCopy" : 1,                                                 
                                        "documentsCopied" : 1,                   
                                        "indexes" : 2,                        
                                        "fetchedBatches" : 1,                         
                                        "start" : ISODate("2019-10-29T20:01:13.911Z"),
                                        "end" : ISODate("2019-10-29T20:01:14.196Z"),
                                        "elapsedMillis" : 285                    
                                }, 

MongoDB 3.4.0-4.2.0:

执行 对处于STARTUP2状态的成员执行db.adminCommand( { replSetGetStatus: 1, initialSync: 1 } )命令

MongoDB参考: replSetGetStatus