MongoDB 服务器参数

在本页面

Synopsis

MongoDB 提供了许多配置选项,您可以使用以下选项进行设置:

db.adminCommand( { setParameter: 1, <parameter>: <value>  } )
setParameter:
   <parameter1>: <value1>
   ...
mongod --setParameter <parameter>=<value>
mongos --setParameter <parameter>=<value>

有关其他配置选项,请参见配置文件选项mongodmongos

Parameters

Authentication Parameters

  • authenticationMechanisms
    • 在 2.6 版中进行了更改:添加了对PLAINMONGODB-X509身份验证机制的支持。

在版本 3.0 中进行了更改:添加了对SCRAM-SHA-1身份验证机制的支持。

mongodmongos均可用。

指定服务器接受的身份验证机制的列表。将此设置为以下一个或多个值。如果指定多个值,请使用逗号分隔的列表,且不要使用空格。有关认证机制的描述,请参见Authentication

ValueDescription
SCRAM-SHA-1RFC 5802使用 SHA-1 哈希函数的标准咸化挑战响应身份验证机制。
MONGODB-CRMongoDB 质询/响应身份验证。 (* MongoDB 3.6 中已弃用*)
MONGODB-X509MongoDB TLS/SSL 证书认证。
GSSAPI (Kerberos)使用 Kerberos 的外部身份验证。此机制仅在MongoDB Enterprise中可用。
PLAIN(LDAP SASL)PLAIN以纯文本形式传输密码。 LDAP 代理验证必需。可选,用于验证非$external用户。

例如,要将PLAIN指定为身份验证机制,请使用以下命令:

mongod --setParameter authenticationMechanisms=PLAIN --auth
  • clusterAuthMode
    • 2.6 版的新功能。

mongodmongos均可用。

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

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

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

指定0false以禁用 localhost 身份验证绕过。默认启用。

enableLocalhostAuthBypass使用setParameter数据库命令不可用。使用配置文件中的setParameter选项或命令行上的--setParameter选项。

有关更多信息,请参见Localhost Exception

  • KeysRotationIntervalSec
    • 3.6 版的新功能。

默认:7776000 秒(90 天)

指定HMAC 签名密钥在旋转到下一个秒之前有效的秒数。此参数主要用于促进身份验证测试。

您只能在启动期间设置KeysRotationIntervalSec,而不能使用setParameter数据库命令更改此设置。

  • ldapUserCacheInvalidationInterval

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

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

默认为 30 秒。

  • opensslCipherConfig
    • 3.6 版的新功能。

使用 TLS/SSL 加密时,请为 OpenSSL 指定密码字符串。有关密码字符串的列表,请参见https://www.openssl.org/docs/man1.0.2/apps/ciphers.html#CIPHER-STRINGS

您只能在启动期间设置opensslCipherConfig,而不能使用setParameter数据库命令更改此设置。

mongod --setParameter opensslCipherConfig=HIGH:!EXPORT:[email protected] --sslMode requireSSL --sslPEMKeyFile Certs/server.pem

saslauthdPath

Note

仅在 MongoDB Enterprise 中可用(Windows 的 MongoDB Enterprise 除外)。

mongodmongos均可用。

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

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

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

您只能在启动期间设置saslHostName,而不能使用setParameter数据库命令更改此设置。

Note

saslHostName支持 Kerberos 身份验证,仅包含在 MongoDB Enterprise 中。对于 Linux 系统,请参阅在 Linux 上使用 Kerberos 身份验证配置 MongoDB以获取更多信息。

允许用户按实例覆盖Kerberos主体名称的默认Kerberos服务名称部分。如果未指定,则默认值为mongodb

MongoDB 仅允许在启动时设置saslServiceNamesetParameter命令无法更改此设置。

saslServiceName仅在 MongoDB Enterprise 中可用。

Important

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

  • scramIterationCount
    • 3.0.0 版中的新功能。

默认10000

mongodmongos均可用。

更改用于所有新存储的密码的哈希迭代次数。更多的迭代会增加 Client 端向 MongoDB 进行身份验证所需的时间,但会使密码更不容易遭受暴力破解尝试。对于大多数常见的用例和要求,默认值是理想的。如果修改此值,则不会更改现有密码的迭代次数。

您可以在启动 MongoDB 或运行mongod实例时设置scramIterationCount

  • sslMode
    • 2.6 版的新功能。

mongodmongos均可用。

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

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

db.adminCommand( { setParameter: 1, sslMode: "preferSSL" } )
  • sslWithholdClientCertificate
    • 默认:false

