Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

自管理部署的 MongoDB Server 参数

在此页面上

  • Synopsis
  • 参数
  • 身份验证参数
  • 一般参数
  • 记录参数
  • 诊断参数
  • 复制性和一致性
  • 分片参数
  • 健康管理器参数
  • 存储参数
  • WiredTiger 参数
  • 审核参数
  • 事务参数
  • 基于槽的执行参数

注意

从MongoDB 8.0开始, LDAP身份验证和授权已弃用。 LDAP可用并将在MongoDB 8的整个生命周期内继续运行而不进行更改。 LDAP将在未来的主要发布中删除。

有关详细信息,请参阅 LDAP弃用。

MongoDB 提供许多可以使用以下命令进行设置的配置选项:

  • setParameter命令:

    db.adminCommand( { setParameter: 1, <parameter>: <value> } )
  • setParameter 配置设置:

    setParameter:
    <parameter1>: <value1>
    ...
  • mongodmongos--setParameter 命令行选项:

    mongod --setParameter <parameter>=<value>
    mongos --setParameter <parameter>=<value>

有关其他配置选项,请参阅自管理配置文件选项mongodmongos

authenticationMechanisms

适用于 mongodmongos

指定服务器接受的身份验证机制列表。将其设置为以下一个或多个值。如果指定多个值,请使用逗号分隔的列表,并且不要使用空格。有关身份验证机制的说明,请参阅对自托管部署进行身份验证。

说明
使用 SHA-1 哈希函数的 RFC 5802 标准 Salted 质询响应身份验证机制。
RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism
MongoDB TLS/SSL 证书身份验证。
GSSAPI (Kerberos)
使用 Kerberos 的外部身份验证。此机制仅在 MongoDB Enterprise 中可用。
PLAIN (LDAP SASL)
使用 LDAP 进行外部身份验证。您也可使用 PLAIN 对数据库内用户进行身份验证。PLAIN 以纯文本形式传输密码。此机制仅在 MongoDB Enterprise 中可用。
OpenID Connect 是构建在 OAuth22 之上的身份验证层。此机制仅在 MongoDB Enterprise 中可用。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将 PLAINSCRAM-SHA-256 指定为身份验证机制,使用以下命令:

mongod --setParameter authenticationMechanisms=PLAIN,SCRAM-SHA-256 --auth
awsSTSRetryCount

在版本 7.0 中进行了更改:(也从 6.0.7 和 5.0.18 开始)。

在上一个版本中,仅当服务器返回 HTTP 500 错误时,AWS IAM 身份验证才会重试。

适用于 mongodmongos

类型:整型

默认值:2

适用于使用 AWS IAM 证书AWS IAM 环境变量的 MongoDB 部署。

连接失败后 AWS IAM 身份验证重试的最大次数。

以下示例将 awsSTSRetryCount 设置为 15 次重试:

mongod --setParameter awsSTSRetryCount=15

另外,下面的示例使用了 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, awsSTSRetryCount: 15 } )
clusterAuthMode

适用于 mongodmongos

clusterAuthMode 设置为 sendX509x509滚动升级期间使用 x509 进行成员身份验,以最大限度地减少停机时间。

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

此参数仅在运行时可用。要设置参数,请使用 setParameter 命令。

db.adminCommand( { setParameter: 1, clusterAuthMode: "sendX509" } )
enableLocalhostAuthBypass

适用于 mongodmongos

默认值true

指定 0false,禁用绕过本地主机身份验证。默认启用。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

有关更多信息,请参阅自托管部署中的本地主机异常

enforceUserClusterSeparation

适用于 mongodmongos

设置为false可在配置文件中的clusterAuthModekeyFile时禁用O/OU/DC检查。 这允许拥有成员证书的客户端以$external数据库中存储的用户身份进行身份验证。 如果配置文件中的clusterAuthMode不是keyFile ,则服务器不会启动。

要将enforceUserClusterSeparation参数设置为false ,请在启动期间运行以下命令:

mongod --setParameter enforceUserClusterSeparation=false

如果将enforceUserClusterSeparation参数设置为false ,则服务器不区分应用程序用于进行身份验证的客户端证书和具有特权访问权限的集群内证书。 如果您的clusterAuthModekeyFile ,则此操作无效。 但是,如果clusterAuthModex509 ,则使用允许模式的用户证书将与集群证书合并并授予特权访问权限。

如果执行以下操作,您的现有证书将被授予内部特权:

  1. 使用此参数允许的名称创建一个用户。

  2. enforceUserClusterSeparation参数设置为false

  3. clusterAuthMode 设置为 x509

在未验证是否已删除具有enforceUserClusterSeparation标志允许您创建的提升权限的用户之前,不得从keyFile升级到x509

KeysRotationIntervalSec

默认:7776000 秒(90 天)

指定 HMAC 签名密钥在轮换到下一个之前保持有效的秒数。该参数主要便于身份验证测试。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

ldapForceMultiThreadMode

默认:false

启用并发 LDAP 操作的性能。

注意

仅当您确定 libldap 实例在此模式下可以安全使用时,才可启用此标志。如果您使用的 libldap 版本非安全线程,您可能会遇到 MongoDB 进程崩溃。

必须使用 ldapForceMultiThreadMode 才能使用 LDAP 连接池。要启用 LDAP 连接池,请将 ldapForceMultiThreadModeldapUseConnectionPool 设置为 true

提示

如果您对 MongoDB 版本、OS 版本或 libldap 版本有任何疑问,请联系 MongoDB 支持。

ldapQueryPassword

适用于 mongodmongos

类型:字符串

用于绑定到 LDAP 服务器的密码。您必须使用 ldapQueryUser 与此参数。

如果未设置,mongod 或 mongos 不会尝试绑定到 LDAP 服务器。

ldapQueryUser

适用于 mongodmongos

类型:字符串

绑定到 LDAP 服务器的用户。您必须使用 ldapQueryPassword 与此参数。

如果未设置,mongod 或 mongos 不会尝试绑定到 LDAP 服务器。

ldapRetryCount

6.1 版本新增内容

适用于 mongodmongos

类型:整型

默认值:0

对于在自托管部署上使用 LDAP 授权的 MongoDB 部署。

在出现网络错误后服务器 LDAP 管理器重试的操作数。

例如,以下代码将 ldapRetryCount 设置为 3 秒:

mongod --ldapRetryCount=3

或者,如果使用 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, ldapRetryCount: 3 } )
ldapUserCacheInvalidationInterval

在 5.2 版本中进行了更改

仅适用于 mongod

注意

从 MongoDB 5.2 开始,从 LDAP 服务器检索的缓存用户信息的更新间隔取决于 ldapShouldRefreshUserCacheEntries

用于在自托管部署上使用 LDAP 授权的 MongoDB 部署。

mongod 实例在外部用户缓存刷新之间的等待间隔(以秒为单位)。MongoDB 刷新外部用户缓存后,下次 LDAP 授权用户发出操作时,MongoDB 会从 LDAP 服务器重新获取授权数据。

增加指定的值会增加 MongoDB 和 LDAP 服务器不同步的时间,但会减少 LDAP 服务器的负载。相反,减少指定的值会减少 MongoDB 和 LDAP 服务器不同步的时间,但会增加 LDAP 服务器的负载。

默认为 30 秒。

ldapUserCacheRefreshInterval

5.2 版本中的新增功能

仅适用于 mongod

类型:整型

默认:30 秒

注意

从 MongoDB 5.2 开始,从 LDAP 服务器检索的缓存用户信息的更新间隔取决于 ldapShouldRefreshUserCacheEntries

对于在自托管部署上使用 LDAP 授权的 MongoDB 部署。

mongod 在刷新 LDAP 服务器缓存的用户信息之前等待的时间间隔(以秒为单位)。

最大间隔为 86,400 秒(24 小时)。

例如,以下代码将 ldapUserCacheRefreshInterval 设置为 4000 秒:

mongod --setParameter ldapUserCacheRefreshInterval=4000

或者,如果使用 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, ldapUserCacheRefreshInterval: 4000 } )
ldapUserCacheStalenessInterval

5.2 版本中的新增功能

仅适用于 mongod

类型:整型

默认值:90 秒

对于在自托管部署上使用 LDAP 授权的 MongoDB 部署。

上次刷新缓存后,mongod 保留已缓存的 LDAP 用户信息的时间间隔(以秒为单位)。

如果超过 ldapUserCacheStalenessInterval 秒没有成功刷新 LDAP 服务器的用户信息,那么 mongod

  • 使已缓存 LDAP 用户信息无效。

  • mongod 连接到 LDAP 服务器并授权 LDAP 用户之前,无法对 LDAP 用户的新会话进行身份验证。

  • 如果 mongod 无法连接到 LDAP 服务器,则授权使用此前经过身份验证的 LDAP 用户的任何现有会话。当 mongod 重新连接到 LDAP 服务器时,mongod 可确保 LDAP 用户获得正确授权。

最大间隔为 86,400 秒(24 小时)。

例如,以下代码将 ldapUserCacheStalenessInterval 设置为 4000 秒:

mongod --setParameter ldapUserCacheStalenessInterval=4000

或者,如果使用 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, ldapUserCacheStalenessInterval: 4000 } )
ldapUseConnectionPool

指定在连接 LDAP 服务器进行身份验证/授权时,MongoDB 是否应使用连接池化。

MongoDB 使用以下默认值:

  • 在 Windows 上为 true。

  • 在 Linux 上运行为 true:MongoDB Enterprise 二进制文件链接到 libldap_r

  • 在 Linux 上运行为 false:MongoDB Enterprise 二进制文件链接到 libldap

您只能在启动期间设置 ldapUseConnectionPool,但无法使用 setParameter 数据库命令更改此设置。

ldapConnectionPoolUseLatencyForHostPriority

默认值:true

一个布尔值,用于确定 LDAP 连接池(请参阅 ldapUseConnectionPool)是否应使用 LDAP 服务器的延迟来确定连接顺序(从最低延迟到最高延迟)。

您只能在启动期间设置 ldapConnectionPoolUseLatencyForHostPriority,并且不能在运行时使用 setParameter 数据库命令更改此设置。

ldapConnectionPoolMinimumConnectionsPerHost

默认值:1

保持向 LDAP 服务器开放的最小连接数。

您只能在启动期间设置 ldapConnectionPoolMinimumConnectionsPerHost,并且不能在运行时使用 setParameter 数据库命令更改此设置。

ldapConnectionPoolMaximumConnectionsPerHost

从 MongoDB 版本 5.0.9 和 6.0.0 开始已更改 将默认值更改为 2147483647。在之前的版本中,默认值未设置。

默认值:2147483647

保持向 LDAP 服务器开放的最大连接数。

您只能在启动期间设置 ldapConnectionPoolMaximumConnectionsPerHost,并且不能在运行时使用 setParameter 数据库命令更改此设置。

ldapConnectionPoolMaximumConnectionsInProgressPerHost

从 MongoDB 版本 5.0.9 和 6.0.0 开始已更改 将默认值更改为 2。在之前的版本中,默认值未设置。

默认值:2

每个 LDAP 服务器正在进行的连接操作的最大数量。

您只能在启动期间设置 ldapConnectionPoolMaximumConnectionsInProgressPerHost,但无法使用 setParameter 数据库命令更改此设置。

ldapConnectionPoolHostRefreshIntervalMillis

默认值:60000

LDAP 连接池中进行运行状况检查之间的毫秒数。

您只能在启动期间设置 ldapConnectionPoolHostRefreshIntervalMillis,但无法使用 setParameter 数据库命令更改此设置。

ldapConnectionPoolIdleHostTimeoutSecs

默认值:300

连接到 LDAP 服务器的池连接在关闭前保持空闲状态的最大秒数。

