“文档” 菜单
文档首页
/
MongoDB Manual
/

MongoDB Server 参数

在此页面上

  • 简介
  • 参数
  • 身份验证参数
  • 一般参数
  • 记录参数
  • 诊断参数
  • 复制性和一致性
  • 分片参数
  • 健康管理器参数
  • 存储参数
  • WiredTiger 参数
  • 审核参数
  • 事务参数

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

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

说明
SCRAM-SHA-1
RFC 5802 使用 SHA-1 哈希函数的标准 Salted Challenge Response Authentication Mechanism。
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 中可用。

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

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

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

在版本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

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

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

更多信息,请参阅本地主机异常

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实例。

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 会返回尽可能多的结果,并警告由于内存限制,可能无法报告所有损坏。

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

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

注意

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

适用于 mongodmongos

指定用于代理身份验证的 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

默认值10000

适用于 mongodmongos

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

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

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

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

mongod --setParameter scramIterationCount=12000

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

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

默认值15000

适用于 mongodmongos

更改用于所有新的 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 配置

提示

另请参阅:

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

可通过 --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 值的新证书。请参阅对包含新 DN 的 x.509 集群证书进行滚动更新

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

tlsX509ExpirationWarningThresholdDays

适用于 mongodmongos

默认值:30

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

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

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

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

该参数的最小值为 0

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

有关 x.509 到期警告的更多信息,请参阅 x.509 证书即将到期触发警告

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

userCacheInvalidationIntervalSecs

默认值:30

仅适用于 mongos

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

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

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

authFailedDelayMs

默认值:0

适用于 mongodmongos

注意

Enterprise 版功能

仅在 MongoDB Enterprise 中可用。

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

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

allowRolesFromX509Certificates

默认值:true

适用于 mongodmongos

一个布尔标志,允许或禁止从客户端 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
connPoolMaxConnsPerHost

默认值:200

适用于 mongodmongos

为传出连接至全局连接池的其他 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

默认值:600000(10 分钟)

适用于 mongodmongos

设置在 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

重要

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

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 设置。

有关 MongoDB TFO 支持的更多信息,请参阅 TCP 快速打开支持

提示

另请参阅:

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 设置。

有关 MongoDB TFO 支持的更多信息,请参阅 TCP 快速打开支持

提示

另请参阅:

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 连接的主机操作系统没有影响。有关 MongoDB TFO 支持的更多信息,请参阅 TCP 快速打开支持

此参数仅在启动时可用。要设置该参数,请使用 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
indexMaxNumGeneratedKeysPerDocument

5.3 版本中的新增功能

默认值:100000

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

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

maxIndexBuildMemoryUsageMegabytes

默认值:200

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

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

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

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

索引构建可以通过用户命令(如创建索引)或管理过程(如初始同步)启动。 二者均受到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 } )
tcmallocAggressiveMemoryDecommit

类型:整数(仅限 01

默认值:0

如果您启用 tcmallocAggressiveMemoryDecommit,MongoDB:

  • 释放一块内存到系统,并且

  • 尝试返回所有相邻的可用内存块。

值为 1 时启用 tcmallocAggressiveMemoryDecommit0 时禁用该参数。

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

如果您启用此参数,系统将需要新的内存分配以供使用。请考虑仅在内存受限的系统上,且在已经尝试过其他内存和性能选项后再启用 tcmallocAggressiveMemoryDecommit

尽管使用 tcmallocAggressiveMemoryDecommit 时性能可能会降低,但它通常比使用 tcmallocReleaseRate 更受欢迎。

tcmallocReleaseRate

默认值:1.0

指定 tcmalloc 释放率 ( TCMALLOC_RELEASE_RATE)。根据 https://gperftools.github.io/gperftools/tcmalloc.html#runtime,TCMALLOC_RELEASE_RATE 可描述为“在受支持的系统上,我们通过 madvise(MADV_DONTNEED) 向系统释放未使用内存的速率。零意味着我们从不会将内存释放回系统。增加此标志以更快地返回内存;减少此标志则会较慢地恢复内存。合理比率在 [0,10] 范围内。”

注意

考虑使用 tcmallocAggressiveMemoryDecommit 而不是 tcmallocReleaseRate,除非您在使用 tcmallocAggressiveMemoryDecommit 时发现性能明显下降。

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

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

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

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

mongod --setParameter "tcmallocReleaseRate=5.0"
fassertOnLockTimeoutForStepUpDown

5.3 版本中的新增功能

默认值:15 秒

适用于 mongodmongos

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

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

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

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

mongod --setParameter fassertOnLockTimeoutForStepUpDown=0
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
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 } )

提示

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} )

为了方便 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

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

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

例如,以下操作将目录的最大大小设置为 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 地址。

为 水平分割 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

要允许使用 IP 地址更新配置,使用节点的配置文件设置 disableSplitHorizonIPCheck=true

setParameter:
disableSplitHorizonIPCheck: true

如果尝试在运行时更新 disableSplitHorizonIPCheck,则 db.adminCommand() 会返回错误:

db.adminCommand( { setParameter: 1, "disableSplitHorizonIPCheck": true } )
MongoServerError: not allowed to change [disableSplitHorizonIPCheck] at runtime
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 ,但增加了具有写关注(write concern)"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

类型:整型

默认:60

仅适用于 mongod

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

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

replWriterThreadCount

类型:整型

默认值:16

仅适用于 mongod

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

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

提示

另请参阅:

replWriterMinThreadCount

版本 5.0 中的新增功能

类型:整型

默认值:0

仅适用于 mongod

用于并行应用复制操作的最小线程数。值的范围可以从 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

默认值: 104857600 ( 100 MB)

设置最大 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

4.4 版本新增

类型:文档

