MongoDB 服务器优化说明
2021/9/27 19:11:41
本文主要是介绍MongoDB 服务器优化说明,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
软件层面优化
设置WiredTiger的cacheSizeGB
默认配置在系统可用内存的60%左右,如果一台机器上只部署一个mongod,mongod可以使用所有可用内存,则使用默认配置即可。
storage.wiredTiger.engineConfig.cacheSizeGB
值的范围可以从 0.25 GB 到 10000 GB。
从 MongoDB 3.4 开始,默认的 WiredTiger 内部缓存大小是以下两者中的较大者:50% (RAM - 1 GB) 或 256 MB。
分配足够的Oplog空间
Oplog是MongoDB local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的。MongoDB默认将其大小设置为可用disk空间的5%(默认最小为1G,最大为50G)。
启用Log Rotation日志切换
systemLog.logRotate
日志回转,防止一个日志文件特别大。默认值rename,重命名日志文件。可选值reopen,使用Linux日志rotate特性,关闭并重新打开次日志文件,可以避免日志丢失,但是logAppend必须为true。
systemLog.logAppend
默认值: false
当为 true 时,mongos 或 mongod 会在 mongos 或 mongod 实例重新启动时将新条目附加到现有日志文件的末尾。 如果没有此选项,mongod 将备份现有日志并创建一个新文件。
systemLog.verbosity
0 是 MongoDB 的默认日志详细级别,包括信息性消息。
1 到 5 增加了详细级别以包括调试消息。
systemLog.quiet
默认值: false
在尝试限制输出量的安静模式下运行 mongos 或 mongod。
systemLog.quiet 不推荐用于生产系统,因为它可能会使特定连接期间的跟踪问题变得更加困难。
systemLog.traceAllExceptions
默认值: false
打印用于调试的详细信息。 用于与支持相关的故障排除的附加日志记录。
systemLog.destination
MongoDB 将所有日志输出发送到的目标。 指定file或syslog。 如果指定file,则还必须指定 systemLog.path。
如果不指定 systemLog.destination,MongoDB 会将所有日志输出发送到标准输出。
警告:syslog 守护进程在记录消息时生成时间戳,而不是在 MongoDB 发出消息时生成时间戳。 这可能会导致日志条目的时间戳具有误导性,尤其是在系统负载较重时。 我们建议对生产系统使用 file 选项以确保准确的时间戳。
systemLog.path
mongod 或 mongos 应将所有诊断日志信息发送到的日志文件的路径,而不是标准输出或主机的系统日志。 MongoDB 在指定路径创建日志文件。
Linux 包 init 脚本不希望 systemLog.path 更改默认值。 如果您使用 Linux 软件包并更改 systemLog.path,则必须使用您自己的 init 脚本并禁用内置脚本。
设置journal日志刷新时间和flush时间
storage.journal.commitIntervalMs
默认值:100
mongod 进程允许在日志操作之间的最长时间(以毫秒为单位)。 值的范围可以从 1 到 500 毫秒。 较低的值会增加日志的持久性,但会降低磁盘性能。
在 WiredTiger 上,默认的日志提交间隔是 100 毫秒。 此外,包含或暗示 j:true 的写入将导致日志立即同步。 有关影响同步频率的详细信息或其他条件,请参阅日志记录过程。
storage.journal.commitIntervalMs 设置仅适用于 mongod。不适用于使用内存存储引擎的 mongod 实例。
4.2.0 中的已知问题:4.2.0 中缺少 storage.journal.commitIntervalMs。
storage.syncPeriodSecs
默认值:60
在 MongoDB 通过 fsync 操作将数据刷新到数据文件之前可以经过的时间量。
不要在生产系统上设置此值。 在几乎所有情况下,您都应该使用默认设置。
警告:如果将 storage.syncPeriodSecs 设置为 0,MongoDB 将不会将内存映射文件同步到磁盘。
mongod 进程将数据写入日志非常快,而懒惰地写入数据文件。 storage.syncPeriodSecs 对日志文件或日志没有影响,但如果 storage.syncPeriodSecs 设置为 0,日志最终将消耗所有可用磁盘空间。 如果出于测试目的将 storage.syncPeriodSecs 设置为 0,则还应将 --nojournal 设置为 true。
storage.syncPeriodSecs 设置仅适用于 mongod。不适用于使用内存存储引擎的 mongod 实例。
配置示例
storage: dbPath: /data/mongodb journal: enabled: true commitIntervalMs: 100 syncPeriodSecs: 60 systemLog: verbosity: 0 quiet: false traceAllExceptions: false destination: file logAppend: true logRotate: reopen path: /var/log/mongodb/mongod.log net: port: 27017 bindIp: 0.0.0.0 processManagement: timeZoneInfo: /usr/share/zoneinfo security: authorization: enabled keyFile: /data/mongodb/rs1.key replication: replSetName: rs1
系统层面优化
- MongoDB连接内存优化
- MongoDB连接数优化
- 关闭Transparent Huge Pages
- 使用XFS文件系统,同时禁掉数据库文件的atime
- 使用SSD或RAID10来提供存储IOPS能力
- 为Data和Journal/log分别使用单独的物理卷
- 禁用NUMA
- 设置vm.swappiness
- 修改磁盘调度算法
- 预读值(readahead)设置
- 设置Linux内核参数
设置允许用户/进程打开文件句柄数
创建/etc/profile.d/limit.sh文件,内容如下:
ulimit -n 1048576 ulimit -u 524288
编辑/etc/security/limits.conf文件,添加以下内容:
* soft nofile 1048576 * hard nofile 1048576 * soft nproc 524288 * hard nproc 524288
禁用NUMA
# vim /etc/systemd/system/disable-transparent-huge-pages.service [Unit] Description=Disable Transparent Huge Pages (THP) DefaultDependencies=no After=sysinit.target local-fs.target Before=mongod.service [Service] Type=oneshot ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null' [Install] WantedBy=basic.target # systemctl daemon-reload # systemctl start disable-transparent-huge-pages # systemctl enable disable-transparent-huge-pages # cat /sys/kernel/mm/transparent_hugepage/enabled
设置vm.swappiness
# vim /etc/sysctl.conf ... vm.swappiness = 0 # sysctl -p
修改磁盘调度算法
/sys/block/vda/queue/scheduler
预读值(readahead)设置
# blockdev --report # blockdev --setra 32 /dev/vda # vim /etc/systemd/system/modify-readahead.service [Unit] Description=Modify Readahead DefaultDependencies=no After=sysinit.target local-fs.target Before=mongod.service [Service] Type=oneshot ExecStart=/bin/sh -c 'blockdev --setra 32 /dev/vda' [Install] WantedBy=basic.target # systemctl daemon-reload # systemctl enable modify-readahead # reboot
这篇关于MongoDB 服务器优化说明的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享