您只能在启动期间设置 ldapConnectionPoolIdleHostTimeoutSecs,但无法使用 setParameter 数据库命令更改此设置。

ldapShouldRefreshUserCacheEntries

5.2 版本中的新增功能

仅适用于 mongod

类型:布尔值

默认值:true

对于在自托管部署上使用 LDAP 授权的 MongoDB 部署。

从 MongoDB 5.2 开始,从 LDAP 服务器检索的缓存用户信息的更新间隔取决于 ldapShouldRefreshUserCacheEntries

您只能在启动期间在 configuration file 中或使用命令行上的 --setParameter 选项设置 ldapShouldRefreshUserCacheEntries。例如,以下命令禁用 ldapShouldRefreshUserCacheEntries

mongod --setParameter ldapShouldRefreshUserCacheEntries=false
maxValidateMemoryUsageMB

版本 5.0 中的新增功能

默认值:200

validate 命令的最大内存使用限制(以兆字节为单位)。如果超出限制,validate 会返回尽可能多的结果,并警告由于内存限制,可能无法报告所有损坏。

此参数在运行时和启动时均可用:

oidcIdentityProviders

版本8.0中的更改:(同样适用于7.3和7.0版本)

在使用 OpenID Connect 身份验证时,请通过此参数指定身份提供商 (IDP) 配置。

oidcIdentityProviders 接受由零个或多个身份提供者 (IDP) 配置组成的数组。空数组(默认值)表示未启用 OpenID Connect 支持。

当定义了多个 IDP 时, oidcIdentityProviders将使用matchPattern字段选择一个 IDP。数组顺序决定了优先级,并且始终选择第一个 IDP。

从MongoDB 8.0开始,定义多个身份提供程序 (IDP) 时,只要每个颁发者的audience值是唯一的, oidcIdentityProviders参数就会接受重复的issuer值。 7.3和7版本中也提供此功能。 0 。

字段
必要性
类型
说明
issuer
必需
字符串

服务器应接受其令牌的 IDP 颁发者 URI。必须与用于身份验证的任何 JWT 中的 iss 字段匹配。

从MongoDB 8.0开始,定义多个身份提供程序 (IDP) 时,只要每个颁发者的audience值是唯一的, oidcIdentityProviders参数就会接受重复的issuer值。 7.3和7版本中也提供此功能。 0 。

如果指定无法访问的颁发者 URI,MongoDB:

  1. 记录警告。

  2. 继续服务器启动,允许您更新发布者 URI。

  3. 重新尝试联系签发者。如果 MongoDB 到达签发者 URI 并验证访问令牌,则身份验证成功。如果仍无法访问签发者 URI,则身份验证失败。

版本8.0中的更改:(同样适用于7.3和7.0版本)

authNamePrefix
必需
字符串

唯一前缀,适用于授权中使用的每个生成的 UserNameRoleNameauthNamePrefix 只能包含以下字符:

  • 字母数字字符(az09 的组合)

  • 连字符 (-)

  • 下划线 (_)

matchPattern
可选的
字符串

正则表达式模式,用于确定应使用哪个 IDP。 matchPattern 与用户名匹配。数组顺序将决定优先级,并且始终选择第一个 IDP。

matchPattern 在某些配置中是必需的,这取决于用户如何设置 supportsHumanFlows

  • 当只有一个 IdP 将 supportsHumanFlows 设置为 true(默认值)时,matchPatterns 为可选项。

  • 当多个 IdP 将 supportsHumanFlows 设置为 true(默认值)时,每个 IdP 都需要 matchPatterns

  • matchPatterns 对于 supportsHumanFlows 设置为 false 的任何 IdP,均为可选项。

这不是一种安全机制。matchPattern 仅作为对客户端的警告。MongoDB 可接受由主体名称与此模式不匹配的 IDP 颁发的令牌。

clientId
可选的
字符串

IDP 提供的 ID,用于识别接收访问令牌的客户端。

supportsHumanFlows 设置为 true(默认值)时为必填项。

audience
必需
字符串

指定访问令牌要用于哪个应用程序或服务。

从 MongoDB 7开始。 0 ,只能为 OIDC 访问令牌指定一个audience oidcIdentityProviders 字段。包含空数组或包含多个字符串的数组的audience字段无效。

如果定义了多个 IDP,则对于共享issuer的每个配置,这必须是唯一值。

requestScopes
Optional
array[ string ]
MongoDB 向 IDP 请求的权限和访问级别。
principalName
Optional
字符串

从包含 MongoDB 用户标识符的访问令牌中提取的声明。

默认值为 sub(代表 subject)。

useAuthorizationClaim
Optional
布尔

确定是否需要authorizationClaim 。 默认值为true

如果 useAuthorizationClaim 字段设置为 true,则服务器要求身份提供商的配置为 authorizationClaim。此为默认行为。

如果 useAuthorizationClaim 字段设置为 false,则 authorizationClaim 字段为可选字段(如果已提供,则忽略)。服务器会改为执行以下操作:

  • 在令牌中搜索名称在 principalNameClaim 字段中列出的声明。通常命名为 sub。例如:

    sub: "spencer.jackson@example.com"

  • 通过连接 authNamePrefix、正斜杠 (/) 和访问令牌中由 principalNameClaim 标识的声明内容来构造内部用户名。例如,authNamePrefix 字段值为 "mdbinc" 时,内部用户名为:

    mdbinc/spencer.jackson@example.com

  • 查找具有此用户名的用户,并为客户端授权以下角色:

    { user: "mdbinc/spencer.jackson@example.com",
    db: "$external" }

7.2 版本新增:(7.0.5 中也提供

authorizationClaim
可选的
字符串

除非将 useAuthorizationClaim 设置为 false,否则为必填项。

从包含 MongoDB 角色名称的访问令牌中提取的声明。

logClaims
Optional
array[ string ]
完成身份验证后将包含在日志和审核消息中的访问令牌声明列表。
JWKSPollSecs
Optional
整型

向 IDP 请求更新的 JSON Web 密钥集 (JWKS) 的频率(以秒为单位)。设置为 0 将禁用轮询。

如果定义了多个 IDP,则对于共享issuer的每项配置,该值必须相同。

supportsHumanFlows
Optional
bool

OIDC 提供商是否支持人工或机器工作流程。这会影响 clientIdmatchPattern 字段。

您可能会发现,通过机器工作负载 IdP 将此字段设置为false 非常有用,这样就可以在不需要时省略 clientId

默认值:true

版本 7.2 中的新增内容

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

ocspEnabled

适用于 Linux 和 macOS。

默认值:true

启用或禁用 OCSP 的标志。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,以下命令禁用 OCSP:

mongod --setParameter ocspEnabled=false ...

从 MongoDB 6.0 开始,如果在初始同步期间将 ocspEnabled 设置为 true,那么所有节点必须能够访问 OCSP 响应程序。

如果节点在 STARTUP2 状态下发生故障,则将 tlsOCSPVerifyTimeoutSecs 设置为小于 5 的值。

提示

另请参阅:

ocspValidationRefreshPeriodSecs

适用于 Linux。

刷新装订的 OCSP 状态响应之前等待的秒数。指定一个大于或等于 1 的数字。

您只能在启动期间在 configuration file 中设置 ocspValidationRefreshPeriodSecs,或使用命令行上的 --setParameter 选项设置。例如,以下代码将该参数设置为 3600 秒:

mongod --setParameter ocspValidationRefreshPeriodSecs=3600 ...

从 MongoDB 5.0 开始,rotateCertificates 命令和 db.rotateCertificates() 方法也会刷新任何已装订 OCSP 响应。

opensslCipherConfig

仅适用于 Linux

在使用原生 TLS/SSL 库时,Linux/BSD 支持参数 opensslCipherConfig,而 Windows 和 macOS 不再支持该参数。

使用 TLS/SSL 加密时指定 OpenSSL 的密码字符串。有关密码字符串的列表,请参阅 https://www.openssl.org/docs/man1.1.1/man1/ciphers.html。可以采用冒号分隔的列表形式提供多个密码字符串。

注意

此参数仅适用于 TLS 1.2 及更早版本。要指定与 TLS 1.3 一起使用的密码套件,请使用 opensslCipherSuiteConfig 参数。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

优先使用 TLS 选项而非 SSL 选项。TLS 选项与 SSL 选项功能相同。以下示例使用 opensslCipherConfig 的密码字符串 'HIGH:!EXPORT:!aNULL@STRENGTH' 配置 mongod

mongod --setParameter opensslCipherConfig='HIGH:!EXPORT:!aNULL@STRENGTH' --tlsMode requireTLS --tlsCertificateKeyFile Certs/server.pem
opensslCipherSuiteConfig

版本 5.0 中的新增功能

仅适用于 Linux

指定 OpenSSL 在使用 TLS 1.3 加密时应允许的受支持的密码套件列表。

有关与 TLS 1.3 一起使用的密码套件列表,请参阅 https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_cipher_list.html。可以采用冒号分隔的列表形式提供多个密码套件。

注意

此参数仅适用于 TLS 1.3。要指定用于 TLS 1.2 或更早版本的密码字符串,请使用 opensslCipherConfig 参数。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,以下代码使用 'TLS_AES_256_GCM_SHA384'opensslCipherSuiteConfig 密码套件配置 mongod 与 TLS 1.3 一起使用:

mongod --setParameter opensslCipherSuiteConfig='TLS_AES_256_GCM_SHA384' --tlsMode requireTLS --tlsCertificateKeyFile Certs/server.pem
opensslDiffieHellmanParameters

仅适用于 Linux

使用 TLS 1.2 或更早版本时,指定包含 OpenSSL Diffie-Hellman 参数的 PEM 文件的路径。指定 OpenSSL Diffie-Hellman 参数可在 TLS/SSL 加密期间支持临时 Diffie-Hellman (DHE) 密码套件。

不支持将此参数与 TLS 1.3 一起使用。

临时 Diffie-Hellman (DHE) 密码套件(和临时椭圆曲线 Diffie-Hellman (ECDHE) 密码套件)提供前向保密前向保密密码套件创建一个临时会话密钥,该密钥受服务器私钥保护但从未传输。这确保即使服务器的私钥被泄露,您也无法使用泄露的密钥解密过去的会话。

注意

如果未设置 opensslDiffieHellmanParameters 但启用了 ECDHE,则 MongoDB 会使用 ffdhe3072 Diffie-Hellman 参数启用 DHE,如 RFC-7919#appendix-A.2 中所定义。ffdhe3072 是一个强参数(具体来说,大小大于 1024)。Java 6 和 7 不支持强参数,除非从 Oracle 购买了扩展支持。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

如果出于性能考虑,需要禁用对 DHE 密码套件的支持,则使用 opensslCipherConfig 参数:

mongod --setParameter opensslCipherConfig='HIGH:!EXPORT:!aNULL:!DHE:!kDHE@STRENGTH' ...
saslauthdPath

适用于 mongodmongos

注意

仅适用于 MongoDB Enterprise(适用于 Windows 的 MongoDB Enterprise 除外)。

指定用于代理身份验证的 saslauthd 实例的 Unix 域套接字的路径。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

saslHostName

适用于 mongodmongos

saslHostName 覆盖 MongoDB 的默认主机名检测,以配置 SASL 和 Kerberos 身份验证。

saslHostName 不会出于任何目的影响 mongodmongos 实例的主机名,但配置 SASL 和 Kerberos 除外。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

注意

saslHostName 支持 Kerberos 身份验证,并且仅包含在 MongoDB Enterprise 中。有关详细信息,请参阅以下:

saslServiceName

适用于 mongodmongos

允许用户在每个实例的基础上覆盖 Kerberos 主名称的默认 Kerberos 服务名称组件。如果未指定,则默认值为 mongodb

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

saslServiceName 仅在 MongoDB Enterprise 中可用。

重要

确保您的驱动程序支持备用服务名称。

scramIterationCount

适用于 mongodmongos

默认值10000

更改用于所有新的 SCRAM-SHA-1 密码的哈希迭代次数。更多的迭代次数会增加客户端向 MongoDB 进行身份验证所需的时间,但会使密码不易受到暴力攻击。默认值适用于最常见的使用案例和要求。

如果修改此值,它不会更改现有密码的迭代计数。scramIterationCount 值必须为 5000 或更大。

此参数在运行时和启动时均可用:

例如,以下代码将 scramIterationCount 设置为 12000

mongod --setParameter scramIterationCount=12000

或者,如果使用 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, scramIterationCount: 12000 } )
scramSHA256IterationCount