默认值{ 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

仅适用于 mongod

5.3 版本中的新增功能

类型:布尔值

默认:false

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

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

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

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

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

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

mongod --setParameter allowMultipleArbiters=true
balancerMigrationsThrottlingMs

版本6中的新增功能。 0 。 6 : (也可从5 . 0 . 18开始

类型:整型

默认值:1000

仅适用于 mongod

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

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

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

mongod --setParameter balancerMigrationsThrottlingMs=2000

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

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

5.3 版本中的新增功能

类型:整型

默认值:0

适用于 mongodmongos

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

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

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

mongod --setParameter chunkDefragmentationThrottlingMS=10

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

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

从 MongoDB 6.0.6(和 5.0.15)开始可用。

类型:整型

默认值:1

仅适用于 mongod

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

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

最大值为 500。

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

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

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

以下示例将 chunkMigrationConcurrency 设置为 5

mongod --setParameter chunkMigrationConcurrency=5

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

db.adminCommand( { setParameter: 1, chunkMigrationConcurrency: 5 } )
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.0.0 中的新增内容

类型:布尔值

默认值false

仅适用于 mongos

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

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

注意

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

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

例如,在启动期间设置 opportunisticSecondaryTargeting

mongos --setParameter opportunisticSecondaryTargeting=true
shardedIndexConsistencyCheckIntervalMS

仅适用于 mongod

类型:整型

默认值:600000

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

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

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

mongod --setParameter shardedIndexConsistencyCheckIntervalMS=300000

提示

另请参阅:

enableFinerGrainedCatalogCacheRefresh

适用于 mongodmongos

类型:布尔值

默认值:true

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

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

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

仅适用于 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 设置。

在版本 7.1 中已更改: (以及7.0.1 ),您可以在运行时设置该参数。

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

mongod --setParameter maxCatchUpPercentageBeforeBlockingWrites=20

您无法在运行期间更改maxCatchUpPercentageBeforeBlockingWrites

提示

另请参阅:

metadataRefreshInTransactionMaxWaitBehindCritSecMS

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

类型:整型

默认值:500

仅适用于 mongod

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

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

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

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

警告

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

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

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

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

仅适用于 mongos

类型:字符串

默认值:on

指定 mongos 是否支持对读取偏好已启用对冲读选项的读取操作进行对冲读。

可用值为:

说明
on
mongos 实例支持对读取偏好已启用对冲读取选项的读取操作进行对冲读。
off
mongos 实例不支持对冲读。也就是说,对冲读不可用,即使对于读取偏好启用了对冲读选项的读取操作也是如此。

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

例如,要关闭对 mongos 实例的对冲读支持,可以在启动期间发出以下命令:

mongos --setParameter readHedgingMode=off

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

db.adminCommand( { setParameter: 1, readHedgingMode: "off" } )
routingTableCacheChunkBucketSize

版本 6.0.10 中的新增内容

适用于 mongodmongos

类型:整型

默认值:500

指定路由表高速缓存桶的大小,用于实施数据块分组优化。必须大于 0

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

例如,要在 mongod 上将缓存数据段存储桶大小设置为 250,则在启动时发出以下命令:

mongod --setParameter routingTableCacheChunkBucketSize=1000
shutdownTimeoutMillisForSignaledShutdown

版本 5.0 中的新增功能

类型:整型

默认值:15000

仅适用于 mongod

指定在响应 SIGTERM 信号而启动 mongod 关闭之前等待任何正在进行的数据库操作完成的时间(以毫秒为单位)。

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

例如,要将时间设置为 250 毫秒,您可以在启动期间发出以下命令:

mongod --setParameter shutdownTimeoutMillisForSignaledShutdown=250

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

db.adminCommand( { setParameter: 1, shutdownTimeoutMillisForSignaledShutdown: 250 } )
mongosShutdownTimeoutMillisForSignaledShutdown

版本 5.0 中的新增功能

类型:整型

默认值:15000

仅适用于 mongos

指定在响应 SIGTERM 信号而启动 mongos 关闭之前等待任何正在进行的数据库操作完成的时间(以毫秒为单位)。

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

例如,要将时间设置为 250 毫秒,您可以在启动期间发出以下命令:

mongos --setParameter mongosShutdownTimeoutMillisForSignaledShutdown=250

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

db.adminCommand( { setParameter: 1, mongosShutdownTimeoutMillisForSignaledShutdown: 250 } )
ShardingTaskExecutorPoolHostTimeoutMS

类型:整数

默认值:300000(5 分钟)

适用于 mongodmongos

mongosmongos 断开与主机的所有连接之前与主机失去通信的最长时间。

如果设置,ShardingTaskExecutorPoolHostTimeoutMS 应大于 ShardingTaskExecutorPoolRefreshRequirementMSShardingTaskExecutorPoolRefreshTimeoutMS 的和。否则,mongos 会调整 ShardingTaskExecutorPoolHostTimeoutMS 的值,使其大于该总和。

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

以下示例在启动期间将 ShardingTaskExecutorPoolHostTimeoutMS 设置为 120000

mongos --setParameter ShardingTaskExecutorPoolHostTimeoutMS=120000

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

db.adminCommand( { setParameter: 1, ShardingTaskExecutorPoolHostTimeoutMS: 120000 } )
ShardingTaskExecutorPoolMaxConnecting

类型:整数

默认值:2

适用于 mongodmongos

每个 TaskExecutor 连接池到 mongod 实例的最大并发连接数(包括设置/刷新状态下的待连接)。您可以设置此参数来控制 mongosmongod 实例添加连接的速率。

如已设置,则 ShardingTaskExecutorPoolMaxConnecting 应小于或等于 ShardingTaskExecutorPoolMaxSize。如果是大于的情况,则 mongos 会忽略 ShardingTaskExecutorPoolMaxConnecting 值。

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

以下示例在启动期间将 ShardingTaskExecutorPoolMaxConnecting 设置为 20

mongos --setParameter ShardingTaskExecutorPoolMaxConnecting=20

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

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

类型:整数

默认值:2 64 - 1

适用于 mongodmongos

每个 TaskExecutor 连接池可向任意给定 mongod 实例开放的最大出站连接数。 所有 TaskExecutor 池中任何给定主机的最大可能连接数为:

ShardingTaskExecutorPoolMaxSize * taskExecutorPoolSize

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

以下示例在启动期间将 ShardingTaskExecutorPoolMaxSize 设置为 20

mongos --setParameter ShardingTaskExecutorPoolMaxSize=20

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

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

mongos 最多可以有 n 个 TaskExecutor 连接池,其中 n 为内核数。请参阅 taskExecutorPoolSize

提示

ShardingTaskExecutorPoolMaxSizeForConfigServers

6.0 版本中的新功能

类型:整数

默认值:-1

适用于 mongodmongos

ShardingTaskExecutorPoolMaxSize 的可选替代项,用于设置每个 TaskExecutor 连接池可以向配置服务器打开的最大出站连接数。

当设置为:

  • -1,使用 ShardingTaskExecutorPoolMaxSize。这是默认设置。

  • 大于 -1 的整数值,覆盖每个 TaskExecutor 连接池可以向配置服务器打开的出站连接数的最大数量。

参数仅适用于分片部署。

以下示例在启动期间将 ShardingTaskExecutorPoolMaxSize 设置为 2,从而将每个 TaskExecutor 连接池可以向配置服务器打开的最大出站连接数设置为 2

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

mongos --setParameter ShardingTaskExecutorPoolMaxSizeForConfigServers=2

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

db.adminCommand( { setParameter: 1, ShardingTaskExecutorPoolMaxSizeForConfigServers: 2 } )
ShardingTaskExecutorPoolMinSize

类型:整数

默认值:1

适用于 mongodmongos

每个 TaskExecutor 连接池可向任意给定 mongod 实例开放的最小出站连接数。

ShardingTaskExecutorPoolMinSize 首次从池中请求与一个新主机建立连接时,会创建连接。当池空闲时,池会维持此数量的连接,直到 ShardingTaskExecutorPoolHostTimeoutMS 毫秒过去且没有任何应用程序使用该池。

对于使用 warmMinConnectionsInShardingTaskExecutorPoolOnStartup 参数的 mongosShardingTaskExecutorPoolMinSize 参数还控制在 mongos 启动时建立到每个分片主机的连接数量,然后开始接受传入的客户端连接。

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

以下示例在启动期间将 ShardingTaskExecutorPoolMinSize 设置为 2

mongos --setParameter ShardingTaskExecutorPoolMinSize=2

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

db.adminCommand( { setParameter: 1, ShardingTaskExecutorPoolMinSize: 2 } )

mongos 最多可以有 n 个 TaskExecutor 连接池,其中 n 为内核数。请参阅 taskExecutorPoolSize

ShardingTaskExecutorPoolMinSizeForConfigServers

6.0 版本中的新功能

类型:整数

默认值:-1

适用于 mongodmongos

ShardingTaskExecutorPoolMinSize 的可选替代项,用于设置每个 TaskExecutor 连接池可以向配置服务器打开的最小出站连接数。

当设置为:

  • -1,使用 ShardingTaskExecutorPoolMinSize。这是默认设置。

  • 大于 -1 的整数值;覆盖每个 TaskExecutor 连接池可以向配置服务器打开的最小出站连接数。

参数仅适用于分片部署。

以下示例在启动期间将 ShardingTaskExecutorPoolMinSize 设置为 2,从而将每个 TaskExecutor 连接池可以向配置服务器打开的最小出站连接数设置为 2

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

mongos --setParameter ShardingTaskExecutorPoolMinSizeForConfigServers=2

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

db.adminCommand( { setParameter: 1, ShardingTaskExecutorPoolMinSizeForConfigServers: 2 } )
ShardingTaskExecutorPoolRefreshRequirementMS

类型:整数

默认值:60000(1 分钟)

适用于 mongodmongos

mongos 在尝试对池中的空闲连接进行心跳检测前等待的最长时间。如果池大小超过其最小规模,则空闲连接可能会在刷新期间被弃用。

如已设置,ShardingTaskExecutorPoolRefreshRequirementMS 应大于 ShardingTaskExecutorPoolRefreshTimeoutMS。否则,mongos 会将 ShardingTaskExecutorPoolRefreshTimeoutMS 的值调整为小于 ShardingTaskExecutorPoolRefreshRequirementMS

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

以下示例在启动期间将 ShardingTaskExecutorPoolRefreshRequirementMS 设置为 90000

mongos --setParameter ShardingTaskExecutorPoolRefreshRequirementMS=90000

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

db.adminCommand( { setParameter: 1, ShardingTaskExecutorPoolRefreshRequirementMS: 90000 } )
ShardingTaskExecutorPoolRefreshTimeoutMS

类型:整数

默认值:20000(20 秒)

适用于 mongodmongos

mongos 等待心跳检测超时的最大时间。

如果设置,则 ShardingTaskExecutorPoolRefreshTimeoutMS 应小于 ShardingTaskExecutorPoolRefreshRequirementMS。否则,mongosShardingTaskExecutorPoolRefreshTimeoutMS 的值调整为小于 ShardingTaskExecutorPoolRefreshRequirementMS

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

以下示例在启动期间将 ShardingTaskExecutorPoolRefreshTimeoutMS 设置为 30000

mongos --setParameter ShardingTaskExecutorPoolRefreshTimeoutMS=30000

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

db.adminCommand( { setParameter: 1, ShardingTaskExecutorPoolRefreshTimeoutMS: 30000 } )
ShardingTaskExecutorPoolReplicaSetMatching

5.0 版本中的更改

适用于 mongodmongos

类型:字符串

默认值:“自动”

mongos 实例上,此参数设置策略,该策略确定其连接池与副本集中的节点的最小大小限制。

mongod 实例上,此参数设置策略,该策略确定其连接池与其他副本集中的节点的最小大小限制。

请注意,此参数仅托管与用户请求和 CRUD 操作直接相关的操作的连接。

可用值为:

匹配策略
说明
"automatic" (默认)

从 5.0 开始,"automatic" 是新的默认值。

mongos 设置时,实例遵循为 "matchPrimaryNode" 选项指定的行为。

mongod 设置时,实例遵循为 "disabled" 选项指定的行为。

注意

如果 ShardingTaskExecutorPoolReplicaSetMatching 设置为 "automatic",则 replicaSetMatchingStrategy 仍然描述实际使用的策略,而不是 "automatic"。要找到 ShardingTaskExecutorPoolReplicaSetMatching 的值,使用 getParameter 返回服务器参数的值。

"matchPrimaryNode"

当为 mongos 设置时,该实例的连接池到分片集群中副本集的每个从节点的最小大小限制(具体来说,分片副本集和配置服务器)等于其到该副本主节点的连接池的大小。

当为 mongod 设置时,该实例的连接池到分片集群中另一个副本集的每个从节点的最小大小限制(具体来说,分片副本集和配置服务器)等于其到该副本主节点的连接池的大小。

警告

如果拓扑结构中有多个分片服务器可能会经历快速涌入跨分片操作,则不要在您的 mongod 实例上设置此选项。

在主节点降级的情况下,matchPrimaryNode 确保任何成为主节点的从节点都可以处理当前级别的主节点读写。

"matchBusiestNode"

当为 mongos 设置时,该实例对分片集群中副本集的每个成员的连接池的最小大小限制(具体来说,分片副本集和配置服务器)等于该副本集的每个主节点和每个从节点成员的活动连接计数的最大值。

当为 mongod 设置时,该实例对分片集群中另一副本集的每个成员的连接池的最小大小限制(具体来说,分片副本集和配置服务器)等于该副本集的每个主节点和每个从节点成员的活动连接计数的最大值。

通过 "matchBusiestNode"mongos 可维护到每个从节点的连接,以处理当前级别的主节点和从节点的读写操作。随着活动连接数的减少,池中要维护的连接数也会减少。

"disabled"

当为 mongos 设置时,该实例在实例的连接池中与分片集群中另一个副本集的每个节点的最小连接数(具体来说,分片副本集和配置服务器)等于 ShardingTaskExecutorPoolMinSize

当为 mongod 设置时,该实例的连接池中与分片集群中另一个副本集的每个节点的最小连接数(具体来说即分片副本集和配置服务器)等于ShardingTaskExecutorPoolMinSize

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

以下示例在启动期间将 ShardingTaskExecutorPoolReplicaSetMatching 设置为 "automatic"

mongod --setParameter ShardingTaskExecutorPoolReplicaSetMatching="automatic"

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

db.adminCommand( { setParameter: 1, ShardingTaskExecutorPoolReplicaSetMatching: "automatic" } )
taskExecutorPoolSize

类型:整数

默认值:1

仅适用于 mongos

用于给定 mongos 的任务执行器连接池的数量。

如果参数值小于或等于 0,则任务执行程序连接池的数量为核心数,但以下情况除外:

  • 如果内核数小于 4,则任务执行器连接池数量为 4。

  • 如果内核数大于 64,则任务执行器连接池数量为 64。

在 Linux 上运行 MongoDB 时,您无法修改taskExecutorPoolSize的默认值1 。 在 Windows 或 macOS 上运行 MongoDB 时,您可以修改此参数。

taskExecutorPoolSize的默认值为1

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

mongos --setParameter taskExecutorPoolSize=6
loadRoutingTableOnStartup

仅适用于 mongos

类型:布尔值

默认值:true

配置 mongos 实例以在启动时预加载分片集群的路由表。启用此设置后,mongos 在开始接受客户端连接之前为每个分片集合缓存集群范围内的路由表,作为其启动过程的一部分。

如果未启用此设置,则mongos 仅为传入客户端连接加载所需的路由表,并且仅为给定请求的命名空间加载特定路由表。

已启用 loadRoutingTableOnStartup 参数的 mongos 实例可能需要更长的启动时间,但一旦启动,初始客户端连接的服务速度会更快。

loadRoutingTableOnStartup 默认为 使能。

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

warmMinConnectionsInShardingTaskExecutorPoolOnStartup

仅适用于 mongos

类型:布尔值

默认值:true

配置 mongos 实例以在启动时预热其连接池。启用此参数后,mongos 会在开始接受客户端连接之前尝试为每个分片服务器建立 ShardingTaskExecutorPoolMinSize 网络连接,作为启动程序的一部分。

您可以使用 warmMinConnectionsInShardingTaskExecutorPoolOnStartupWaitMS 参数配置此行为的超时时间。如果达到此超时时间,无论连接池的大小如何,mongos 都将开始接受客户端连接。

启用此参数的 mongos 实例可能会经历更长的启动时间,但启动后将加快初始客户端连接的服务速度。

warmMinConnectionsInShardingTaskExecutorPoolOnStartup 默认为 使能。

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

warmMinConnectionsInShardingTaskExecutorPoolOnStartupWaitMS

仅适用于 mongos

类型:整数

默认:2000(2 秒)

设置在使用 warmMinConnectionsInShardingTaskExecutorPoolOnStartup 参数时,mongos 等待每个分片主机建立 ShardingTaskExecutorPoolMinSize 连接的超时阈值(以毫秒为单位)。如果达到此超时时间,无论连接池的大小如何,mongos 都将开始接受客户端连接。

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

migrateCloneInsertionBatchDelayMS

仅适用于 mongod

类型:非负整数

默认值:0

在迁移过程的克隆步骤期间,各批次插入之间等待的时间(以毫秒为单位)。此等待例外情况为 secondaryThrottle

默认值 0 表示无需额外等待。

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

以下操作将 migrateCloneInsertionBatchDelayMS 设置为 200 毫秒:

mongod --setParameter migrateCloneInsertionBatchDelayMS=200

也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, migrateCloneInsertionBatchDelayMS: 200 } )
migrateCloneInsertionBatchSize