3.6.9 版中的新功能。

mongodmongos均可用。

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

  • userCacheInvalidationIntervalSecs
    • 默认:30

仅适用于mongos

mongos实例上,指定mongos实例检查以确定user objects的内存中高速缓存是否具有陈旧数据的间隔(以秒为单位),如果有,则清除该高速缓存。如果用户对象没有更改,mongos将不会清除缓存。

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

在版本 3.0 中进行了更改:默认值已更改为30秒,而允许的最小值已更改为1秒。 mongos仅在发生更改时清除用户缓存。

  • authFailedDelayMs
    • 默认:0

mongodmongos均可用。

3.4 版的新功能。

Enterprise Feature

仅在 MongoDB Enterprise 中可用。

通知 Client 端认证尝试失败之前要 await 的毫秒数。此参数的范围可以是05000(含)。

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

  • allowRolesFromX509Certificates
    • 默认:true

mongodmongos均可用。

从 MongoDB 3.6.14(和 3.4.22)开始可用

一个布尔标志,允许或不允许从 Client 端 x.509 证书中检索授权角色。

您只能在启动过程中在配置文件或命令行中设置allowRolesFromX509Certificates

General Parameters

  • connPoolMaxShardedConnsPerHost
    • 2.6 版的新功能。

默认:200

mongodmongos均可用。

设置用于与分片通信的旧式连接池的最大大小。池的大小不会阻止创建其他连接,但是会阻止连接池保留超出此限制的连接。

Note

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

如果连接池中的连接数具有很高的 Client 流失率,或者创建的连接总数增加,则仅增加connPoolMaxShardedConnsPerHost值。

您只能在启动过程中在配置文件或命令行中设置connPoolMaxShardedConnsPerHost。例如:

mongos --setParameter connPoolMaxShardedConnsPerHost=250
  • connPoolMaxShardedInUseConnsPerHost
    • 版本 3.6.3 中的新功能。

mongodmongos均可用。

设置在任何给定时间的旧式分片群集连接池的最大使用中连接数。

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

您只能在启动过程中在配置文件或命令行中设置connPoolMaxShardedConnsPerHost。例如:

mongos --setParameter connPoolMaxShardedInUseConnsPerHost=100
  • shardedConnPoolIdleTimeoutMinutes
    • 版本 3.6.3 中的新功能。

mongodmongos均可用。

设置旧分片群集连接池中的连接在关闭之前可以保持空闲的时间限制。

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

您只能在启动过程中在配置文件或命令行中设置shardedConnPoolIdleTimeoutMinutes。例如:

mongos --setParameter shardedConnPoolIdleTimeoutMinutes=10
  • connPoolMaxConnsPerHost
    • 2.6 版的新功能。

默认:200

mongodmongos均可用。

设置用于与其他mongod实例的传出连接的旧版连接池的最大大小。池的大小不会阻止创建其他连接,但是会阻止连接池保留超过connPoolMaxConnsPerHost值的连接。

Note

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

如果驱动程序不构建缓冲池连接并且您在分片群集的上下文中使用身份验证,则仅调整此设置。

您只能在启动过程中在配置文件或命令行中设置connPoolMaxConnsPerHost。例如:

mongod --setParameter connPoolMaxConnsPerHost=250
  • connPoolMaxInUseConnsPerHost
    • 版本 3.6.3 中的新功能。

mongodmongos均可用。

设置在任何给定时间用于到旧全局连接池中其他mongod实例的传出连接的最大使用中连接数。

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

您只能在启动过程中在配置文件或命令行中设置connPoolMaxInUseConnsPerHost。例如:

mongod --setParameter connPoolMaxInUseConnsPerHost=100
  • globalConnPoolIdleTimeoutMinutes
    • 版本 3.6.3 中的新功能。

mongodmongos均可用。

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

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

您只能在启动过程中在配置文件或命令行中设置globalConnPoolIdleTimeoutMinutes。例如:

mongos --setParameter globalConnPoolIdleTimeoutMinutes=10
  • cursorTimeoutMillis
    • 3.0.2 版中的新功能。

默认值:600000(即 10 分钟)

mongodmongos均可用。

在 MongoDB 删除闲置游标之前,以毫秒为单位设置到期阈值;即 MongoDB 删除指定cursorTimeoutMillis处于空闲状态的游标。

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

mongod --setParameter cursorTimeoutMillis=300000

或者,如果在mongo shell 中使用setParameter命令:

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

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

  • failIndexKeyTooLong
    • 2.6 版的新功能。

仅适用于mongod