适用于 mongodmongos

默认值15000

更改用于所有新的 SCRAM-SHA-256 密码的哈希迭代次数。更多的迭代次数会增加客户端向 MongoDB 进行身份验证所需的时间,但会使密码不易受到暴力攻击。默认值适用于最常见的使用案例和要求。

如果修改此值,它不会更改现有密码的迭代计数。scramSHA256IterationCount 值必须为 5000 或更大。

此参数在运行时和启动时均可用:

例如,以下代码将 scramSHA256IterationCount 设置为 20000

mongod --setParameter scramSHA256IterationCount=20000

或者,如果使用 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, scramSHA256IterationCount: 20000 } )
sslMode

适用于 mongodmongos

net.ssl.mode 设置为 preferSSLrequireSSL。在滚动升级到 TLS/SSL 期间很有用,可最大限度地减少停机时间。

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

此参数仅在运行时可用。要设置参数,请使用 setParameter 命令。

db.adminCommand( { setParameter: 1, sslMode: "preferSSL" } )

提示

另请参阅:

tlsMode

适用于 mongodmongos

设置为:

  • preferTLS

  • requireTLS

tlsMode 参数在滚动升级到 TLS/SSL 期间非常有用,可最大限度地减少停机时间。

此参数仅在运行时可用。要设置参数,请使用 setParameter 命令。

db.adminCommand( { setParameter: 1, tlsMode: "preferTLS" } )

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

提示

另请参阅:

tlsClusterAuthX509Override

7.0 版本中的新增功能

覆盖 clusterAuthX509 配置选项。

setParameter:
tlsClusterAuthX509Override: { attributes: O=MongoDB, OU=MongoDB Server }

该参数支持 attributesextensionValue 覆盖项。

当服务器验证来自成员的连接时,它会分析 X.509 证书以确定其是否属于集群成员。如果服务器使用 attributes 设置或 tlsClusterAuthX509Override 参数上的 attributes 字段,它会检查证书的标识名 (DN) 值。如果设置了 extensionValue 设置或 tlsClusterAuthX509Override 参数的 extensionValue 字段,它会检查证书的扩展值。如果它找到了匹配项,便会授权该连接为对等互连。

当新证书具有不同的属性或扩展名值时,使用此参数可以轮换证书。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

tlsOCSPStaplingTimeoutSecs

适用于 Linux。

mongod/mongos 实例等待接收其证书的 OCSP 状态响应的最大秒数。

指定一个大于或等于 (>=) 1 的整数。如果未设置,tlsOCSPStaplingTimeoutSecs 将使用 tlsOCSPVerifyTimeoutSecs 值。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,以下代码将 tlsOCSPStaplingTimeoutSecs 设置为 20 秒:

mongod --setParameter tlsOCSPStaplingTimeoutSecs=20 ...
tlsOCSPVerifyTimeoutSecs

适用于 Linux 和 Windows。

默认值:5

mongod/mongos 在验证服务器证书时应等待 OCSP 响应的最大秒数。

指定一个大于或等于 (>=) 1 的整数。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,以下代码将 tlsOCSPVerifyTimeoutSecs 设置为 20 秒:

mongod --setParameter tlsOCSPVerifyTimeoutSecs=20 ...
tlsUseSystemCA

仅适用于 mongod

类型:布尔值

默认:false

指定 MongoDB 是否加载已提供给操作系统的证书颁发机构的 TLS 证书。

重要

在启动启用了 TLS/SSLmongod 实例时,您必须指定 --tlsCAFile 标记、net.tls.CAFile 配置选项或 tlsUseSystemCA 参数的值。

--tlsCAFiletls.CAFiletlsUseSystemCA 是互斥的。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将 tlsUseSystemCA 设置为 true

mongod --setParameter tlsUseSystemCA=true

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

tlsWithholdClientCertificate

适用于 mongodmongos

默认:false

可通过 --tlsClusterFile 选项或在 --tlsClusterFile 未设置时通过 --tlsCertificateKeyFile 选项为 mongodmongos 设置 TLS 证书。如果已设置 TLS 证书,默认情况下,实例会在与部署中其他 mongodmongos 实例启动集群内通信时发送证书。将 tlsWithholdClientCertificate 设置为 1true 以指示实例在这些通信期间拒绝发送其 TLS 证书。在部署的所有成员上将此选项与 --tlsAllowConnectionsWithoutCertificates 一起使用(以允许没有证书的入站连接)。tlsWithholdClientCertificate--clusterAuthMode x509 互斥。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

tlsX509ClusterAuthDNOverride

适用于 mongodmongos

实例还可以使用的用于识别部署成员的可分辨名称 (DN)。

对于使用 x.509 证书进行 clusterAuthMode 的 MongoDB 部署,部署成员在集群内通信期间使用 x.509 证书(net.tls.clusterFile(如指定)和 net.tls.certificateKeyFile)相互识别。对于相同部署的成员,其证书中的 DN 必须具有相同的组织属性 (O)、组织单位属性 (OU) 和域组件 (DC)。

如果为某个成员设置了 tlsX509ClusterAuthDNOverride,则该成员还可以在比较所提供证书的 DN 组件(OOUDC)时可使用覆盖值。也就是说,成员对照其 net.tls.clusterFile/net.tls.certificateKeyFile 检查所提供的证书。如果 DN 不匹配,成员会对照 tlsX509ClusterAuthDNOverride 值检查所提供的证书。

注意

如设置,则必须在部署的所有成员上设置此参数。

此参数在运行时和启动时均可用:

您可以使用此参数将证书滚动更新为包含新的DN值的新证书。请参阅x 的滚动更新。 509在自管理集群上包含新 DN 的证书。

有关会员证书要求的更多信息,请参阅会员证书要求了解详情。

tlsX509ExpirationWarningThresholdDays

适用于 mongodmongos

默认值:30

如果所提供的 x.509 证书在 mongod/mongos 系统时钟的 30 天内过期,则 mongod/mongos 会记录连接警告。使用 tlsX509ExpirationWarningThresholdDays 参数控制证书过期警告阈值:

  • 增加参数值以在证书到期日期之前触发警告。

  • 减小参数值可在接近证书到期日期时触发警告。

  • 将参数设置为 0 以禁用警告。

该参数的最小值为 0

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

有关 x.509 证书有效性的更多信息,请参阅 RFC 5280 4.1.2.5.

userCacheInvalidationIntervalSecs

仅适用于 mongos

默认值:30

mongos 实例上,指定 mongos 实例检查以确定用户对象的内存缓存是否有过时数据的间隔(以秒为单位),如有,则清除缓存。如果用户对象没有任何更改,则 mongos 将不会清除缓存。

此参数的最小值为 1 秒,最大值为 86400 秒(24 小时)。

此参数在运行时和启动时均可用:

authFailedDelayMs

适用于 mongodmongos

默认值:0

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

通知客户端其身份验证尝试失败之前等待的毫秒数。该参数范围介于 05000 之间(含)。

设置此参数会使对数据库暴力登录攻击更加耗时。但是,等待 MongoDB Server 响应的客户端仍然会消耗服务器资源,并且如果服务器同时拒绝对多个其他客户端的访问,这可能会对良性登录尝试产生不利影响。

allowRolesFromX509Certificates

适用于 mongodmongos

默认值:true

一个布尔标志,允许或禁止从客户端 x.509 证书检索授权角色。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

allowDiskUseByDefault

仅适用于 mongod

默认:真

从 MongoDB 6开始。 0 ,需要超过100 MB 内存才能执行的管道阶段,默认会将临时文件写入磁盘。这些临时文件在管道执行期间持续存在,可能会影响实例上的存储空间。在 MongoDB 的早期版本中,您必须将{ allowDiskUse: true }传递给各个findaggregate命令才能启用此行为。

单个findaggregate命令可以通过以下任一方式覆盖allowDiskUseByDefault参数:

  • 使用 { allowDiskUse: true } 以允许在 allowDiskUseByDefault 设置为 false 时将临时文件写入磁盘

  • 使用 { allowDiskUse: false } 以禁止在 allowDiskUseByDefault 设置为 true 时将临时文件写入磁盘

此参数在运行时和启动时均可用:

mongod --setParameter allowDiskUseByDefault=false

allowDiskUseByDefault 仅适用于 mongod,不适用于 mongosmongos 从不将临时文件写入磁盘。在连接至正在运行的 mongodmongosh 会话中使用 setParameter 命令,以在服务器正在运行时更改参数的值:

db.adminCommand(
{
setParameter: 1,
allowDiskUseByDefault: false
}
)
httpVerboseLogging

适用于 mongodmongos

在 Linux 和 macOS 上为 curl 添加了更详细的跟踪。对 Windows 没有影响。

默认情况下,该参数未设置。

此参数在运行时和启动时均可用:

mongos --setParameter httpVerboseLogging=true
slowConnectionThresholdMillis

6.3 版本中的新功能

适用于 mongodmongos

默认值:100

设置时间限制(以毫秒为单位),以记录服务器慢速连接的建立。

如果建立连接的时间比 slowConnectionThresholdMillis 参数长,则会在日志中添加一个事件,并将消息 msg 字段设置为 "Slow connection establishment"

此参数在运行时和启动时均可用:

以下示例将 slowConnectionThresholdMillis 设置为 250 毫秒。

mongod --setParameter slowConnectionThresholdMillis=250

或者,如果使用 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, slowConnectionThresholdMillis: 250 } )
connPoolMaxConnsPerHost

适用于 mongodmongos

默认值:200

为传出连接至全局连接池的其他 mongod 实例设置旧版连接池的最大大小。池的大小不会阻止创建额外的连接,但阻止连接池保留超过 connPoolMaxConnsPerHost 值的连接。

注意

该参数与 TaskExecutor 池中的连接分开。请参阅 ShardingTaskExecutorPoolMaxSize

当您的驱动程序不使用连接池且您在分片集群的环境下使用身份验证时,才调整此设置。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

mongod --setParameter connPoolMaxConnsPerHost=250
connPoolMaxInUseConnsPerHost

适用于 mongodmongos

为传出连接至传统全局连接中的其他 mongod 实例设置给定时间内正在使用的最大连接数。

默认情况下,该参数未设置。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

mongod --setParameter connPoolMaxInUseConnsPerHost=100

提示

另请参阅:

globalConnPoolIdleTimeoutMinutes

适用于 mongodmongos

设置传统全局连接池中的连接在关闭之前可以保持空闲状态的时间限制。

默认情况下,该参数未设置。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

mongos --setParameter globalConnPoolIdleTimeoutMinutes=10
cursorTimeoutMillis

适用于 mongodmongos

默认值:600000(10 分钟)

设置在 MongoDB 删除空闲游标之前的过期阈值(以毫秒为单位);具体来说,MongoDB 会删除在以下指定的 cursorTimeoutMillis 时间内处于空闲状态的游标。

此参数在运行时和启动时均可用:

例如,以下代码将 cursorTimeoutMillis 设置为 300000 毫秒(5 分钟)。

mongod --setParameter cursorTimeoutMillis=300000