仅适用于 mongod

类型:非负整数

默认值:0

迁移过程的克隆步骤中每批次中插入的最大文档数。

默认值 0 表示每次批处理没有最大文档数。然而,实际上,这会导致包含最大 16 MB 文档的批处理。

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

以下操作将 migrateCloneInsertionBatchSize 设置为 100 个文档:

mongod --setParameter migrateCloneInsertionBatchSize=100

也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, migrateCloneInsertionBatchSize: 100 } )
orphanCleanupDelaySecs

默认值:900(15 分钟)

仅适用于 mongod

从源分片中删除已迁移数据段之前的最小延迟。

在数据块迁移期间删除数据块之前,MongoDB 会等待 orphanCleanupDelaySecs 或与该数据块有关的正在进行的查询在分片节点上完成,以时间较长者为准。

但是,由于分片主节点对在分片从节点上正在运行的查询没有了解,如果这些查询花费的时间比完成分片主节点查询的时间和 orphanCleanupDelaySecs 长,则使用数据块但在从节点上运行的查询可能会导致文档消失。

注意

此行为仅影响在数据段迁移之前开始的正在进行的查询。在数据段迁移开始后启动的查询将不会使用正在迁移的数据段。

如果分片有存储限制,则考虑暂时减小该值。如果在分片从节点上运行超过 15 分钟的查询,则考虑增加该值。

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