在 MongoDB 2.6 中,如果您尝试插入或更新文档以使索引字段的值比索引键长度限制长,则该操作将失败并向 Client 端返回错误。在 MongoDB 的早期版本中,这些操作将成功插入或修改文档,但一个或多个索引将不包含对该文档的引用。

为避免此问题,请考虑使用hashed indexes或索引计算值。如果您已有数据集并希望禁用此行为,以便可以升级然后逐步解决这些索引问题,则可以使用failIndexKeyTooLong禁用此行为。

failIndexKeyTooLong默认为true。当false时,2.6 mongod实例将提供 2.4 行为。

发出以下命令以禁用索引键长度验证:

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

您还可以在启动时使用以下选项设置failIndexKeyTooLong

mongod --setParameter failIndexKeyTooLong=false

默认true

仅适用于mongod

仅适用于 MMAPv1 存储引擎。

  • notablescan

指定“全部”查询是否必须使用索引。如果1,则 MongoDB 将不会执行需要进行集合扫描的查询,并会返回错误。

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

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

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

要检测不带notablescan的未索引查询,请考虑阅读评估当前运营的绩效优化查询性能部分,并使用logLevel参数mongostatprofiling

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

  • ttlMonitorEnabled

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

要为mongod禁用此工作线程,请按照以下操作将ttlMonitorEnabled设置为false

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

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

mongod --setParameter ttlMonitorEnabled=false
  • disableJavaScriptJIT
    • 3.2 版中的新功能。

仅适用于mongod

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

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

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

请注意,group$where将重用现有的 JavaScript 解释器上下文,因此对disableJavaScriptJIT的更改可能不会立即对这些操作生效。

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

mongod --setParameter disableJavaScriptJIT=true
  • maxIndexBuildMemoryUsageMegabytes
    • 3.4 版的新功能。

默认:500

限制在一个构建期间在一个集合上同时进行的前台索引构建可能消耗的内存量。

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

前景索引构建可以通过诸如Create Index的用户命令或诸如initial sync的 Management 过程来启动。两者都受maxIndexBuildMemoryUsageMegabytes设置的限制。

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

Tip

为了最大程度地减少在具有副本集分片的副本集和分片群集上构建索引的影响,请按照在副本集上构建索引所述使用滚动索引生成过程。

  • reportOpWriteConcernCountersInServerStatus
    • 版本 3.6.11 中的新功能。

默认:false

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

您只能在启动过程中在配置文件或命令行中设置reportOpWriteConcernCountersInServerStatus。例如:

mongod --setParameter reportOpWriteConcernCountersInServerStatus=true
[1]启用reportOpWriteConcernCountersInServerStatus会对性能产生负面影响;具体来说,当运行 TLS 时。
  • watchdogPeriodSeconds
    • 3.6 版的新功能。

仅适用于mongod

类型:整数

默认:-1(禁用)

Note

仅在 MongoDB Enterprise 中可用。在 macOS 上不可用。

确定存储节点看门狗多久检查一次受监视文件系统的状态。

Note

如果受监视目录上的文件系统无响应,则终止最多可能花费watchdogPeriodSeconds值的近两倍。

有效值为-1,表示已禁用存储节点看门狗,或者是大于或等于 60 的整数。

默认情况下,存储节点看门狗是禁用的。要启用它,必须在启动时设置watchdogPeriodSeconds

mongod --setParameter watchdogPeriodSeconds=60

您只能在启动时启用存储节点看门狗

但是,启用后,您可以在运行时暂停存储节点看门狗或更改watchdogPeriodSeconds

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

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

要在运行时恢复或更改时间段,请将watchdogPeriodSeconds设置为大于或等于 60 的数字。

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

Note

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

  • tcmallocReleaseRate
    • 3.6.17 版中的新功能。

Default: 1.0

指定 tcmalloc 释放速率(TCMALLOC_RELEASE_RATE)。每个https://gperftools.github.io/gperftools/tcmalloc.html#runtime TCMALLOC_RELEASE_RATE 被描述为:

Note

在支持内存的系统上,我们通过 madvise(MADV_DONTNEED)将未使用的内存释放给系统的速率。零表示我们永远不会将内存释放回系统。增加此标志可更快地返回内存;减少它以更慢地返回内存。合理的比率在[0,10]范围内。

https://gperftools.github.io/gperftools/tcmalloc.html#runtime

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

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

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

mongod --setParameter "tcmallocReleaseRate=5.0"

Logging Parameters

05之间指定一个整数,表示日志记录的详细程度,其中5是最详细的。

