MongoDB 6.1的发布说明
重要:MongoDB 6.1是一个快速版本,仅支持MongoDB Atlas。MongoDB 6.1不支持在本地使用。有关更多信息,请参阅MongoDB版本控制。
要安装支持本地使用的最新MongoDB版本MongoDB 6.0,请参阅MongoDB 6.0安装说明。
MongoDB 6.1 发布于 2022 年 10 月 11 日
正则表达式
以下部分描述了MongoDB 6.1中正则表达式的变化。
PCRE库升级
Perl兼容正则表达式(PCRE)是MongoDB用于实现正则表达式模式匹配的库。从6.1版本开始,MongoDB将PCRE库升级到PCRE2。PCRE2是当前的PCRE库,并经过积极维护和更新。
要了解如何在MongoDB中执行正则表达式匹配,请参阅以下页面:
$regex
(查询操作符)$regexFind
(聚合操作符)$regexFindAll
(聚合操作符)$regexMatch
(聚合操作符)
*UCP
用于匹配非ASCII字符的Regex选项
从MongoDB 6.1开始,您可以使用*UCP
选项进行正则表达式查询。*UCP
选项匹配非ASCII字符(具体来说,该选项可以匹配UTF-8字符)。然而,*UCP
选项导致的查询速度比没有指定选项的查询慢。
有关使用*UCP
选项的示例,请参阅扩展Regex选项以匹配ASCII以外的字符。
复制
可重试写入错误处理
从MongoDB 6.1开始,如果第一次和第二次尝试可尝试写入都没有执行一次写入失败,MongoDB会返回NoWritesPerformed
标签的错误。
NoWritesPerformed
标签区分了insertMany()
等批量操作的结果。在insertMany
操作中,可能会出现以下结果之一:
结果 | MongoDB输出 |
---|---|
没有插入任何文件。 | 使用NoWritesPerformed 标签返回错误。 |
部分工作已经完成。(至少插入了一个文档,但不是全部。) | 返回错误时没有NoWritesPerformed 标签。 |
插入所有文件。 | 成功回来了。 |
应用程序可以使用NoWritesPerformed
标签来明确确定没有插入任何文档。此错误报告允许应用程序在处理可重试写入时保持数据库的准确状态。
在以前版本的MongoDB中,当可重试写入的第一次和第二次尝试失败时,会返回错误。然而,没有区别表明没有执行任何写入。
一般变化
平衡政策变化
从MongoDB 6.1开始,分片集群中的数据根据数据大小而不是块数量进行分布。因此,您应该知道分片集群数据分发行为的以下重大变化:
- 平衡器分发数据范围,而不是块。平衡策略寻找数据分发的均匀性,而不是块分布。
- 块不受自动分割的影响。相反,只有当块穿过碎片时才会被分割。
- 块现在被称为范围。
moveRange
取代了moveChunk
。
日志更改
从MongoDB 6.1开始,日志记录始终处于启用状态。因此,MongoDB删除了storage.journal.enabled
选项以及相应的--journal
和--nojournal
命令行选项。
提高了多个文档删除的效率
从MongoDB 6.1开始:
重新分片
从MongoDB 6.1开始,有新的指标可供分片。以下命令的输出已更改:
currentOp
指标
从MongoDB 6.1开始,currentOp
命令和thedbdb.currentOp()
方法扩展了用于分片的输出。
分片操作可能涉及多个MongoDB实例,MongoDB实例可以在分片操作中发挥不同的作用。特定操作和主机实例在分片过程中发挥的作用决定了每个指标何时更新。
衡量标准 | 角色跟踪 | 说明 |
---|---|---|
opStatus |
已移除。 | |
desc |
所有 | 描述所采取的行动。该值是以下值之一:分片捐赠服务$currentOp ,UUID命令将添加到每个角色的状态文档中。 |
op |
所有 | 此指标具有常量值:“命令”。 |
ns |
所有 | 分片索引的命名空间。该值是以下形式的字符串:<database>.<collection> 。 |
originatingCommand |
所有 | 列出操作命令选项的文档。 |
donorState |
捐助者 | 角色状态机的当前状态。 |
coordinatorState |
协调员 | 角色状态机的当前状态。 |
recipientState |
接受者 | 角色状态机的当前状态。 |
approxDocumentsToCopy | 接受者 | 源集合中的文档数量。 |
文件复制 | 接受者 | 已经复制的文件数量。 |
大约字节ToCopy | 接受者 | 源集合中文档的总大小(以字节为单位)。 |
字节复制 | 接受者 | 复制的字节数。当重新分片完成时,此值与approxBytesToCopy 的值相似。 |
oplogEntriesFetched | 接受者 | 写入oplog缓冲区集合的oplog条目数量。 |
oplog条目应用 | 接受者 | 从oplog缓冲区集合中应用的oplog条目数量。 |
插入应用 | 接受者 | 适用于临时分片集合的插入次数。每个涉及插入的操作日志条目都会将计数器增加1。 |
更新已应用 | 接受者 | 适用于临时分片集合的更新数量。每个涉及更新的oplog条目都会将计数器增加1。 |
删除应用 | 接受者 | 适用于临时分片集合的删除数量。每个涉及删除的oplog条目都会将计数器增加1。 |
总操作时间lapsed秒 | 所有 | 自操作开始以来的秒数。 |
totalCopyTimeElapsed秒 | 接受者 | 克隆的秒数。 |
totalCopyTimeElapsed秒 | 协调员 | 收件人可以克隆的最大秒数。 |
总计应用时间lapsed秒 | 接受者 | 应用更改所花费的秒数。 |
总计应用时间lapsed秒 | 协调员 | 收件人在应用更改时可能花费的大致最大秒数。 |
总关键部分时间已过时秒 | 接受者 | 在关键部分花费的秒数。 |
总关键部分时间已过时秒 | 协调员 | 关键部分本可以举行的秒数。 |
剩余操作时间估计秒 | 接受者 | 操作完成前的估计秒数。 |
allShardsLowestRemainingOperationTimeEstimatedSecs | 协调员 | 在所有碎片中计算,这是剩余秒数的最低估计值。 |
allShardsHighestRemainingOperationTimeEstimatedSecs | 协调员 | 在所有碎片中计算,这是剩余秒数的最高估计值。 |
countWritesToStash收藏 | 接受者 | 对收件人的写入数量将藏匿的集合。 |
countWrites在关键部分 | 捐助者 | 在捐赠者的关键部分尝试的写作数量。 |
count阅读在关键部分 | 捐助者 | 在捐赠者的关键部分尝试的阅读次数。 |
serverStatus
指标
从MongoDB 6.1开始,serverStatus
命令和 db.serverStatus()
方法具有以下输出更改:
新指标
countWritesToStashCollections
写入收件人隐藏存储集合的次数。latencies
重新分片操作的计时指标。collectionCloningTotalRemoteBatchRetrievalTimeMillis
收件人从中检索批文档所花费的总时间 供体,单位为毫秒。collectionCloningTotalRemoteBatchesRetrieved
从捐赠者那里检索的文件收件人批次总数。collectionCloningTotalLocalInsertTimeMillis
收件人从捐赠者插入批量文档的总时间,以毫秒为单位。collectionCloningTotalLocalInserts
收件人插入的捐赠者文件批次总数。oplogFetchingTotalRemoteBatchRetrievalTimeMillis
收件人从捐赠者那里检索批量对齐记录条目的总时间,以毫秒为单位。oplogFetchingTotalRemoteBatchesRetrieved
从捐赠者那里检索到的批次操作日志条目收件人总数。oplogFetchingTotalLocalInsertTimeMillis
收件人插入捐赠者批量操作日志条目的总时间,以毫秒为单位。oplogFetchingTotalLocalInserts
受赠者插入的捐赠者批次专栏条目总数。oplogApplyingTotalLocalBatchRetrievalTimeMillis
收件人在检索获取过程中插入的批量操作日志条目的总时间,以毫秒为单位。oplogApplyingTotalLocalBatchesRetrieved
收件人检索的获取过程中插入的操作日志条目批次总数。oplogApplyingTotalLocalBatchApplyTimeMillis
收件人应用批量操作日志条目的总时间,以毫秒为单位。oplogApplyingTotalLocalBatchesApplied
收件人申请的操作日志条目批次总数。
替换的指标
resharding.remainingOperationTimeEstimatedMillis
替换为:
coordinatorAllShardsHighestRemainingOperationTimeEstimatedMillis
coordinatorAllShardsLowestRemainingOperationTimeEstimatedMillis
recipientRemainingOperationTimeEstimatedMillis
重命名指标
countReshardingSuccessful
现在是countSucceeded
countReshardingFailures
现在是countFailed
countReshardingOperations
现在是countStarted
countReshardingCanceled
现在是countCanceled
minShardRemainingOperationTimeEstimatedMillis
现在是coordinatorAllShardsLowestRemainingOperationTimeEstimatedMillis
maxShardRemainingOperationTimeEstimatedMillis
现在是coordinatorAllShardsHighestRemainingOperationTimeEstimatedMillis
resharding.opcounters.insert
现在是insertsApplied
resharding.opcounters.update
现在是updatesApplied
resharding.opcounters.delete
现在是deletesApplied
移除了指标
oplogApplierApplyBatchLatencyMillis
collClonerFillBatchForInsertLatencyMillis
存储引擎
在极少数情况下,由于缓存压力,写入可能会失败。当这种情况发生时,MongoDB会发出TemporarilyUnavailable
错误,并在两个地方增加temporarilyUnavailableErrors
计数器:慢速查询日志和全职诊断数据收集(FTDC)。
多文档事务中的单个操作永远不会返回TemporarilyUnavailable
错误。
通过修改temporarilyUnavailableBackoffBaseMs
和temporarilyUnavailableMaxRetries
参数来调整写重试属性。
$addFields和$set允许空对象作为表达式
从MongoDB 6.1开始,聚合阶段$addFields
和$set
允许您在不使用$literal
表达式的情况下将路径设置为空对象。
审计
MongoDB 6.1添加了以下集群审计事件:
从MongoDB 6.1开始,启动审计事件具有以下结构:
{
originalClusterServerParameter: <original parameter value>,
updatedClusterServerParameter": <new parameter value>
}
有关更多详细信息,请参阅审计事件操作、详细信息和结果。
服务器参数
从MongoDB 6.1开始,MongoDB添加了以下新参数:
temporarilyUnavailableBackoffBaseMs
调整写入失败后重试之间的时间。temporarilyUnavailableMaxRetries
限制写入失败后的重试次数。ldapRetryCount
设置服务器LDAP管理器在网络错误后重试的操作次数。
报告问题
要报告问题,请参阅https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports关于如何为MongoDB服务器或相关项目之一提交JIRA票据的指导。