以下操作将 orphanCleanupDelaySecs 设置为 20 分钟:

mongod --setParameter orphanCleanupDelaySecs=1200

也可以使用 setParameter 命令设置:

db.adminCommand( { setParameter: 1, orphanCleanupDelaySecs: 1200 } )
persistedChunkCacheUpdateMaxBatchSize

6.0.13 版本新增: (以及 5.0.25)

仅适用于 mongod

类型:整数

默认值:1000

为了路由和服务操作,分片必须知道与其集合相关的路由和所有权信息。通过复制内部缓存集合 config.cache.collectionsconfig.cache.chunks.<collectionName>,此信息从分片的主节点传播到从节点。

在以前的版本中,对数据块缓存collection的更新是单独执行的(意味着删除一个条目并插入一个新条目)。从 MongoDB 6.0.13 开始, 这些更新以批量删除和批量插入的方式执行。 更新的逻辑提高了包含大量数据块的collection的性能。

persistedChunkCacheUpdateMaxBatchSize 参数指定用于更新持久化数据段缓存的最大批处理大小。

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

以下示例在启动时将 persistedChunkCacheUpdateMaxBatchSize 设置为 700:

mongod --setParameter persistedChunkCacheUpdateMaxBatchSize=700

您还可以在运行时设置 persistedChunkCacheUpdateMaxBatchSize