考虑以下将logLevel设置为2的示例:

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

默认的logLevel0

  • logComponentVerbosity
    • 3.0.0 版中的新功能。

mongodmongos均可用。

log messages设置各种components的详细程度。详细程度决定了 MongoDB 输出的信息和调试条消息的数量。

详细级别的范围是05

  • 0是 MongoDB 的默认日志详细级别,其中包含Informational条消息。

  • 15增加了详细程度,以包含Debug条消息。

对于组件,您还可以指定-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设置所有组件的默认级别。 systemLog.verbosity的默认值为0

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

除非明确设置,否则组件将具有其父级的详细级别。例如,storagestorage.journal的父级。也就是说,如果您指定storage详细级别,则该级别也适用于storage.journal组件,除非您为storage.journal指定详细级别。

例如,以下将默认详细程度设置为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}"

mongo shell 还提供db.setLogLevel()来设置单个组件的日志级别。有关设置日志详细级别的各种方法,请参见配置日志详细级别

指定1以启用用户 ID 的日志记录。

默认禁用。

  • maxLogSizeKB
    • 3.4 版的新功能。

mongodmongos均可用。

类型:整数

默认:10

指定日志行的最大大小(以千字节为单位)。超过此限制的行仅打印行的开头和结尾,将中间部分切除。

例如,以下将最大大小设置为20 KB:

mongod --setParameter maxLogSizeKB=20

Warning

maxLogSizeKB使用较大的值可能会对系统性能产生不利影响,并对数据库操作产生不利影响。

设置安静的日志记录模式。如果1,则mongod将进入安静的日志记录模式,该模式将不记录以下事件/活动:

考虑以下将quiet设置为1的示例:

db.adminCommand( { setParameter: 1, quiet: 1 } )
  • redactClientLogData
    • 3.4 版的新功能。

mongodmongos均可用。

类型:布尔值

Enterprise Feature

仅在 MongoDB Enterprise 中可用。

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

redactClientLogData静态加密TLS/SSL(传输加密)结合使用可帮助遵守法规要求。

要在正在运行的mongodmongos上启用日志编辑,请使用以下命令:

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

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

考虑以下将traceExceptions设置为true的示例:

db.adminCommand( { setParameter: 1, traceExceptions: true } )
  • suppressNoTLSPeerCertificateWarning
    • 3.6.6 版中的新功能。

mongodmongos均可用。

类型:布尔值

默认:false

默认情况下,带有TLS/SSL enablednet.ssl.allowConnectionsWithoutCertificatesmongodmongostrue允许 Client 端连接,而无需在记录警告时提供用于验证的证书。将suppressNoTLSPeerCertificateWarning设置为1true以禁止显示这些警告。

以下操作将suppressNoTLSPeerCertificateWarning设置为true

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

Diagnostic Parameters

为了便于 MongoDB 工程师分析 MongoDB 服务器行为,MongoDB 定期将服务器统计信息记录到诊断文件中。

对于mongod,诊断数据文件存储在mongod实例的--dbpathstorage.dbPath下的diagnostic.data目录中。

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

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

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

Note

选择诊断数据捕获间隔的默认值和最大大小可为 MongoDB 工程师提供有用的数据,而对性能和存储大小的影响最小。通常,这些值仅需要按 MongoDB 工程师的要求进行修改才能用于特定的诊断目的。

  • diagnosticDataCollectionEnabled
    • 3.2 版中的新功能。

在 3.4.14 版中进行了更改:mongodmongos均可用。

类型:布尔值

默认:true

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

例如,以下禁用诊断收集:

mongod --setParameter diagnosticDataCollectionEnabled=false
  • diagnosticDataCollectionDirectoryPath
    • 3.4.14 版中的新功能。

类型:字符串

仅适用于mongos

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

如果未指定,则通过截断mongos实例的--logpathsystemLog.path文件 extensions 并将diagnostic.data串联来计算诊断数据目录。

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

Important

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

  • diagnosticDataCollectionDirectorySizeMB
    • 3.2 版中的新功能。

在版本 3.4 中更改:将默认大小增加到 200 兆字节。

在 3.4.14 版中进行了更改:mongodmongos均可用。

类型:整数

默认:200

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

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

mongod --setParameter diagnosticDataCollectionDirectorySizeMB=250

diagnosticDataCollectionDirectorySizeMB的最小值是10兆字节。 diagnosticDataCollectionDirectorySizeMB必须大于最大诊断文件大小diagnosticDataCollectionFileSizeMB

  • diagnosticDataCollectionFileSizeMB
    • 3.2 版中的新功能。