或者,如果使用 mongosh 中的 setParameter 命令:

db.adminCommand( { setParameter: 1, cursorTimeoutMillis: 300000 } )

cursorTimeoutMillis 设置为小于或等于 0 会导致所有游标立即符合超时条件。通常,超时值应大于查询返回结果的平均时间。使用诸如 cursor.explain() 游标修饰符等工具分析平均查询时间并选择适当的超时时间。

警告

MongoDB 会清理链接到会话的孤立游标,作为会话管理的一部分。也就是说,拥有会话 ID 的孤立游标不使用 cursorTimeoutMillis 控制超时。

对于返回游标且空闲时间长于 localLogicalSessionTimeoutMinutes 的操作,使用 Mongo.startSession() 在显示会话中执行该操作。要刷新会话,请运行 refreshSessions 命令。有关详细信息,请参阅使用 refreshSessions 刷新游标

maxNumActiveUserIndexBuilds

仅适用于 mongod

类型:整型

默认值:3

设置主节点上允许并发索引的最大构建次数。这是适用于所有集合的全局限制。

增加 maxNumActiveUserIndexBuilds 的值允许构建额外的并发索引,但这会增加 WiredTiger 缓存的压力。

系统索引不限于 maxNumActiveUserIndexBuilds,但是系统索引构建将计入用户索引构建的限制。

服务器达到 maxNumActiveUserIndexBuilds 后,会阻止构建额外的用户索引,直到并发索引构建的数量低于 maxNumActiveUserIndexBuilds 限制。如果索引构建被阻止,则服务器会记录此消息:

Too many index builds running simultaneously, waiting until the
number of active index builds is below the threshold.

此参数在运行时和启动时均可用:

以下命令设置同时进行索引构建的个数上限为 4:

db.adminCommand( { setParameter: 1, maxNumActiveUserIndexBuilds: 4 } )

另请参阅:

notablescan

仅适用于 mongod

指定是否所有查询都必须使用索引。若为 1,MongoDB 将不会执行需要集合扫描的查询,并将返回错误。

考虑以下将 notablescan 设置为 1 或 true 的示例:

db.adminCommand( { setParameter: 1, notablescan: 1 } )

notablescan 设置为 1 可用于测试应用程序查询,例如,用于识别扫描整个集合且不能使用索引的查询。

如要在没有 notablescan 的情况下检测未编制索引的查询,请考虑阅读分析查询性能优化查询性能部分,并使用 logLevel参数、mongostat分析。

不要使用 notablescan 运行生产 mongod 实例,因为阻止集合扫描可能会影响所有数据库中的查询,包括管理查询。

此参数在运行时和启动时均可用:

注意

notablescan 不允许使用集群索引的无界查询,因为这些查询需要完整的集合扫描。有关更多信息,请参阅集合扫描

ttlMonitorEnabled

仅适用于 mongod

默认值true

为了支持 TTL 索引,为 mongod 实例配备一个后台线程,负责从带有 TTL 索引的集合中删除文档。

此参数在运行时和启动时均可用:

要为 mongod 禁用此工作线程,请将 ttlMonitorEnabled 设置为 false,如以下操作所示:

db.adminCommand( { setParameter: 1, ttlMonitorEnabled: false } )

或者,你可以在启动时通过使用以下选项启动 mongod 实例来禁用线程:

mongod --setParameter ttlMonitorEnabled=false

重要

切勿在禁用 ttlMonitorEnabled 的情况下运行生产 mongod 实例,除非有 MongoDB 支持部门的指导。阻止 TTL 文档删除可能会对 MongoDB 内部系统操作产生负责影响,这些操作依赖于 TTL 索引。

tcpFastOpenServer

适用于 mongodmongos

默认值true

能够支持接受来自客户端到 mongod/mongos 的入站 TCP 快速打开 (TFO) 连接。TFO 需要客户端和 mongod/mongos 主机支持并启用 TFO:

Windows

以下 Windows 操作系统支持 TFO:

  • Microsoft Windows Server 2016 及更高版本。

  • Microsoft Windows 10 更新 1607 及更高版本。

macOS
macOS 10.11 (El Capitan) 及更高版本支持 TFO。
Linux

运行 Linux Kernel 3.7 或更高版本 Linux 操作系统可以支持入站 TFO。

设置 /proc/sys/net/ipv4/tcp_fastopen 的值以启用入站 TFO 连接:

  • 设置为 2 以仅启用入站 TFO 连接。

  • 设置为 3 以启用入站和出站 TFO 连接。

如果主机操作系统不支持未配置为支持 TFO 连接,则此参数无效。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

提示

另请参阅:

tcpFastOpenClient

适用于 mongodmongos

默认值true

仅 Linux 操作系统

能够支持从 mongod/mongos 到客户端的出站 TCP 快速打开 (TFO) 连接。TFO 需要客户端和 mongod/mongos 主机支持并启用 TFO。

运行 Linux Kernel 4.11 或更高版本的 Linux 操作系统可以支持出站 TFO。

设置 /proc/sys/net/ipv4/tcp_fastopen 的值以启用出站 TFO 连接:

  • 1 只能启用出站 TFO 连接。

  • 3 启用入站和出站 TFO 连接。

如果主机操作系统不支持未配置为支持 TFO 连接,则此参数无效。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

提示

另请参阅:

tcpFastOpenQueueSize

适用于 mongodmongos

默认值1024

作为建立 TCP 快速打开 (TFO) 连接的一部分,客户端会在完成标准 TCP 3 次握手之前mongod/mongos 提交有效的 TFO cookie。mongod/mongos 保留所有此类待处理 TFO 连接的队列。

tcpFastOpenQueueSize 参数可设置待处理 TFO 连接的队列大小。当队列已满时,mongod/mongos 会回退到对传入客户端请求的正常三次握手,并忽略 TFO cookie 的存在。一旦队列大小回落到限制以下,mongod/mongos 就会开始接受新的 TFO cookie。

  • 增加默认队列大小可能会改善 TFO 对网络性能的影响。然而,队列大小较大也会增加由于传入的 TFO 请求而导致服务器资源耗尽的风险。

  • 减小默认队列大小可以降低由于过多传入 TFO 请求而导致资源服务器资源耗尽的风险。然而,较小的队列大小也可能会降低 TFO 对网络性能的影响。

    最小队列大小为 00 的队列有效禁用 TFO。

此参数对不支持TFO 连接或未配置 TFO 连接的托管操作系统没有影响。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

disableJavaScriptJIT

仅适用于 mongod

MongoDB JavaScript 引擎使用 SpiderMonkey,实施即时 (JIT) 编译以提高运行脚本时的性能。

此参数在运行时和启动时均可用:

要启用 JIT,请将 disableJavaScriptJIT 设置为 false,如以下示例所示:

db.adminCommand( { setParameter: 1, disableJavaScriptJIT: false } )

注意

$where 将重复使用现有 JavaScript 解释程序上下文,因此对 disableJavaScriptJIT 的更改可能不会立即对这些操作生效。

或者,您可以在启动时通过使用以下选项启动 mongod 实例来启用 JIT:

mongod --setParameter disableJavaScriptJIT=false
indexBuildMinAvailableDiskSpaceMB

版本 7.1 中的新增内容

仅适用于 mongod

默认:500 MB

设置索引构建所需的最小可用磁盘空间(以 MB 为单位)。

必须大于或等于 0 MB,且小于或等于 8 TB。 0 禁用最小磁盘空间要求。

如果可用磁盘空间低于indexBuildMinAvailableDiskSpaceMB ,则无法启动新的索引构建,并且当前的索引构建将被取消。

警告

如果增加indexBuildMinAvailableDiskSpaceMB ,请确保服务器有足够的可用磁盘空间。 此外,如果将indexBuildMinAvailableDiskSpaceMB设置得太高,则可能会不必要地阻止索引构建,而此时有足够的可用磁盘空间并且indexBuildMinAvailableDiskSpaceMB可以设置得较低。

此参数在运行时和启动时均可用:

以下示例将indexBuildMinAvailableDiskSpaceMB设置为650 MB:

db.adminCommand( { setParameter: 1, indexBuildMinAvailableDiskSpaceMB: 650 } )

您也可以在初创企业设置indexBuildMinAvailableDiskSpaceMB 。例如:

mongod --setParameter indexBuildMinAvailableDiskSpaceMB=650
indexMaxNumGeneratedKeysPerDocument

5.3 版本中的新增功能

默认值:100000

限制为文档生成的最大键数,以防止出现内存不足错误。可以提高限制,但是如果某个操作需要的键数超过 indexMaxNumGeneratedKeysPerDocument 参数指定的键数,则操作将失败。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

maxIndexBuildMemoryUsageMegabytes

默认值:200

限制在索引构建期间,一个集合上并行构建索引可能消耗的内存量。指定的内存量将在使用单个 createIndexes 命令或其 shell 助手 db.collection.createIndexes() 构建的所有索引之间共享。

此参数在运行时和启动时均可用:

索引构建消耗的内存与 WiredTiger 缓存内存是分开的(请参阅 cacheSizeGB)。

maxIndexBuildMemoryUsageMegabytes 对索引构建一次使用的内存量设置限制。当索引构建进程为索引键生成和排序时,这可能会影响性能。增加内存限制可提高索引构建期间的排序性能。

索引构建可由用户命令(例如 createIndexes)启动,也可以通过管理过程(例如初始同步)启动。二者均受到 maxIndexBuildMemoryUsageMegabytes 设置的限制约束。

初始同步一次只填充一个集合,没有超出内存限制的风险。但是,用户可以同时在多个数据库中的多个集合上启动索引构建,并且消耗的内存量可能会大于 maxIndexBuildMemoryUsageMegabytes 设置的限制。

提示

为了最大限度减少在副本集和带有副本集分片的分片集群上构建索引的影响,使用滚动索引构建过程,如副本集上构建滚动索引中所述。

如果已经启动集合扫描,则更改maxIndexBuildMemoryUsageMegabytes不会影响正在进行的索引构建。但是,强制副本集重新配置会重新启动集合扫描并使用提供的最新maxIndexBuildMemoryUsageMegabytes

reportOpWriteConcernCountersInServerStatus

默认:false

一个布尔类型标志,用于确定 db.serverStatus() 方法和 serverStatus 命令是否返回 opWriteConcernCounters 信息。[1]

mongod --setParameter reportOpWriteConcernCountersInServerStatus=true
[1] 启用 reportOpWriteConcernCountersInServerStatus 会对性能产生负面影响,特别是在不使用 TLS 的情况下。
watchdogPeriodSeconds

仅适用于 mongod

类型:整型

默认值:-1(已禁用)

确定存储节点看门狗检查受监控文件系统状态的频率:

watchdogPeriodSeconds 的有效值为:

注意

  • 如果受监控目录上的文件系统没有响应,最多可能需要近两倍watchdogPeriodSeconds 的值才能终止mongod

  • 如果存储节点看门狗的任何监控目录是通往其他卷的符号链接,则该存储节点看门狗不会监控该符号链接目标。例如,如果 mongod 使用 storage.directoryPerDB: true(或 --directoryperdb)并将数据库目录符号链接到另一个卷,则 Storage Node Watchdog 不会沿着该符号链接来监控目标。

要启用存储节点看门狗,必须在启动期间设置 watchdogPeriodSeconds

mongod --setParameter watchdogPeriodSeconds=60

您只能在启动时启用存储节点看门狗。但是,一旦启用,您可以暂停存储节点看门狗或在运行时更改 watchdogPeriodSeconds

一旦启用,

  • 要在运行时暂停存储节点看门狗,将 watchdogPeriodSeconds 设置为 -1。

    db.adminCommand( { setParameter: 1, watchdogPeriodSeconds: -1 } )
  • 要恢复或更改运行时段,请将 watchdogPeriodSeconds 设置为大于或等于 60 的数字。

    db.adminCommand( { setParameter: 1, watchdogPeriodSeconds: 120 } )