db.adminCommand( { setParameter: 1, persistedChunkCacheUpdateMaxBatchSize: 700 } )
rangeDeleterBatchDelayMS

仅适用于 mongod

类型:非负整数

默认值:20

范围迁移(或 cleanupOrphaned 命令)的清理阶段期间,下一批删除之前等待的时间(以毫秒为单位)。

_secondaryThrottle 复制延迟发生在每次批处理删除之后。

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

以下操作将 rangeDeleterBatchDelayMS 设置为 200 毫秒:

mongod --setParameter rangeDeleterBatchDelayMS=200

也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, rangeDeleterBatchDelayMS: 200 } )
rangeDeleterBatchSize

仅适用于 mongod

类型:非负整数

从 MongoDB 5.1.2 和 5.0.6 开始,默认:2147483647

范围迁移(或 cleanupOrphaned 命令)的清理阶段,每次批处理中要删除的最大文档数。

0 表示系统选择默认值。

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

以下示例将 rangeDeleterBatchSize 设置为 32 个文档:

mongod --setParameter rangeDeleterBatchSize=32

也可以使用 setParameter 命令设置该参数:

db.adminCommand( { setParameter: 1, rangeDeleterBatchSize: 32 } )

提示

在 6.0.3 之前的版本中,rangeDeleterBatchSize 更改后的新值仅适用于更改后创建的范围删除操作。要将新值应用于现有的范围删除操作,请执行强制降级。

从 6.0.3 开始,该参数的新值将应用于更新后处理的所有范围删除,无论范围删除创建于何时。

skipShardingConfigurationChecks

仅适用于 mongod

类型:布尔值

默认值:false

true 时,允许启动分片成员或配置服务器成员作为独立运行的维护操作。该参数与 --configsvr--shardsvr 选项互斥。

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

mongod --setParameter skipShardingConfigurationChecks=true

重要

维护完成后,在重新启动 mongod 时删除 skipShardingConfigurationChecks 参数。

findChunksOnConfigTimeoutMS

版本 5.0 中的新增功能

适用于 mongodmongos

类型:非负整数

默认值:900000

chunks 查找操作的超时时间(以毫秒为单位)。

如果集群中有大量数据段,并且数据段加载失败并出现错误 ExceededTimeLimit,则增加参数值:

mongod --setParameter findChunksOnConfigTimeoutMS=1000000

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

activeFaultDurationSecs

类型:文档

仅适用于 mongos

健康管理器概述故障到从集群中删除 mongos 所需的等待时间(以秒为单位)。

当检测到故障并且运行状况管理器配置为 critical 时,服务器会等待指定的时间间隔,然后从集群中删除 mongos

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

例如,要将故障到崩溃的持续时间设置为五分钟,则在启动时发出以下命令:

mongos --setParameter activeFaultDurationSecs=300

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

db.adminCommand(
{
setParameter: 1,
activeFaultDurationSecs: 300
}
)

使用 setParameter 设置的参数在重启后不会持续存在。有关详细信息,请参阅 setParameter 页面

要使该设置持续有效,使用 setParameter 选项在您的 mongos 配置文件设置 activeFaultDurationSecs,如以下示例所示:

setParameter:
activeFaultDurationSecs: 300
healthMonitoringIntensities

类型:文档数组

仅适用于 mongos

使用此参数设置健康管理器的强度水平。

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

healthMonitoringIntensities 接受一个文档数组,valuesvalues 中的每个文档都有两个字段:

  • type,运行状况管理器组件

  • intensity,强度等级

多面
健康观察器检查的内容
configServer
与配置服务器连接相关的集群运行状况问题。
dns
与 DNS 可用性和功能性相关的集群运行状况问题。
ldap
与 LDAP 可用性和功能性相关的集群运行状况问题。
强度等级
说明
critical
该组件上的健康管理器已启用,并且能够在发生错误时将出现故障的 mongos 从集群中移出。健康管理器会等待 activeFaultDurationSecs 指定的时间,然后自动停止并从集群中移出 mongos
non-critical
该组件上的健康管理器已启用并记录错误,但如果出现错误,Mongo 仍保留在集群中。
off
该组件上的健康管理器已禁用。mongos 不会对该组件执行任何健康状况检查。这是默认强度级别。

例如,要设置 dns 运行状况管理器组件为 critical 强度级别,则在启动时执行以下命令:

mongos --setParameter 'healthMonitoringIntensities={ values:[ { type:"dns", intensity: "critical"} ] }'

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

db.adminCommand(
{
setParameter: 1,
healthMonitoringIntensities: { values: [ { type: "dns", intensity: "critical" } ] } } )
}
)

使用 setParameter 设置的参数在重启后不会持续存在。有关详细信息,请参阅 setParameter 页面

要使该设置持续有效,使用 setParameter 选项在您的 mongos 配置文件设置 healthMonitoringIntensities,如以下示例所示:

setParameter:
healthMonitoringIntensities: "{ values:[ { type:\"dns\", intensity: \"critical\"} ] }"
healthMonitoringIntervals

类型:文档数组

仅适用于 mongos

该健康管理器运行的频率(以毫秒为单位)。

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

healthMonitoringIntervals 接受一个文档数组,valuesvalues 中的每个文档都有两个字段:

  • type,运行状况管理器组件

  • interval,运行的时间间隔,以毫秒为单位

多面
健康观察器检查的内容
configServer
与配置服务器连接相关的集群运行状况问题。
dns
与 DNS 可用性和功能性相关的集群运行状况问题。
ldap
与 LDAP 可用性和功能性相关的集群运行状况问题。

例如,若要将 ldap 运行状况管理器组件设置为每 30 秒进行一次健康检查,则请在启动时执行以下命令:

mongos --setParameter 'healthMonitoringIntervals={ values:[ { type:"ldap", interval: "30000"} ] }'

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

db.adminCommand(
{
setParameter: 1,
healthMonitoringIntervals: { values: [ { type: "ldap", interval: "30000" } ] } } )
}
)

使用 setParameter 设置的参数在重启后不会持续存在。有关详细信息,请参阅 setParameter 页面

要使该设置持续有效,使用 setParameter 选项在您的 mongos 配置文件设置 healthMonitoringIntervals,如以下示例所示:

setParameter:
healthMonitoringIntervals: "{ values: [{type: \"ldap\", interval: 200}] }"
progressMonitor

类型:文档

仅适用于 mongos

进度监视器运行测试以确保运行状况管理器的检查不会卡住或无响应。进度监视器按照 interval 指定的时间间隔来运行这些测试。如果健康检查开始但未在 deadline 指定的超时时间内完成,则进度监视器会停止 mongos 并将其从集群中删除。

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

字段
说明
单位
interval
确保健康管理器不会卡住或无响应的频率。
毫秒
deadline
如果健康管理器检查没有取得进展,则在 Mongo 自动失败之前超时。
秒数

要将 intervaldeadline 分别设置为 1000 毫秒和 300 秒,则在启动时发出以下命令:

mongos --setParameter 'progressMonitor={"interval": 1000, "deadline": 300}'

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

db.adminCommand(
{
setParameter: 1,
progressMonitor: { interval: 1000, deadline: 300 } )
}
)

使用 setParameter 设置的参数在重启后不会持续存在。有关详细信息,请参阅 setParameter 页面

要使该设置持续有效,使用 setParameter 选项在您的 mongos 配置文件设置 progressMonitor,如以下示例所示:

setParameter:
progressMonitor: "{ interval: 1000, deadline: 300 }"
honorSystemUmask

仅适用于 mongod

默认值false

如果 honorSystemUmask 设置为 true,则 MongoDB 创建的新文件的权限将根据用户的 umask 设置。如果 honorSystemUmask 设置为 true,那么您无法设置 processUmask

如果 honorSystemUmask 设置为 false,则 MongoDB 创建的新文件的权限设置为 600,即仅所有者拥有读写权限。新目录的权限设置为 700。您可以使用 processUmask 覆盖 MongoDB 创建的所有新文件中群组和其他用户的默认权限。

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

mongod --setParameter honorSystemUmask=true

注意

honorSystemUmask 在 Windows 系统上不可用。

journalCommitInterval

仅适用于 mongod

指定一个介于 1500 之间的整数,表示日志提交之间的间隔(以毫秒 (ms) 为单位)。

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

考虑以下示例,将journalCommitInterval设置为200毫秒:

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

提示

minSnapshotHistoryWindowInSeconds

版本 5.0 中的新增功能