在 3.4.14 版中进行了更改:mongodmongos均可用。

类型:整数

默认:10

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

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

mongod --setParameter diagnosticDataCollectionFileSizeMB=20

diagnosticDataCollectionFileSizeMB的最小值是1兆字节。

  • diagnosticDataCollectionPeriodMillis
    • 3.2 版中的新功能。

在 3.4.14 版中进行了更改:mongodmongos均可用。

类型:整数

默认:1000

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

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

mongod --setParameter diagnosticDataCollectionPeriodMillis=5000

diagnosticDataCollectionPeriodMillis的最小值是100毫秒。

逻辑会话参数

logicalSessionRefreshMillis

Availability

3.6.9 版中的新功能。

mongodmongos均可用。

类型:整数

默认值:300000(即 5 分钟)

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

您只能在启动时设置logicalSessionRefreshMillis,而不能使用setParameter命令更改此设置。

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

mongod --setParameter logicalSessionRefreshMillis=600000

logicalSessionRefreshMinutes

Availability

仅适用于 MongoDB 3.6.0-3.6.8. 从 3.6.9 开始,请参见logicalSessionRefreshMillis

mongodmongos均可用。

类型:整数

默认:5

缓存针对主会话存储刷新其逻辑会话记录的时间间隔(分钟)。

您只能在启动时设置logicalSessionRefreshMinutes,而不能使用setParameter命令更改此设置。

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

mongod --setParameter logicalSessionRefreshMinutes=10
  • localLogicalSessionTimeoutMinutes
    • 3.6 版的新功能。

mongodmongos均可用。

类型:整数

默认:30

For testing purposes only

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

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

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

您只能在启动时设置localLogicalSessionTimeoutMinutes,而不能使用setParameter命令更改此设置。

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

mongod --setParameter localLogicalSessionTimeoutMinutes=20
  • maxAcceptableLogicalClockDriftSecs
    • 3.6 版的新功能。

mongodmongos均可用。

类型:整数

默认:31536000(1 年)

当前集群时间可以提前的最大数量;即maxAcceptableLogicalClockDriftSecs是群集时间的新值与当前群集时间之间的最大差值。群集时间是用于对操作进行排序的逻辑时间。

如果新群集时间与当前群集时间相差maxAcceptableLogicalClockDriftSecs以上,则不能将群集时间提前到新值。

您只能在启动时设置maxAcceptableLogicalClockDriftSecs,而不能使用setParameter命令更改此设置。

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

mongod --setParameter maxAcceptableLogicalClockDriftSecs=900
  • maxSessions
    • 3.6.7 版中的新功能。

mongodmongos均可用。

类型:整数

默认:1000000

可以缓存的最大会话数。

您只能在启动过程中设置maxSessions

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

mongod --setParameter maxSessions=1000
  • TransactionRecordMinimumLifetimeMinutes
    • 3.6 版的新功能。

仅适用于mongod

类型:整数

默认:30

记录_transactions集合中存在事务记录的最短生存时间,然后该记录才有资格进行清除。

您只能在启动时设置TransactionRecordMinimumLifetimeMinutes,而不能使用setParameter命令更改此设置。

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

mongod --setParameter TransactionRecordMinimumLifetimeMinutes=20

Replication Parameters

  • replApplyBatchSize

指定要作为单个批次应用的操作日志条目数。 replApplyBatchSize必须为 1 到 1024 之间的整数。默认值为 1.此选项仅适用于主/从配置,并且仅在以--slave命令行选项开头的mongod上有效。

对于配置了slavedelay的成员,批次大小必须为1

  • replIndexPrefetch

配置副本集时,将replIndexPrefetchreplSetName结合使用。默认值为all,可用选项为:

  • none

  • all

  • _id_only

默认情况下,replica setsecondary成员将与操作相关的所有索引加载到内存中,然后再从 oplog 应用操作。您可以修改此行为,以便辅助服务器仅加载_id索引。指定_id_onlynone以防止mongod将* any *索引加载到内存中。

  • replWriterThreadCount
    • 3.2 版中的新功能。

类型:整数

默认:16

仅适用于mongod

用于并行应用复制操作的线程数。值的范围可以从 1 到 256(含)。您只能在启动时设置replWriterThreadCount,而不能使用setParameter命令更改此设置。

  • oplogInitialFindMaxSeconds
    • 3.6 版的新功能。

类型:整数

默认:60

仅适用于mongod

