在副本集上建立滚动索引
最后更新于
最后更新于
在本页面
索引构建会影响复制集的性能。默认情况下,MongoDB 4.4及以后版本在所有承载数据的复制集成员上同时构建索引。对于不能容忍由于索引构建而导致性能下降的工作负载,可以考虑使用以下过程以滚动方式构建索引。
滚动索引构建一次最多抽取一个复制集成员(从辅助成员开始),并在该成员上作为独立的索引构建。构建滚动索引至少需要一次复制集的选择。
要使用以下过程创建,必须在此过程中停止对集合的所有写操作。
如果在此过程中不能停止对集合的所有写操作,请不要使用此页面上的过程。相反,通过在主节点上为一个副本集发出来在该集合上构建你的唯一索引。
确保您的足够大,以允许索引或重新索引操作完成,而不会落后太多而无法跟上。参见文档了解更多信息。
用于构建唯一索引
重要
停止与辅助节点关联的mongod进程。进行以下配置更新后重新启动:
配置文件
如果您正在使用配置文件,请进行以下配置更新:
例如,更新后的副本集成员配置文件将包括如下示例所示的内容:
并重新启动:
命令行选项
如果使用命令行选项,请进行以下配置更新:
删除---复制集。
修改---端口到另一个端口。
在---setParameter选项中设置参数disableLogicalSessionCacheRefresh为true
例如,如果你的复制集成员通常运行在默认端口27017和----replSet选项,你应该指定一个不同的端口,省略----replSet选项,并设置disableLogicalSessionCacheRefresh参数为true:
重要
一定要删除**' disableLogicalSessionCacheRefresh '**参数。
例如,重新启动复制集成员:
配置文件
如果您正在使用配置文件:
恢复到原始端口号。
例如:
copycopied
并重新启动
命令行选项
如果您正在使用配置文件:
恢复到原始端口号
包括----replSet选项。
删除参数disableLogicalSessionCacheRefresh。
例如:
一旦该成员赶上集合中的其他成员,请对其余的次要成员一次重复一个成员的过程:
当所有的辅助服务器都有了新的索引时,从主服务器下走一步,使用上面描述的过程作为一个独立的程序重新启动它,并在前主服务器上构建索引:
要使用以下过程创建,必须在索引构建期间停止对集合的所有写操作。否则,复制集成员之间的数据可能会不一致。如果不能停止对集合的所有写操作,请不要使用以下过程创建唯一索引。
以下以滚动方式构建索引的过程适用于复制集部署,而不适用分片集群。有关分片集群的过程,请参阅。
注释掉选项。
更改到一个不同的端口。记录原始的端口设置作为注释。
在部分设置参数' disablelogicalicalsessioncacherefresh '为' true '。
其他设置(例如等)保持不变。
其他设置(例如等)保持不变。
直接连接到实例作为一个独立的运行在新的端口上,并为这个实例创建新的索引。
例如,将连接到实例,然后使用来username
在records
集合的字段上创建升序索引:
索引构建完成后,关闭 实例。撤消以独立版本启动时所做的配置更改,以返回其原始配置并以复制集的成员身份重新启动。
取消的注释。
删除中的参数**' disableLogicalSessionCacheRefresh '**。
Other settings (e.g. , etc.) remain the same.
其他设置(例如等)保持不变。
使用mongo shell
中的方法降低主数据库的性能。成功降级后,当前的主节点将成为辅助节点,复制集成员将选择新的主节点。