注意

如果在启动时未启用存储节点看门狗 ,则在运行时设置 watchdogPeriodSeconds 会返回错误。

警告

tcmallocAggressiveMemoryDecommit 在8.0中已弃用。 MongoDB 8.0使用更新版本的tcmalloc ,改进了内存碎片和管理。有关更多信息,请参阅tcmalloc升级。要将内存发布回操作系统,请考虑改用tcmallocEnableBackgroundThread

tcmallocEnableBackgroundThread

8.0版本新增

类型:布尔值

默认值:true

如果设立为truetcmallocEnableBackgroundThread将创建一个背景线程,定期将内存释放回操作系统。 tcmallocReleaseRate的值决定了背景线程释放内存的速率(以字节每秒为单位)。

注意

如果tcmallocEnableBackgroundThreadtruetcmallocReleaseRate0 ,则MongoDB仍会释放内存。

为了提高内存使用率,建议使用默认值true 。要学习;了解有关性能和内存管理改进的更多信息,请参阅升级的 TCMalloc。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

以下操作将 tcmallocEnableBackgroundThread 设置为 false

mongod --setParameter "tcmallocEnableBackgroundThread=false"
tcmallocReleaseRate

在版本8中进行了更改。 0

默认值:0

指定 TCMalloc发布速率 以字节每秒为单位。释放速率是指MongoDB向系统释放未使用内存的速率。如果将tcmallocReleaseRate 设立为 ,0 MongoDB不会将内存发布回系统。增加此值可更快地恢复内存;减少它可以减慢恢复内存的速度。

注意

如果tcmallocEnableBackgroundThreadtruetcmallocReleaseRate0 ,则MongoDB仍会释放内存。

从MongoDB 8.0开始,由于tcmalloc升级优先考虑 CPU 性能而非内存发布, tcmallocReleaseRate的默认值减少为0 。早期版本的MongoDB使用旧版本的tcmalloc ,设立默认tcmallocReleaseRate设置为1 ,以平衡内存发布和性能。

此参数在运行时和启动时均可用:

要在运行期间修改释放率,可以使用 setParameter 命令,例如:

db.adminCommand( { setParameter: 1, tcmallocReleaseRate: 5.0 } )

您也可以在启动时设置 tcmallocReleaseRate,例如:

mongod --setParameter "tcmallocReleaseRate=5.0"
fassertOnLockTimeoutForStepUpDown

5.3 版本中的新增功能

适用于 mongodmongos

默认值:15 秒

允许接收请求的服务器升级或降级,以在超时期间无法响应时(例如由于服务器磁盘故障)终止操作。这使集群能够成功选举出新的主节点和,从而继续保持可用性。

fassertOnLockTimeoutForStepUpDown 默认为 15 秒。要禁用节点快速插入,请设置 fassertOnLockTimeoutForStepUpDown=0

此参数在运行时和启动时均可用:

以下示例禁用节点快速插入:

mongod --setParameter fassertOnLockTimeoutForStepUpDown=0
ingressAdmissionControllerTicketPoolSize

仅适用于 mongod

默认值1000000

控制同时允许进入入口队列的最大操作数。 1000000的默认值表示无界的数值等效值,即允许不超过MongoDB允许的默认最大连接数的所有传入操作。

当有操作在队列上等待时,增加此值会解除对新池大小允许的尽可能多的操作的阻塞。降低此值不会区块任何当前正在执行的操作,但传入的可控操作会被阻止,直到有票证可用。

mongod --setParameter ingressAdmissionControllerTicketPoolSize=100000

警告

除非MongoDB工程师指示,否则避免修改ingressAdmissionControllerTicketPoolSize 。此设置对WiredTiger和MongoDB都有重大影响。

logLevel

适用于 mongodmongos

指定一个介于 05 之间的整数,表示日志记录的详细程度,其中 5 为最详细。[2]

默认 logLevel0(信息性)。

此参数在运行时和启动时均可用:

以下示例将 logLevel 设置为 2

db.adminCommand( { setParameter: 1, logLevel: 2 } )
[2] 从版本 4.2 开始,MongoDB 在日志消息中包含调试详细级别(1 至 5 级)。例如,如果详细级别为 2,则 MongoDB 记录 D2。在以前版本中,MongoDB 日志消息仅为调试级别指定 D
logComponentVerbosity

适用于 mongodmongos

设置 日志消息 的各种 组件 的详细级别。详细程度级别决定 MongoDB 输出的信息和调试消息的数量。[3]

详细程度级别的范围可以从 05

  • 0 是 MongoDB 的默认日志详细程度级别,它包括信息性消息。

  • 15 提高详细程度级别以包括调试消息。

对于组件,您还可以指定 -1 以继承父级的详细程度级别。

要指定详细等级级别,使用类似以下的文档:

{
verbosity: <int>,
<component1>: { verbosity: <int> },
<component2>: {
verbosity: <int>,
<component3>: { verbosity: <int> }
},
...
}

对于组件,您可以在文档中仅指定 <component>: <int>,除非您同时设置父组件和子组件的详细程度级别:

{
verbosity: <int>,
<component1>: <int> ,
<component2>: {
verbosity: <int>,
<component3>: <int>
}
...
}

顶层 verbosity 字段对应于 systemLog.verbosity,其为所有组件设置默认级别。systemLog.verbosity 的默认值为 0

这些组件对应于以下设置:

除非明确设置,否则组件拥有其父级的详细程度。例如,storagestorage.journal 的父级。也就是说,如果您指定了 storage 详细程度级别,则此级别也适用于:

此参数在运行时和启动时均可用:

例如,以下将 default verbosity level 设置为 1,将 query 设置为 2,将 storage 设置为 2,将 storage.journal 设置为 1

db.adminCommand( {
setParameter: 1,
logComponentVerbosity: {
verbosity: 1,
query: { verbosity: 2 },
storage: {
verbosity: 2,
journal: {
verbosity: 1
}
}
}
} )

您还可以在启动时设置参数 logComponentVerbosity,将详细程度级别文档作为字符串传递。

mongod --setParameter "logComponentVerbosity={command: 3}"

mongosh 还提供了 db.setLogLevel(),用于设置单个组件的日志级别。有关设置日志详细程度级别的各种方法,请参阅配置日志详细程度级别。

[3] 从版本 4.2 开始,MongoDB 在日志消息中包含调试详细级别(1 至 5 级)。例如,如果详细级别为 2,则 MongoDB 记录 D2。在以前版本中,MongoDB 日志消息仅为调试级别指定 D
maxLogSizeKB

适用于 mongodmongos

类型:非负整数

默认值:10

指定日志条目中单个属性字段的最大大小(以字节为单位);超过此限制的属性将被截断。

截断的属性字段会打印不超过 maxLogSizeKB 限制的字段内容并删除超过该限制的字段内容,同时保留有效的 JSON 格式。包含截断属性的日志条目会将 truncated 对象追加到日志条目的末尾。

更多信息,请参阅日志信息截断

0 的值会完全禁用截断。该参数的负值无效。

警告

使用较大的值或禁用值为 0 的截断可能会对系统性能产生不利影响,并对数据库操作产生负面影响。

此参数在运行时和启动时均可用:

以下示例将最大日志行大小设置为 20 千字节:

mongod --setParameter maxLogSizeKB=20
profileOperationResourceConsumptionMetrics

仅适用于 mongod

类型:布尔值

默认:false

用于确定操作是否收集资源消耗指标并在慢速查询日志中报告这些指标的标志。如果启用分析,则这些指标也包括在内。

如果设置为 true,则运行 explain 命令将在详细程度为 executionStats 或更高时返回 operationMetrics

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

quiet

适用于 mongodmongos

设置静默记录模式。若为 1mongod 将进入静默记录模式,不记录以下事件/活动:

此参数在运行时和启动时均可用:

考虑以下示例,其中将 quiet 参数设置为 1

db.adminCommand( { setParameter: 1, quiet: 1 } )

提示

另请参阅:

redactClientLogData

适用于 mongodmongos

类型:布尔值

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

在登录之前,配置 mongodmongos 以编辑与给定日志事件相关的任何消息。这可以防止程序将存储在数据库上的潜在敏感数据写入诊断日志。错误或操作代码、行号和源文件名等元数据在日志中仍然可见。

redactClientLogData静态加密TLS/SSL(传输加密)结合使用,以帮助符合监管要求。

要能够启动时启用日志校订,您可以:

您无法使用 --setParameter 选项在启动时设置 redactClientLogData

要在正在运行的 mongodmongos 上记录日志校订,使用以下命令:

db.adminCommand( { setParameter: 1, redactClientLogData : true } )

提示

另请参阅:

redactEncryptedFields

6.1.0 版本新增

适用于 mongodmongos

类型:布尔值

默认值true

配置 mongodmongos 以编辑所有日志消息中加密的 Binary 数据的字段值。

此参数在运行时和启动时均可用:

traceExceptions

适用于 mongodmongos

配置 mongod 记录每个数据库和套接字 C++ 异常的完整源代码堆栈跟踪,以用于调试。若为 truemongod 将记录完整的堆栈跟踪。

此参数仅在运行时可用。要设置参数,请使用 setParameter 命令。

考虑以下示例,其中将 traceExceptions true 设置为:

db.adminCommand( { setParameter: 1, traceExceptions: true } )

提示

另请参阅:

suppressNoTLSPeerCertificateWarning

适用于 mongodmongos

类型:布尔值

默认:false

默认情况下, 启用 TLS/SSL 并且net.ssl.allowConnectionsWithoutCertificates : truemongodmongos 允许客户端在不提供证书验证的情况下进行连接,同时记录警告。将 suppressNoTLSPeerCertificateWarning 设置为 1true,以抑制这些警告。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

以下操作将 suppressNoTLSPeerCertificateWarning 设置为 true

db.adminCommand( { setParameter: 1, suppressNoTLSPeerCertificateWarning: true} )
enableDetailedConnectionHealthMetricLogLines

7.0 版本中的新增功能

适用于 mongodmongos

类型:布尔值

默认值:true

决定是否启用与集群连接运行状况指标相关的特定日志消息。如果将 enableDetailedConnectionHealthMetricLogLines 设置为 false,则会关闭以下日志消息,但 MongoDB 仍会收集有关集群连接运行状况指标的数据:

日志消息
说明
已接受来自对等方的 TLS 连接
指示服务器在与已接受的入口连接的 TLS 握手期间成功解析了对等证书。
入口 TLS 握手已完成
指示与入口连接的 TLS 握手已完成。
你好,已完成

指示传入客户端连接上的初始连接握手已完成。

MongoDB 仅使用第一个 hello 命令显示日志消息。

身份验证指标报告
指定身份验证对话中某一步骤的完成时间。
自会话启动或身份验证握手以来,在入口连接上收到了第一条命令
指示入口连接接收到第一条不属于握手的命令。
网络响应发送时间慢
表示通过入口连接将响应发送回客户端所花费的时间(以毫秒为单位)超过了 slowMS 服务器参数定义的时长。
已完成 OCSP 请求的客户端验证
在建立出口 TLS 连接时,如果对等方没有在 TLS 握手中包含一个 OCSP 响应,那么服务器必须向证书颁发机构发送一个 OCSP 请求。当证书颁发机构收到 OCSP 响应时,MongoDB 会写入这条日志消息。
连接建立缓慢
表示通过入口连接向客户端发回响应所需的时间比用 slowConnectionThresholdMillis 参数指定的阈值长。当连接建立超时时,MongoDB 也会发出此日志消息。
等待获取连接时操作超时
表示操作在等待获取出口连接时超时。
已获取远程操作连接并完成线路写入
表示服务器花费了一毫秒或更长的时间在出口连接上写入传出请求,从连接建立的瞬间开始计算。