replica set的成员在data synchronization期间 await 其find命令完成的最长时间(以秒为单位)。

  • waitForSecondaryBeforeNoopWriteMS
    • 3.6 版的新功能。

仅适用于mongod

类型:整数

默认:10

如果afterClusterTime大于操作日志中最后一次应用的时间,则辅助节点必须 await 的时间长度(以毫秒为单位)。在waitForSecondaryBeforeNoopWriteMS通过之后,如果afterClusterTime仍然大于上次施加的时间,则辅助节点执行空操作写操作以延长上一次施加的时间。

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

mongod --setParameter waitForSecondaryBeforeNoopWriteMS=20

在运行时,您还可以使用setParameter命令设置参数:

db.adminCommand( { setParameter: 1, waitForSecondaryBeforeNoopWriteMS: 20 } )
  • enableElectionHandoff
    • 3.6.7 版中的新功能。

类型:布尔值

默认:true

一个标志,可以减少主要对象从rs.stepDown()方法或replSetStepDown命令降级后的停机时间。具体而言,如果为 true,则当主节点在rs.stepDown()之后(或在没有force: truereplSetStepDown命令之后)降级时,它将提名合格的辅助节点立即调用选举。如果为 false,则在降级之后,次要人员可以 awaitsettings.electionTimeoutMillis才能调用选举。

合格的中学必须赶上降级的中学,并且priority大于 0.如果多个中学成员符合此条件,则降级的小学将选择最高priority的合格中学。如果不止一个合格的辅助成员具有相同的priority,则降级的主要成员将选择_id最低的辅助成员。降级的主服务器不 await 切换的效果。

如果主数据库因rs.stepDown()(或不含force: truereplSetStepDown命令)以外的其他原因降级,则该参数不起作用。

Sharding Parameters

  • replMonitorMaxFailedChecks
    • 仅在 MongoDB 3.2 中可用

Type: integer

Default: 30

mongodmongos实例尝试到达分片群集中的副本集(例如,分片副本集,配置服务器副本集)以监视副本集状态和拓扑的次数。

当连续失败尝试的次数超过此参数值时,mongodmongos实例将监视的副本集设置为不可用。如果监视的副本集是配置服务器副本集:

  • 对于 MongoDB 3.2.0-3.2.9,监视mongodmongos实例将变得不可用,需要重新启动。有关更多详细信息,请参见troubleshooting guide

  • 对于 MongoDB 3.2.10 和更高版本的 3.2 系列,另请参阅timeOutMonitoringReplicaSets

  • timeOutMonitoringReplicaSets

    • *仅在 MongoDB 3.2.10 和更高版本 3.2 系列中可用

Type: integer

Default: false

确定mongodmongos实例是否应尝试失败replMonitorMaxFailedChecks次后停止访问受监视副本集的标志。

如果受监视的副本集是配置服务器副本集,并且timeOutMonitoringReplicaSets设置为true,则如果mongodmongos实例在指定的次数内无法访问任何配置服务器,则必须重新启动mongodmongos。有关更多详细信息,请参见troubleshooting guide

  • ShardingTaskExecutorPoolHostTimeoutMS
    • Type: integer

默认值:300000(即 5 分钟)

仅适用于mongos

mongos断开与主机的所有连接之前,mongos不与主机通信的最长时间。

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

如果已设置,则ShardingTaskExecutorPoolHostTimeoutMS应大于ShardingTaskExecutorPoolRefreshRequirementMSShardingTaskExecutorPoolRefreshTimeoutMS的总和。否则,mongosShardingTaskExecutorPoolHostTimeoutMS的值调整为大于总和。

mongos --setParameter ShardingTaskExecutorPoolHostTimeoutMS=120000
  • ShardingTaskExecutorPoolMaxConnecting
    • 3.6 版的新功能。

Type: integer

Default: 2

仅适用于mongos

每个 TaskExecutor 连接池可与mongod实例同时启动的最大连接数(包括处于设置/刷新状态的挂起连接)。您可以设置此参数来控制mongosmongod实例添加连接的速率。

如果设置,则ShardingTaskExecutorPoolMaxConnecting应小于或等于ShardingTaskExecutorPoolMaxSize。如果更大,则mongos将忽略ShardingTaskExecutorPoolMaxConnecting值。

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

mongos --setParameter ShardingTaskExecutorPoolMaxConnecting=20
  • ShardingTaskExecutorPoolMaxSize
    • Type: integer

默认值:264-1

仅适用于mongos

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

ShardingTaskExecutorPoolMaxSize * taskExecutorPoolSize

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