默认值300

仅适用于 mongod

存储引擎保留快照历史记录的最小时间窗口(以秒为单位)。如果您使用读关注 "snapshot" 查询数据并指定的 atClusterTime 值早于指定的 minSnapshotHistoryWindowInSeconds,则 mongod 会返回 SnapshotTooOld 错误。

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

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

考虑以下示例,其将 minSnapshotHistoryWindowInSeconds 设置为 600 秒:

db.adminCommand( { setParameter: 1, minSnapshotHistoryWindowInSeconds: 600 } )

注意

增加 minSnapshotHistoryWindowInSeconds 的值会增加磁盘使用量。有关详细信息,请参阅快照历史记录保留

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

processUmask

仅适用于 mongod

honorSystemUmask 设置为 false 时,覆盖用于群组和其他用户的默认权限。默认情况下,当 honorSystemUmask 设置为 false 时,MongoDB 创建的新文件的权限设置为 600。使用 processUmask 参数以使用自定义 umask 值覆盖此默认值。文件所有者继承系统 umask 的权限。

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

如果 honorSystemUmask 设置为 true,则无法设置此参数。

考虑以下示例,其将群组及其他用户的权限设置为仅读/写,并保留所有者的系统 umask 设置:

mongod --setParameter processUmask=011

注意

processUmask 在 Windows 系统上不可用。

storageEngineConcurrentReadTransactions

仅适用于 mongod

6.0 版本中的更改wiredTigerConcurrentReadTransactions 参数已被重命名为 storageEngineConcurrentReadTransactions

仅适用于 WiredTiger 存储引擎。

指定 WiredTiger 存储引擎允许的并发读取事务的最大数量。

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

db.adminCommand( { setParameter: 1, storageEngineConcurrentReadTransactions: <num> } )

提示

storageEngineConcurrentWriteTransactions

仅适用于 mongod

6.0 版本中的更改wiredTigerConcurrentReadTransactions 参数已被重命名为 storageEngineConcurrentReadTransactions

仅适用于 WiredTiger 存储引擎。

指定 WiredTiger 存储引擎中允许的并发写入事务的最大数量。

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

db.adminCommand( { setParameter: 1, storageEngineConcurrentWriteTransactions: <num> } )

提示

syncdelay

仅适用于 mongod

指定 mongod 将其工作内存刷新到磁盘的间隔(以秒为单位)。默认情况下,mongod 每 60 秒向磁盘刷新一次内存。几乎在所有情况下,您都不应该设置该值,而应该使用默认设置。

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

考虑以下示例,其将 syncdelay 设置为 60 秒:

db.adminCommand( { setParameter: 1, syncdelay: 60 } )

为了提供持久性数据,WiredTiger 使用了检查点。 有关详细信息,请参阅《日志和 WiredTiger 存储引擎》。

wiredTigerEngineRuntimeConfig

仅适用于 mongod

为正在运行的 mongod 实例指定 wiredTiger 存储引擎配置选项。

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

警告

除非在 MongoDB 工程师的指导下,否则避免修改 wiredTigerEngineRuntimeConfig,因为此设置对 WiredTiger 和 MongoDB 都具有重大影响。

考虑以下操作原型:

db.adminCommand({
"setParameter": 1,
"wiredTigerEngineRuntimeConfig": "<option>=<setting>,<option>=<setting>"
})
wiredTigerFileHandleCloseIdleTime

仅适用于 mongod

类型:整型

默认值:600

指定 wiredTiger 中的文件句柄在关闭之前可以保持空闲的时间(以秒为单位)。

如果将 wiredTigerFileHandleCloseIdleTime 设置为 0,则空闲句柄不会关闭。

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

例如:

mongod --setParameter wiredTigerFileHandleCloseIdleTime=100000

请参阅 WiredTiger 文档了解所有可用的 WiredTiger 配置选项。

auditAuthorizationSuccess

类型:布尔值

默认:false

注意

仅在MongoDB EnterpriseMongoDB Atlas中可用。

适用于 mongodmongos

允许对 AuthCheck 操作的授权成功进行审核

auditAuthorizationSuccessfalse 时,审核系统仅记录 authCheck 的授权失败。

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

要启用对授权成功的审核,则发出以下命令:

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

启用 auditAuthorizationSuccess 比仅记录授权失败更能降低性能。

如已启用运行时审核配置,则 auditAuthorizationSuccess 参数不应出现在 mongodmongos 配置文件中。如果存在该参数,则服务器将无法启动。

提示

另请参阅:

auditConfigPollingFrequencySecs

版本 5.0 中的新增功能

类型:整型

默认值:300

分片集群可能具有维护集群的审核配置设置的服务器。设置非配置服务器轮询配置服务器以获取当前审计生成的时间间隔(以秒为单位)。如果返回值与先前已知值不同,则发起节点将请求当前配置并更新其内部状态。

注意

使用默认值 300 秒,非配置节点可能会比 setAuditConfig 命令晚 5 分钟。

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

auditEncryptionHeaderMetadataFile

6.0 版本中的新功能

类型:字符串

注意

仅在MongoDB Enterprise中可用。 MongoDB Enterprise 和 Atlas 有不同的配置要求。

适用于 mongodmongos

记录用于审核日志加密的元数据审核标头的路径和文件名。标头位于每个审核日志文件的顶部,包含用于解密审核日志的元数据。标题也会保存在审计日志中。

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

例如,以下操作能设置 auditEncryptionHeaderMetadataFile 的路径和文件:

mongod --setParameter auditEncryptionHeaderMetadataFile=/auditFiles/auditHeadersMetadataFile.log
auditEncryptKeyWithKMIPGet

6.0 版本中的新功能

类型:布尔值

默认:false

注意

仅在MongoDB Enterprise中可用。 MongoDB Enterprise 和 Atlas 有不同的配置要求。