此参数在运行时和启动时均可用:

为了方便 MongoDB 工程师分析 MongoDB Server 的行为,MongoDB Server 会定期将统计信息保存到诊断文件中。

若为 mongod,诊断数据文件会存储于 diagnostic.data 目录中,其位于 mongod 实例的 --dbpathstorage.dbPath 下。

对于 mongos,默认情况下,诊断数据文件存储在 mongos 实例的 --logpathsystemLog.path 目录下。该诊断数据目录通过截断日志路径的文件扩展名并将 diagnostic.data 连接到剩余名称来计算。

例如,如果 mongos 拥有 --logpath /var/log/mongodb/mongos.log.201708015,那么诊断数据目录就是 /var/log/mongodb/mongos.diagnostic.data/ 目录。要为 mongos 指定不同的诊断数据目录,设置 diagnosticDataCollectionDirectoryPath 参数。

以下参数支持诊断数据捕获 (FTDC):

注意

选择诊断数据捕获间隔的默认值和最大大小旨在 MongoDB 工程师提供有用的数据,同时尽量减小对性能和存储大小的影响。通常,仅当 MongoDB 工程师出于特定诊断目的请求修改时,才需要修改这些值。

diagnosticDataCollectionEnabled

适用于 mongodmongos

类型:布尔值

默认值:true

确定是否能够基于诊断目的收集和记录数据。默认情况下启用诊断日志记录。

此参数在运行时和启动时均可用:

例如,以下命令禁用诊断集合:

mongod --setParameter diagnosticDataCollectionEnabled=false
diagnosticDataCollectionDirectoryPath

仅适用于 mongos

类型:字符串

警告

如果使用 diagnosticDataCollectionEnabled 禁用全时诊断数据捕获 (FTDC) 或者如果将 systemLog.destination 设置为 syslog,则必须在设置 diagnosticDataCollectionDirectoryPath 后重启 mongos

指定用于 mongos 的诊断目录的目录。如果目录不存在,mongos 会创建该目录。

如未指定,则通过截断 mongos 实例的 --logpathsystemLog.path 文件扩展名并连接 diagnostic.data 来计算诊断数据目录。

例如,如果 mongos--logpath /var/log/mongodb/mongos.log.201708015,则诊断数据目录为 /var/log/mongodb/mongos.diagnostic.data/

如果 mongos 无法创建指定目录,则禁用该实例的诊断数据捕获。如果路径中已存在同名文件或者进程没有创建目录的权限,则 mongos 可能无法创建指定目录。

此参数在运行时和启动时均可用:

diagnosticDataCollectionDirectorySizeMB

适用于 mongodmongos

类型:整型

默认值200 (分分片的集群中为400

指定 diagnostic.data 目录的最大大小(以兆字节为单位)。如果目录大小超过这个数字,目录中最早的诊断文件将根据文件名中的时间戳自动删除。

在版本8.0中进行了更改:对于分分片的集群中使用的mongosmongod实例, diagnosticDataCollectionDirectorySizeMB的默认值为400 MB。用于副本集或作为独立运行服务器的mongod实例的默认值为200 MB。

此参数在运行时和启动时均可用:

例如,以下操作将目录的最大大小设置为 250 兆字节:

mongod --setParameter diagnosticDataCollectionDirectorySizeMB=250

diagnosticDataCollectionDirectorySizeMB 的最小值为 10 MB。diagnosticDataCollectionDirectorySizeMB 必须大于最大诊断文件大小 diagnosticDataCollectionFileSizeMB

diagnosticDataCollectionFileSizeMB

适用于 mongodmongos

类型:整型

默认值:10

指定每个诊断文件的大小(以兆字节为单位)。如果文件超过最大文件大小,则 MongoDB 将创建新文件。

此参数在运行时和启动时均可用:

例如,以下操作将每个诊断文件的最大大小设置为 20 兆字节:

mongod --setParameter diagnosticDataCollectionFileSizeMB=20

diagnosticDataCollectionFileSizeMB 的最小值为 1 MB。

diagnosticDataCollectionPeriodMillis

适用于 mongodmongos

类型:整型

默认值:1000

指定收集诊断数据的时间间隔(以毫秒为单位)。

此参数在运行时和启动时均可用:

例如,以下操作将时间间隔设置为 5000 毫秒或 5 秒:

mongod --setParameter diagnosticDataCollectionPeriodMillis=5000

diagnosticDataCollectionPeriodMillis 的最小值为 100 毫秒。

disableSplitHorizonIPCheck

5.0.0 版本新增

适用于 mongodmongos

类型:布尔值

默认:false

要为水平分割 DNS 配置集群节点,使用主机名称,而非 IP 地址。

从 MongoDB v5.0 开始,replSetInitiatereplSetReconfig 拒绝使用 IP 地址而不是主机名的配置。

使用 disableSplitHorizonIPCheck 修改无法更新以使用主机名的节点。该参数仅适用于配置命令。

mongodmongos 在启动时不依赖 disableSplitHorizonIPCheck 进行验证。使用 IP 地址而不是主机名的旧版 mongodmongos 实例可以在升级后启动。

配置 IP 地址的实例会记录警告,要求使用主机名称而非 IP 地址。

要允许使用 IP 地址更改配置,则使用命令行设置 disableSplitHorizonIPCheck=true

/usr/local/bin/mongod --setParameter disableSplitHorizonIPCheck=true -f /etc/mongod.conf

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

setParameter:
disableSplitHorizonIPCheck: true
enableOverrideClusterChainingSetting

5.0.2 版本新增

适用于 mongodmongos

类型:布尔值

默认:false

如果 enableOverrideClusterChainingSettingtrue,则副本集从节点成员也可以从其他从节点成员复制数据,即使 settings.chainingAllowedfalse

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将 mongod 实例的 enableOverrideClusterChainingSetting 设置为 true

mongod --setParameter enableOverrideClusterChainingSetting=true
logicalSessionRefreshMillis

适用于 mongodmongos

类型:整型

默认值:300000(5 分钟)

缓存根据主会话存储刷新其逻辑会话记录的时间间隔(以毫秒为单位)。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将 mongod 实例的 logicalSessionRefreshMillis 设置为 10 分钟:

mongod --setParameter logicalSessionRefreshMillis=600000
localLogicalSessionTimeoutMinutes

适用于 mongodmongos

类型:整型

默认值:30

警告

仅用于测试目的

此参数仅用于测试目的,不适用于生产用途。

会话在最近一次使用后保持活动状态的时间(以分钟为单位)。未从客户端收到新的读/写操作或未在此阈值内使用 refreshSessions 刷新的会话将从缓存中清除。与过期会话相关的状态可随时被服务器清理。

该参数仅适用于设置该参数的实例。要在副本集和分片集群上设置该参数,您必须在每个成员上指定相同的值;否则,会话将无法正常运行。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将测试 mongod 实例的 localLogicalSessionTimeoutMinutes 设置为 20 分钟:

mongod --setParameter localLogicalSessionTimeoutMinutes=20
maxAcceptableLogicalClockDriftSecs

适用于 mongodmongos

类型:整型

默认值:31536000(1 年)

当前集群时间可以提前的最大值;具体来说,maxAcceptableLogicalClockDriftSecs 是集群时间的新值与当前集群时间之间的最大差值。集群时间是用于操作排序的逻辑时间。

如果新的集群时间与当前集群时间相差超过 maxAcceptableLogicalClockDriftSecs,那么您无法将集群时间提前到新值。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将 mongod 实例的 maxAcceptableLogicalClockDriftSecs 设置为 15 分钟:

mongod --setParameter maxAcceptableLogicalClockDriftSecs=900
maxSessions

适用于 mongodmongos

类型:整型

默认值:1000000

可以缓存的最大会话数。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将 mongod 实例的 maxSessions 设置为 1000:

mongod --setParameter maxSessions=1000
oplogBatchDelayMillis

6.0 版本中的新功能

适用于 mongodmongos

类型:整型

默认值:0

从节点上延迟应 oplog 操作批处理的毫秒数。默认情况下,oplogBatchDelayMillis0,表示会立即应用 oplog 批处理。若没有延迟,MongoDB 可能会将频繁、小批量的 oplog 应用于从节点。

增大 oplogBatchDelayMillis 会导致 MongoDB 在从节点上应用 oplog 批处理的频率下降,并且每次批处理包含更多的数据。这样会导致从节点上的 IOPS 减小,但带有写关注 "majority" 的写入操作的延迟会增加。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,运行以下命令将 mongod 实例的 oplogBatchDelayMillis 设置为 20 毫秒:

mongod --setParameter oplogBatchDelayMillis=20
periodicNoopIntervalSecs

仅适用于 mongod

类型:整型

默认值:10

在每个单独的节点上写入 noop 之间的持续时间(以秒为单位)。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

注意

要为 MongoDB Atlas 集群修改此值,则须联系 Atlas 支持

以下示例在启动时将 periodicNoopIntervalSecs 设置为 1 秒:

mongod --setParameter periodicNoopIntervalSecs=1
storeFindAndModifyImagesInSideCollection

版本 5.0 中的新增功能

适用于 mongodmongos

类型:布尔值

默认值:true

确定可重试 findAndModify 命令所需的临时文档是否存储在侧面集合 (config.image_collection) 中。

如果 storeFindAndModifyImagesInSideCollection 是:

  • true,临时文件存放在侧方集合。

  • false,临时文档存储在副本集 oplog 中。

如果您符合以下情况,请将 storeFindAndModifyImagesInSideCollection 设置为 true

注意

storeFindAndModifyImagesInSideCollectiontrue 时,从节点的 CPU 使用率可能会增加。

此参数在运行时和启动时均可用:

例如,要在启动期间将 storeFindAndModifyImagesInSideCollection 设置为 false

mongod --setParameter storeFindAndModifyImagesInSideCollection=false

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, storeFindAndModifyImagesInSideCollection: false } )
TransactionRecordMinimumLifetimeMinutes

仅适用于 mongod

类型:整型

默认值:30

事务记录在符合清理条件之前存在于 transactions 集合中的最小生命周期。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,要将 mongod 实例的 TransactionRecordMinimumLifetimeMinutes 设置为 20 分钟:

mongod --setParameter TransactionRecordMinimumLifetimeMinutes=20

提示

另请参阅:

enableFlowControl

类型:布尔值

默认值:true

启用或禁用控制主节点应用其写入操作的速率,以便将从节点成员的 majority committed 延迟保持在可配置的最大值以下。

此参数在运行时和启动时均可用:

注意

要启用流量控制,副本集/分片集群必须具有: featureCompatibilityVersion (fCV)4.2 ,且读关注(read concern)为 majority enabled。也就是说,如果 fCV 不是 4.2 或读关注已被禁用,则已启用的流量控制将不会生效。

flowControlTargetLagSeconds

类型:整型

默认值:10

使用流量控制运行时的目标最大 majority committed 延迟。启用流量控制后,该机制会尝试将 majority committed 延迟保持在指定秒数以下。 若已禁用流量控制,则该参数无效。

指定值必须大于 0。

一般来说,默认设置应该足够使用;但是,如果要修改默认值,减小值而不是增大值可能会更有用。

此参数在运行时和启动时均可用:

flowControlWarnThresholdSeconds

类型:整型

默认值:10

一旦流控制机制检测到多数提交点未移动,等待记录警告的时间。

指定值必须大于或等于0,其中 0 为禁用警告。

此参数在运行时和启动时均可用:

initialSyncTransientErrorRetryPeriodSeconds

类型:整型

默认值:86400

被临时网络错误中断时,从节点执行初始同步以尝试恢复该过程的时间(以秒为单位)。默认值相当于 24 小时。