mongos --setParameter ShardingTaskExecutorPoolMaxSize=4

mongos最多可以具有n个 TaskExecutor 连接池,其中n是内核数。参见taskExecutorPoolSize

  • ShardingTaskExecutorPoolMinSize
    • Type: integer

Default: 1

仅适用于mongos

每个 TaskExecutor 连接池可以打开到任何给定mongod实例的最小出站连接数。

第一次从池中请求到新主机的连接时,将创建ShardingTaskExecutorPoolMinSize连接。当池处于空闲状态时,池将保持此连接数,直到ShardingTaskExecutorPoolHostTimeoutMS毫秒过去,而没有任何应用程序使用该池。

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

mongos --setParameter ShardingTaskExecutorPoolMinSize=2

mongos最多可以具有n个 TaskExecutor 连接池,其中n是内核数。参见taskExecutorPoolSize

  • ShardingTaskExecutorPoolRefreshRequirementMS
    • Type: integer

默认值:60000(1 分钟)

仅适用于mongos

mongos尝试对心跳池中的静止连接进行心跳检测的最长时间。

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

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

mongos --setParameter ShardingTaskExecutorPoolRefreshRequirementMS=90000
  • ShardingTaskExecutorPoolRefreshTimeoutMS
    • Type: integer

默认值:20000(20 秒)

仅适用于mongos

mongos在心跳超时之前 await 心跳的最长时间。

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

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

mongos --setParameter ShardingTaskExecutorPoolRefreshTimeoutMS=30000
  • taskExecutorPoolSize
    • Type: integer

默认值:核心数

仅适用于mongos

给定的mongos要使用的 Task Executor 连接池的数量。该参数的最小值为4,最大值为64

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

mongos --setParameter taskExecutorPoolSize=6
  • migrateCloneInsertionBatchDelayMS
    • 3.6.10 版中的新增功能:从 3.4.18 开始,该参数也可用。

仅适用于mongod

类型:非负整数

Default: 0

在迁移过程的克隆步骤中,在批次插入之间 await 的时间(以毫秒为单位)。此 await 是secondaryThrottle的补充。

默认值0表示没有其他 await。

以下将migrateCloneInsertionBatchDelayMS设置为 200 毫秒:

mongod --setParameter migrateCloneInsertionBatchDelayMS=200

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

db.adminCommand( { setParameter: 1, migrateCloneInsertionBatchDelayMS: 200 } )
  • migrateCloneInsertionBatchSize
    • 3.6.10 版中的新增功能:从 3.4.18 开始,该参数也可用。

仅适用于mongod

类型:非负整数

Default: 0

在迁移过程的克隆步骤中,单个批次中要插入的最大文档数。

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

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

mongod --setParameter migrateCloneInsertionBatchSize=100

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

db.adminCommand( { setParameter: 1, migrateCloneInsertionBatchSize: 100 } )
  • orphanCleanupDelaySecs
    • 3.6 版的新功能。

默认值:900(15 分钟)

仅适用于mongod

从源分片中删除迁移的chunk之前的最小延迟。

在块迁移期间删除块之前,MongoDBawaitorphanCleanupDelaySecs或正在进行的涉及该块的查询在分片主数据库上完成,以时间较长者为准。

但是,由于分片主数据库不了解在分片辅助数据库上运行的正在进行的查询,因此,如果使用这些块但在次数据库上运行的查询所花的时间比完成分片主数据库查询所需的时间长,则文档可能会消失。 orphanCleanupDelaySecs

Note

此行为仅影响在块迁移之前开始的正在进行的查询。在块迁移开始之后开始的查询将不使用迁移块。

如果一个分片有存储限制,请考虑暂时减少该值。如果在分片辅助数据库上运行超过 15 分钟的查询,请考虑增加此值。

以下将orphanCleanupDelaySecs设置为 20 分钟:

mongod --setParameter orphanCleanupDelaySecs=1200

也可以使用setParameter命令进行设置:

db.adminCommand( { setParameter: 1, orphanCleanupDelaySecs: 1200 } )
  • rangeDeleterBatchDelayMS
    • 版本 3.6.7 中的新增功能:从 3.4.17 开始,该参数也可用。

仅适用于mongod

类型:非负整数

Default: 20

chunk migration(或cleanupOrphaned命令)的清理阶段中,下一批删除之前 await 的时间(以毫秒为单位)。

在 MongoDB 3.4 中,请在修改rangeDeleterBatchDelayMS之前考虑是否设置了_secondaryThrottle。在 MongoDB 3.4 中,_secondary 油门复制延迟出现在每个文档删除之后而不是批量删除之后。