适用于 mongodmongos

为仅支持 KMIP 协议版本 1.0 或 1.1 的Key Management Interoperability Protocol (KMIP) 服务器启用审核日志加密

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

以下示例将 auditEncryptKeyWithKMIPGet 设置为 true

mongod --setParameter auditEncryptKeyWithKMIPGet=true
coordinateCommitReturnImmediatelyAfterPersistingDecision

版本 5.0 中的新增功能

在版本 6.0 和 5.0.10 中更新

类型:布尔值

默认:false

  • 当设置为 false 时,分片事务协调器会等待所有参与分片确认提交或取消多文档事务的决定,然后才会将结果返回给客户端。

  • 当设置为 true 时,分片事务协调器向客户端返回多文档事务提交决策,但前提是对请求的事务写关注作出的决策持续有效

    如果客户端请求的写关注小于 "majority",则在决策返回给客户端后,提交可能会回退。

    事务可能没有“读你所写”的一致性。也就是说,读取操作可能不会显示其之前的写入操作的结果。在以下情况下,可能会出现该问题:

    • 事务必须写入多个分片。

    • 读取和早期写入发生在不同会话中。

    因果一致性仅确保同一会话中发生的读取与写入的因果关系。

分片事务协调器向客户端返回多文档交易提交决策,但前提是对请求的事务写关注作出的决策持续有效

如果客户端请求的写关注小于 "majority",则在决策返回给客户端后,提交可能会回退。

事务可能没有“读你所写”的一致性。也就是说,读取操作可能不会反映其之前的写入操作的结果。这可能发生在以下情况下:

  • 事务必须写入多个分片。

  • 读取和早期写入发生在不同会话中。

因果一致性仅保证同一会话中发生的读取和写入的因果关系。

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

以下示例将 coordinateCommitReturnImmediatelyAfterPersistingDecision 设置为 true

mongod --setParameter coordinateCommitReturnImmediatelyAfterPersistingDecision=true

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

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

6.0 版本中的新功能

适用于 mongodmongos

默认值:1000

内部会话元数据删除的会话限制。元数据:

当内部会话数大于 internalSessionsReapThreshold 时,元数据将被删除。

如果您将 internalSessionsReapThreshold 设置为 0,则仅在用户会话结束时才会删除内部会话元数据。

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

以下示例将 internalSessionsReapThreshold 设置为 500 会话:

db.adminCommand( { setParameter: 1, internalSessionsReapThreshold: 500 } )

您也可以在启动时设置 internalSessionsReapThreshold。例如:

mongod --setParameter internalSessionsReapThreshold=500
transactionLifetimeLimitSeconds

仅适用于 mongod

默认:60

指定多文档事务的生命周期。超过此期限的事务将被视为已过期,并由定期清理进程进行中止。清理进程每 transactionLifetimeLimitSeconds/2 秒运行一次,或至少每 60 秒运行一次。

清理过程有助于缓解存储缓存压力。

transactionLifetimeLimitSeconds 的最小值为 1 秒。

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

以下代码将 transactionLifetimeLimitSeconds 设置为 30 秒:

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

您也可以在启动时设置参数 transactionLifetimeLimitSeconds

mongod --setParameter "transactionLifetimeLimitSeconds=30"

要为分片集群设置参数,必须为所有分片副本集成员修改该参数。

从 MongoDB 5.0 开始,如果您更改 transactionLifetimeLimitSeconds 参数,您还必须将所有配置服务器副本集节点上的 transactionLifetimeLimitSeconds 更改为相同的值。保持该值一致将会:

  • 确保路由表历史记录的保留时间至少达到分片副本集成员的事务生命周期限制。

  • 降低事务重试频率,从而提高性能。

transactionTooLargeForCacheThreshold

版本 6.0.5 中的新增内容

仅适用于 mongod

类型:十进制

默认值:0.75

重试由于缓存压力而失败的事务的阈值。该值是脏缓存大小的百分比。默认值 0.75 表示脏缓存的 75%。

脏缓存限制为总缓存大小的 20%。当 transactionTooLargeForCacheThreshold 设置为 0.75,服务器仅重试使用少于 15% (0.75 * 20%) 存储引擎总缓存的事务。

该限制仅适用于重试。大型事务可以使用超过 transactionTooLargeForCacheThreshold% 的脏缓存。但是,如果由于缓存压力而回滚大型事务,则服务器会发出 TransactionTooLargeForCache 错误并且不会重试该事务。

要禁用此行为,将 transactionTooLargeForCacheThreshold 设置为 1.0

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

有关 WiredTiger 存储的更多信息,请参阅:storage.wiredTiger 选项。

maxTransactionLockRequestTimeoutMillis

仅适用于 mongod

类型:整型

默认值:5

多文档事务在获取事务操作所需的锁时应等待的最大时间(以毫秒为单位)。

如果等待 maxTransactionLockRequestTimeoutMillis 后事务无法获取锁,则事务中止。

默认情况下,多文档事务会等待 5 毫秒。也就是说,如果无法在 5 毫秒内获取锁,则事务将中止。如果操作在锁定请求中提供了更长的超时时间,maxTransactionLockRequestTimeoutMillis 将覆盖特定操作的超时时间。

可以将 maxTransactionLockRequestTimeoutMillis 设置为:

  • 0 这样,如果事务无法立即获取所需的锁,则事务将中止。

  • 大于 0 的数字,等待指定时间以获取所需的锁。这有助于避免瞬时并发锁获取(例如快速运行的元数据操作)导致的事务中止。但是,这可能会延迟死锁事务操作的中止。

  • -1 使用特定于操作的超时。

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

以下操作将 maxTransactionLockRequestTimeoutMillis 设置为 20 毫秒:

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

您也可以在启动时设置这个参数:

mongod --setParameter maxTransactionLockRequestTimeoutMillis=20
← install_compass