此参数在运行时和启动时均可用:

initialSyncSourceReadPreference

仅适用于 mongod

类型:字符串

执行初始同步的首选来源。指定以下任何一个读取偏好模式:

如果副本集已禁用 chaining,则默认 initialSyncSourceReadPreference 读取偏好模式为 primary

无法为 initialSyncSourceReadPreference 指定标签集或 maxStalenessSeconds

如果 mongod 无法根据指定的读取偏好(read preference)找到同步源,则会在日志中记录错误并重新启动初始同步过程。如果在 10 次尝试后无法完成初始同步过程,mongod 将会退出并显示错误。有关同步源选择的更多信息,请参阅初始同步源选择。

在选择初始同步源时,initialSyncSourceReadPreference 优先于复制集的 settings.chainingAllowed 设置。副本集成员成功完成初始同步后,在选择复制同步源时会延迟 chainingAllowed 的值。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

initialSyncMethod

5.2 版本中的新增功能

仅适用于 mongod

类型:字符串

默认值logical

仅在 MongoDB Enterprise 中可用。

用于初始同步的方法。

设置为 logical 以使用逻辑初始同步。设置为 fileCopyBased 以使用基于文件副本的初始同步。

此参数仅影响指定该参数的成员的同步方法。在单个副本集成员上设置此参数不会影响任何其他副本集成员的同步方法。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

maxNumSyncSourceChangesPerHour

版本 5.0 中的新增功能

类型:整型

默认值:3

每次更新同步源以及每次节点获取一批 oplog 条目时都会对同步源进行求值。如果一小时内源更改次数超过 maxNumSyncSourceChangesPerHour,则该节点将暂时停止对该同步源进行求值。如果该参数设置较高,则该节点可能会进行不必要的源更改。

如果一个节点没有同步源,此参数不会阻止该节点从另一个节点开始同步。如果同步源无效,该节点将重新求值。同样,如果主节点发生变化并且链接被禁用,则该节点将更新以从新的主节点同步。

此参数在运行时和启动时均可用:

oplogFetcherUsesExhaust

仅适用于 mongod

类型:布尔值

默认值:true

启用或禁用流复制。将值设置为 true 以启用流复制。

将值设置为 false 以禁用流复制。如已禁用,从节点会通过发送请求至 sync from 源并等待响应来获取一批 oplog 条目。这需要针对每批 oplog 条目进行一次网络往返。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

oplogInitialFindMaxSeconds

仅适用于 mongod

类型:整型

默认:60

数据同步期间副本集节点等待 find 命令完成的最长时间(以秒为单位)。

此参数在运行时和启动时均可用:

replWriterThreadCount

仅适用于 mongod

类型:整型

默认值:16

用于并行应用复制操作的最大线程数。值的范围可以从 1 到 256(包含)。但是,所使用的最大线程数的上限为可用内核数的两倍。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

提示

另请参阅:

replWriterMinThreadCount

版本 5.0 中的新增功能

仅适用于 mongod

类型:整型

默认值:0

用于并行应用复制操作的最小线程数。值的范围可以从 0 到 256(含)。您只能在启动时设置 replWriterMinThreadCount,但无法使用 setParameter 命令更改此设置。

复制操作的并行应用最多使用 replWriterThreadCount 个线程。如果 replWriterMinThreadCount 配置的值小于 replWriterThreadCount,则线程池将超时空闲线程,直到线程池中的线程总数等于 replWriterMinThreadCount 为止。

replWriterMinThreadCount 配置的值必须小于或等于 replWriterThreadCount

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

rollbackTimeLimitSecs

类型:64 位整数

默认值:86400(1 天)

可回滚数据的最长期限。该参数的负值无效。

如果待回滚实例的 oplog 结束到公共点(源节点和待回滚节点拥有相同数据的最后一个点)后的第一次操作之间的时间超过该值,则回滚将失败。

要实现无限回滚期,将值设置为 2147483647,这是允许的最大值,大致相当于 68 年。

此参数在运行时和启动时均可用:

waitForSecondaryBeforeNoopWriteMS

仅适用于 mongod

类型:整型

默认值:10

如果 afterClusterTime 大于 oplog 的上次应用时间,则从节点必须等待的时长(以毫秒为单位)。经过 waitForSecondaryBeforeNoopWriteMS 后,如果 afterClusterTime 仍然大于上次应用时间,则从节点执行无操作写入,以提前上次应用时间。

此参数在运行时和启动时均可用:

以下示例将 waitForSecondaryBeforeNoopWriteMS 设置为 20 毫秒:

mongod --setParameter waitForSecondaryBeforeNoopWriteMS=20

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, waitForSecondaryBeforeNoopWriteMS: 20 } )
createRollbackDataFiles

仅适用于 mongod

类型:布尔值

默认值:true

确定 MongoDB 是否创建包含回滚期间受影响的文档的回滚文件的标志。

默认情况下,createRollbackDataFilestrue,MongoDB 会创建回滚文件。

此参数在运行时和启动时均可用:

以下示例将 createRollbackDataFiles 设置为 false,这样就不会创建回滚文件:

mongod --setParameter createRollbackDataFiles=false

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, createRollbackDataFiles: false } )

更多信息,请参阅收集回滚数据

replBatchLimitBytes

Default: 104857600 (100MB)

设置最大 oplog 应用批处理大小(以字节为单位)。

值的范围可以从 16777216 (16MB) 到 {0} 104857600 (100MB)(含)。

此参数在运行时和启动时均可用:

以下示例将 replBatchLimitBytes 设置为 64 MB 以限制 oplog 应用程序的批处理大小:

mongod --setParameter replBatchLimitBytes=67108864

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, replBatchLimitBytes: 64 * 1024 * 1024 } )
mirrorReads

仅适用于 mongod

类型:文档

默认值{ samplingRate: 0.01, maxTimeMS: 1000 }

mongod 实例指定镜像读的设置。该设置仅在成员为主节点时生效。

参数 mirrorReads 采用包含以下字段的 JSON 文档:

字段
说明
samplingRate

支持镜像的操作的子集镜像到可选(具体来说,priority greater than 0)从节点的子集时使用的采样率。也就是说,主节点镜像以指定的采样率读取每个可选从节点。

有效值为:

0.0
关闭镜像。
1.0
0.01.0(不含)之间的数字
主节点随机抽取每个可选举从节点,以指定的速率发送镜像读取。

例如,给定一个副本集,其中有一个主节点和两个可选从节点,采样率为 0.10,则主节点镜像以 10% 的采样率读取每个可选从节点,这样一个读取可以镜像到一个从节点,而不会镜像到另一个从节点或同时镜像或同时不镜像到两个从节点。也就是说,如果主节点收到可镜像的 100 操作,则 0.10 的采样率可能会导致 8 个读取被镜像到一个从节点,13 个读取被镜像到另一个从节点,或 10 个读取被镜像到每个从节点等。

默认值为 0.01

maxTimeMS

镜像读取的最长时间(以毫秒为单位)。默认值为 1000

镜像读取的 maxTimeMS 与被镜像的原始读取的 maxTimeMS 是分开的。

此参数在运行时和启动时均可用:

如果从配置文件或命令行指定,则使用引号mirrorReads 文档括起来

例如,以下操作从命令行将镜像读取采样率设置为 0.10

mongod --setParameter mirrorReads='{ samplingRate: 0.10 }'

或者,在配置文件中指定:

setParameter:
mirrorReads: '{samplingRate: 0.10}'

或者,如果在连接正在运行的 mongodmongosh 会话中使用 setParameter 命令,则不要用引号将文档括起来:

db.adminCommand( { setParameter: 1, mirrorReads: { samplingRate: 0.10 } } )
allowMultipleArbiters

5.3 版本中的新增功能

仅适用于 mongod

类型:布尔值

默认:false

指定副本集是否允许使用多个仲裁节点。

不建议使用多个仲裁节点:

  • 多个仲裁节点会使多数写关注的使用不可靠。MongoDB 在计算成员多数时对仲裁节点进行计数,但仲裁节点不会存储数据。通过包含多个仲裁节点,大多数写入操作有可能在写入复制到大多数承载节点之前返回成功。

  • 即使副本集没有足够的从节点用于数据复制,多个仲裁节点也允许副本集接受写入。

有更多信息,请参阅对多个仲裁节点的关注

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

mongod --setParameter allowMultipleArbiters=true
analyzeShardKeyCharacteristicsDefaultSampleSize

7.0 版本中的新增功能

仅适用于 mongod

类型:整型

默认值:10000000

如果运行 analyzeShardKey 时未设置 sampleRatesampleSize,则指定在计算分片键特征指标时要采样的文档数。必须大于 0

此参数在运行时和启动时均可用:

此示例在启动时将 analyzeShardKeyCharacteristicsDefaultSampleSize 设置为 10000

mongod --setParameter analyzeShardKeyCharacteristicsDefaultSampleSize=10000

在运行期间,您可以使用 setParameter 命令设置或修改参数:

db.adminCommand( { setParameter: 1, analyzeShardKeyCharacteristicsDefaultSampleSize: 10000 } )
analyzeShardKeyNumMostCommonValues

7.0 版本中的新增功能

仅适用于 mongod

类型:整型

默认值:5

指定要返回的最常用分片键值的个数。如果集合包含的唯一分片键少于此值,则 analyzeShardKeyNumMostCommonValues 将返回最常用值的个数。必须大于 0 且小于或等于 1000

此参数在运行时和启动时均可用:

此示例在启动时将 analyzeShardKeyNumMostCommonValues 设置为 3

mongod --setParameter analyzeShardKeyNumMostCommonValues=3

在运行期间,您可以使用 setParameter 命令设置或修改参数:

db.adminCommand( { setParameter: 1, analyzeShardKeyNumMostCommonValues: 3 } )
analyzeShardKeyNumRanges

7.0 版本中的新增功能

仅适用于 mongod

类型:整型

默认值:100

指定计算分片键范围热度时将分片键空间划分为多少个范围。必须大于 0 且小于或等于 10000

此参数在运行时和启动时均可用:

此示例在启动时将 analyzeShardKeyNumRanges 设置为 50

mongod --setParameter analyzeShardKeyNumRanges=50

在运行期间,您可以使用 setParameter 命令设置或修改参数:

db.adminCommand( { setParameter: 1, analyzeShardKeyNumRanges: 50 } )
analyzeShardKeyMonotonicityCorrelationCoefficientThreshold

7.0 版本中的新增功能

仅适用于 mongod

类型:double

默认值:0.7

指定用于确定分片键是否按插入顺序单调变化的 RecordId 相关系数阈值。必须大于 0 且小于或等于 1

此参数在运行时和启动时均可用:

此示例在启动时将 analyzeShardKeyMonotonicityCorrelationCoefficientThreshold 设置为 1

mongod --setParameter analyzeShardKeyMonotonicityCorrelationCoefficientThreshold=1

在运行期间,您可以使用 setParameter 命令设置或修改参数:

db.adminCommand( { setParameter: 1, analyzeShardKeyMonotonicityCorrelationCoefficientThreshold: 1 } )
autoMergerIntervalSecs

7.0 版本中的新增功能

仅适用于 mongod

类型:整型

默认值:3600

启用 AutoMerger 后,指定自动合并之间的时间间隔(以秒为单位)。默认值为 3600 秒,即一小时。

autoMergerIntervalSecs 只能在配置服务器上设置。

此参数在运行时和启动时均可用:

此示例是在启动时将 autoMergerIntervalSecs 设置为 7200 秒,即两小时:

mongod --setParameter autoMergerIntervalSecs=7200

在运行期间,您可以使用 setParameter 命令设置或修改参数:

db.adminCommand( { setParameter: 1, autoMergerIntervalSecs: 7200 } )
autoMergerThrottlingMS

7.0 版本中的新增功能

仅适用于 mongod

类型:整型

默认值:15000

启用 AutoMerger 后,指定 AutoMerger 在同一集合上启动的合并之间的最小时间间隔(以毫秒为单位)。

autoMergerThrottlingMS 只能在配置服务器上设置。

此参数在运行时和启动时均可用:

此示例是在启动时将 autoMergerThrottlingMS 设置为 60000 毫秒,即一分钟:

mongod --setParameter autoMergerThrottlingMS=60000

在运行期间,您可以使用 setParameter 命令设置或修改参数:

db.adminCommand( { setParameter: 1, autoMergerThrottlingMS: 60000 } )
balancerMigrationsThrottlingMs

7.0 版本新增:(从 6.3.1、6.0.6、5.0.18 版本开始也可用

仅适用于 mongod

类型:整型

默认值:1000

指定两个连续均衡回合之间的最短时间。这允许您限制均衡速率。该参数仅对配置服务器节点生效。

此参数在运行时和启动时均可用:

此示例是在启动时将 balancerMigrationsThrottlingMs 设置为 2000 毫秒:

mongod --setParameter balancerMigrationsThrottlingMs=2000

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, balancerMigrationsThrottlingMs: 2000 } )
chunkDefragmentationThrottlingMS

5.3 版本中的新增功能

适用于 mongodmongos

类型:整型

默认值:0

当对分片集合中的数据块进行碎片整理时,指定由负载均衡器运行的连续分割与合并命令之间的最短时间段(以毫秒为单位)。chunkDefragmentationThrottlingMS 会限制分割和合并命令的速度。

此参数在运行时和启动时均可用:

以下示例将 chunkDefragmentationThrottlingMS 设置为 10 毫秒:

mongod --setParameter chunkDefragmentationThrottlingMS=10

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, chunkDefragmentationThrottlingMS: 10 } )
chunkMigrationConcurrency

从 MongoDB 7.0、6.3、6.0.6(和 5.0.15)开始提供。

仅适用于 mongod

类型:整型

默认值:1

指定一个整数,用于设置用于数据段迁移的源分片和接收分片上的线程数。数据段迁移使用您在接收分片上为源分片和接收分片设置的线程数。

增加并发度可以提高数据段迁移性能,但也会增加源分片和接收分片上的工作负载和磁盘 IOPS 使用率。

最大值为 500。

通常应将 CPU 内核总数的一半用作线程。例如,如果内核总数为 16 个,则将 chunkMigrationConcurrency 设置为 8 个线程(或更少)。

如果 chunkMigrationConcurrency 大于1,则忽略所设 _secondaryThrottle 配置。_secondaryThrottle 设置决定了在数据块迁移期间,在什么条件下将对数据块中的下一个文档进行处理。有关详细信息,请参阅范围迁移和复制。

此参数在运行时和启动时均可用:

以下示例将 chunkMigrationConcurrency 设置为 5

mongod --setParameter chunkMigrationConcurrency=5

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, chunkMigrationConcurrency: 5 } )

要配置集合负载均衡,请参阅 configureCollectionBalancing

要了解如何对分片集合进行碎片整理,请参阅对分片集合进行碎片整理。

disableResumableRangeDeleter

仅适用于 mongod

类型:布尔值

默认:false

如果已在分片的主节点上设置,则指定是否在分片上暂停范围删除。如果设置为 true,则暂停清理包含孤立文档范围。该分片可以继续向其他分片捐赠数据段,但捐赠的文档不会从该分片中删除,直到您将此参数设置为 false。只要该分片在与传入数据段范围重叠的 config.rangeDeletions 集合中没有待处理的范围删除任务,则可继续从其他分片接收数据段。

disableResumableRangeDeletertrue 时,如果接收分片的主分片上存在孤立文档,并且与传入数据块的范围相同,则数据块迁移将失败。

如果该参数不是分片的主节点,则该参数对 mongod 没有影响。

重要

如果您将 disableResumableRangeDeleter 参数设置为 true,则确保将其一致地应用于分片副本集中的所有成员。如果发生故障转移,该设置在新的主节点上的值会决定范围删除器的行为。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

mongod --setParameter disableResumableRangeDeleter=false
enableShardedIndexConsistencyCheck

仅适用于 mongod

类型:布尔值

默认值:true

如果在配置服务器的主节点上设置,则启用或禁用分片集合的索引一致性检查。如果该参数不是配置服务器上的主节点,则该参数对 mongod 没有影响。

此参数在运行时和启动时均可用:

以下示例将配置服务器主节点的 enableShardedIndexConsistencyCheck 设置为 false

mongod --setParameter enableShardedIndexConsistencyCheck=false

在运行期间,也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, enableShardedIndexConsistencyCheck: false } )

提示

另请参阅:

opportunisticSecondaryTargeting

6.1.0 版本新增

仅适用于 mongos

类型:布尔值

默认值false

确定 mongos 是否对副本集执行机会性读取。

当此参数设置为 true 时,mongos 会将从节点读取定向到具有活动连接的从节点。它将请求发送到第一个接受连接的从节点。当此参数设置为 false 时,mongos 会保留从节点读取,直到它可以与特定从节点建立连接(对冲读的情况除外)。

注意

在特定工作负载下,机会性读取可能会触发从 mongosmongod 打开不必要的连接,从而降低整体性能。除非您的应用程序对该功能有特定需求,否则不应启用此参数。

此参数在运行时和启动时均可用:

例如,在启动期间设置 opportunisticSecondaryTargeting

mongos --setParameter opportunisticSecondaryTargeting=true
shardedIndexConsistencyCheckIntervalMS

仅适用于 mongod

类型:整型

默认值:600000

如果在配置服务器的主节点上设置,则配置服务器主节点检查分片集合的索引一致性的时间间隔(以毫秒为单位)。如果该参数不是配置服务器上的主节点,则该参数对 mongod 没有影响。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

例如,以下操作在启动时将时间间隔设置为 300000 毫秒(5 分钟):

mongod --setParameter shardedIndexConsistencyCheckIntervalMS=300000

提示

另请参阅:

enableFinerGrainedCatalogCacheRefresh

注意

在8.0中已弃用

从MongoDB 8.0开始,该参数已弃用,不会导致任何更改或错误。

适用于 mongodmongos

类型:布尔值

默认值:true

该参数允许仅在需要刷新分片时才刷新目录缓存。如已禁用,任何过时的数据段都会导致集合的整个数据段分布被视为过时,并强制所有联系分片的路由器刷新其分片目录缓存。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

mongod --setParameter enableFinerGrainedCatalogCacheRefresh=true
mongos --setParameter enableFinerGrainedCatalogCacheRefresh=true
maxTimeMSForHedgedReads

重要

从 MongoDB 8.0开始,对冲读已弃用。 默认情况下,指定读取偏好nearest的查询不再使用对冲读。 如果您明确指定对冲读,MongoDB 会执行对冲读并记录警告。

仅适用于 mongos

类型:整型

默认值:150

指定对冲读的最大时限(以毫秒为单位)。也就是说,为对冲读操作而发送的额外读取操作使用 maxTimeMSForHedgedReadsmaxTimeMS 值,而被对冲的读操作使用为该操作指定的 maxTimeMS 值。

此参数在运行时和启动时均可用:

例如,要设定 200 毫秒的限制,您可以在启动时发出以下命令:

mongos --setParameter maxTimeMSForHedgedReads=200

或者,如果在连接至正在运行的 mongosmongosh 会话中使用 setParameter 命令:

db.adminCommand( { setParameter: 1, maxTimeMSForHedgedReads: 200 } )
maxCatchUpPercentageBeforeBlockingWrites

版本 5.0 中的新增功能

仅适用于 mongod

类型:整型

默认值:10

对于 moveChunkmoveRange 操作,指定迁移协议允许从 catchup 阶段过渡到 commit 阶段的未传输数据的最大百分比(以总数据段大小的百分比表示)。

设置更高的追赶百分比可减少完成迁移所需的时间,但会导致并发 upsertdelete 操作期间的延迟增加。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

从 MongoDB 7开始。 1 (以及7 . 0 . 1 ),您可以在运行时设置参数。

例如,要设定最大百分比为 20,您可以在启动时发出以下命令:

mongod --setParameter maxCatchUpPercentageBeforeBlockingWrites=20

从 MongoDB 7.1(和 7.0.1)开始,您可以使用 setParameter 命令在运行期间设置参数:

db.adminCommand( { setParameter: 1, maxCatchUpPercentageBeforeBlockingWrites: 20} )

提示

另请参阅:

metadataRefreshInTransactionMaxWaitBehindCritSecMS

5.2 版本新增:(从 5.1.0、5.0.4 开始也可用

仅适用于 mongod

类型:整型

默认值:500

限制分片在事务中等待关键部分的时间。

当查询访问分片时,数据段迁移DDL 操作可能已占用集合的关键部分。如果查询发现关键部分已被占用,则分片会一直等待,直到关键部分被释放。当分片将控制权返回到 mongos 时,mongos 会重试查询。但是,如果多分片事务与在多个分片上获取关键部分的操作交互,则该交互可能会导致分布式死锁。

metadataRefreshInTransactionMaxWaitBehindCritSecMS 限制分片在事务中等待关键部分发布的最长时间。

要减少事务中关键部分的最大等待时间,则降低 metadataRefreshInTransactionMaxWaitBehindCritSecMS 的值。

警告

如果 metadataRefreshInTransactionMaxWaitBehindCritSecMS 太低,mongos 可能会使用所有重试尝试并返回错误。

此参数在运行时和启动时均可用:

例如,将 metadataRefreshInTransactionMaxWaitBehindCritSecMS 设置为 400 毫秒:

db.adminCommand( { setParameter: 1, metadataRefreshInTransactionMaxWaitBehindCritSecMS: 400 } )
queryAnalysisSamplerConfigurationRefreshSecs

7.0 版本中的新增功能

7.0.1 版本中的更改

适用于 mongodmongos

类型:整型

默认值:10

采样器(mongosmongod)刷新其查询分析器采样率的时间间隔。

根据经过其中的流量,在分片集群中的 mongos 实例或副本集中的 mongod 实例之间分配 configureQueryAnalyzer 命令配置的采样率。要使 mongosmongod 的采样率分配对通过其中的流量更加敏感,请减小该值。

建议使用默认值。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

从 MongoDB 7开始。 0 。 1 ,您可以在运行期间设置queryAnalysisSamplerConfigurationRefreshSecs

此示例将在 mongod 实例上,在启动时将 queryAnalysisSamplerConfigurationRefreshSecs 设置为 60 秒:

mongod --setParameter queryAnalysisSamplerConfigurationRefreshSecs=60

此示例将在 mongos 实例上,在启动时将 queryAnalysisSamplerConfigurationRefreshSecs 设置为 60 秒:

mongos --setParameter queryAnalysisSamplerConfigurationRefreshSecs=60

如要将该值设置为 30 秒,请进行以下运行:

db.adminCommand( { setParameter: 1, queryAnalysisSamplerConfigurationRefreshSecs: 30 } )
queryAnalysisWriterIntervalSecs

7.0 版本中的新增功能

7.0.1 版本中的更改

仅适用于 mongod

类型:整型

默认值:90

将采样查询写入磁盘的时间间隔(以秒为单位)。

此参数仅在启动时可用。要设置该参数,请使用 setParameter 设置。

从 MongoDB 7开始。 0 。 1 ,您可以在运行期间设置queryAnalysisWriterIntervalSecs

此示例将在 mongod 实例上,在启动时将 queryAnalysisWriterIntervalSecs 设置为 60 秒:

mongod --setParameter queryAnalysisWriterIntervalSecs=60
To set the value t