在 MongoDB 3.6 中,每次删除批处理后都会出现_secondary 油门复制延迟

以下将rangeDeleterBatchDelayMS设置为 200 毫秒:

mongod --setParameter rangeDeleterBatchDelayMS=200

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

db.adminCommand( { setParameter: 1, rangeDeleterBatchDelayMS: 200 } )
  • rangeDeleterBatchSize
    • 3.6.10 版中的新增功能:从 3.4.19 开始,该参数也可用。

仅适用于mongod

类型:非负整数

Default: 0

chunk migration(或cleanupOrphaned命令)的清理阶段要删除的每批文档中的最大文档数。

默认值0表示系统选择适当的值,通常为 128 个文档。

以下将rangeDeleterBatchSize设置为 100 个文档:

mongod --setParameter rangeDeleterBatchSize=100

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

db.adminCommand( { setParameter: 1, rangeDeleterBatchSize: 100 } )
  • skipShardingConfigurationChecks
    • 版本 3.6.3 中的新功能。

仅适用于mongod

Type: boolean

Default: false

true时,允许以独立方式启动分片成员或配置服务器成员进行维护操作。此参数与--configsvr--shardsvr选项互斥。

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

mongod --setParameter skipShardingConfigurationChecks=true

Important

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

该参数也可用于 MongoDB 版本:

  • MongoDB 3.2.19+

  • MongoDB 3.4.11+

Storage Parameters

  • journalCommitInterval

1500之间指定一个整数,表示两次日记提交之间的毫秒数。

考虑以下将journalCommitInterval设置为200 ms 的示例:

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

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

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

db.adminCommand( { setParameter: 1, syncdelay: 60 } )
  • honorSystemUmask
    • 3.6 版的新功能。

默认false

如果honorSystemUmask设置为true,则 MongoDB 创建的新文件将根据用户的umask设置具有权限。

如果honorSystemUmask设置为false,则 MongoDB 创建的新文件的权限设置为600,这仅向所有者授予读写权限。新目录的权限设置为700

您只能在启动期间设置此参数,而不能使用setParameter数据库命令更改此设置。

mongod --setParameter honorSystemUmask=true

Note

honorSystemUmask在 Windows 系统上不可用。

WiredTiger Parameters

  • wiredTigerMaxCacheOverflowSizeGB
    • 从 3.6.15 开始提供 3.6 系列

默认:0(未指定最大值)

仅适用于mongod

指定“后备(或缓存溢出)表”文件WiredTigerLAS.wt的最大大小(以 GB 为单位)。

该参数可以接受以下值:

ValueDescription
0默认值。如果设置为0,则文件大小不受限制。
数> = 0.1最大大小(以 GB 为单位)。如果WiredTigerLAS.wt文件超出此大小,则mongod退出并带有致命 assert。您可以清除WiredTigerLAS.wt文件并重新启动mongod

您只能在运行时使用setParameter数据库命令设置此参数:

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

要在启动期间设置最大大小,请改用storage.wiredTiger.engineConfig.maxCacheOverflowFileSizeGB

  • wiredTigerConcurrentReadTransactions
    • 3.0.0 版中的新功能。

仅适用于mongod

仅适用于 WiredTiger 存储引擎。

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

db.adminCommand( { setParameter: 1, wiredTigerConcurrentReadTransactions: <num> } )
  • wiredTigerConcurrentWriteTransactions
    • 3.0.0 版中的新功能。

仅适用于mongod

仅适用于 WiredTiger 存储引擎。

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

db.adminCommand( { setParameter: 1, wiredTigerConcurrentWriteTransactions: <num> } )
  • wiredTigerEngineRuntimeConfig
    • 3.0.0 版中的新功能。

仅适用于mongod

为正在运行的mongod实例指定wiredTiger存储引擎配置选项。您可以使用setParameter命令设置此参数,而不能使用命令行或配置文件选项设置。

Warning

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

考虑以下操作原型:

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

有关所有可用的WiredTiger 配置选项的信息,请参见 WiredTiger 文档。

Auditing Parameters

  • auditAuthorizationSuccess
    • 2.6.5 版中的新功能。

默认false

Note

仅在MongoDB Enterprise中可用。

mongodmongos均可用。

authCheck操作启用auditing授权成功。

auditAuthorizationSuccessfalse时,audit system仅记录authCheck的授权失败。

要启用授权成功审计,请发出以下命令:

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

与仅记录授权失败相比,启用auditAuthorizationSuccess会降低性能。

See also