网站建设客户合同范本,一微网站建设公司好,襄樊网站推广,网页设计模板html代码压缩包下载目录一、MongoDB启动超慢1、启动日常卡住#xff0c;根本不用为了截屏而快速操作#xff0c;MongoDB启动真的超级慢~~2、启动MongoDB配置服务器#xff0c;间歇性失败。3、查看MongoDB日志#xff0c;分析“MongoDB启动慢”的原因。4、耗时“一小时”#xff0c;MongoDB启…
目录一、MongoDB启动超慢1、启动日常卡住根本不用为了截屏而快速操作MongoDB启动真的超级慢~~2、启动MongoDB配置服务器间歇性失败。3、查看MongoDB日志分析“MongoDB启动慢”的原因。4、耗时“一小时”MongoDB启动成功二、原因分析三、监控MongoDB内存使用情况四、监控MongoDB磁盘空间五、MongoDB常用命令1、MongoDB获取系统信息2、MongoDB获取系统内存情况3、MongoDB获取连接数信息4、MongoDB获取全局锁信息5、MongoDB获取操作统计计数器6、MongoDB获取数据库状态信息六、MongoDB持久性大家好我是哪吒最近项目在使用MongoDB作为图片和文档的存储数据库为啥不直接存MySQL里还要搭个MongoDB集群麻不麻烦让我们一起一探究竟继续学习MongoDB数据库性能监控实现快速入门丰富个人简历提高面试level给自己增加一点谈资秒变面试小达人BAT不是梦。 一、MongoDB启动超慢
1、启动日常卡住根本不用为了截屏而快速操作MongoDB启动真的超级慢~~ 2、启动MongoDB配置服务器间歇性失败。 3、查看MongoDB日志分析“MongoDB启动慢”的原因。 4、耗时“一小时”MongoDB启动成功 二、原因分析
在MongoDB关闭之前有较大的索引建立的操作没有完成MongoDB就直接shutdown了等MongoDB再次启动的时候MongoDB默认会将这个index重建好重建期间处于startup状态。
由于不清楚重建索引需要多久因此可以通过重启mongod时加上–noIndexBuildRetry参数来跳过索引重建。等启动完成后再创建这个索引。
下面从几方面监控一下MongoDB的性能问题。
三、监控MongoDB内存使用情况 常驻内存 是MongoDB在RAM中显式拥有的内存。如果查询一个集合数据MongoDB会将其放入常驻内存中MongoDB会获得其地址这个地址不是RAM中数据的真实地址而是一个虚拟地址。MongoDB可以将它传递给内核内核会查找出数据的真实位置。如果内核需要从内存中清理缓存MongoDB仍然可以通过该地址对其进行访问。MongoDB会向内核请求内存然后内核会查看数据缓存如果发现数据不存在就会产生缺页错误并将数据复制到内存中最后再返给MongoDB。MongoDB的虚拟内存 是操作系统提供的一种抽象它对软件进程隐藏了物理存储的细节。每个进程都可以看到一个连续的内存地址空间。在Ops Manager中MongoDB的虚拟内存是映射内存的两倍。MongoDB的映射内存 包含MongoDB曾经访问过的所有数据。 四、监控MongoDB磁盘空间
当磁盘空间不足时可以进行如下操作
可以添加一个分片删除未使用的索引可以执行压缩操作关闭副本集成员将其数据复制到更大的磁盘中挂载用较大驱动器的成员替换副本集中的成员
五、MongoDB常用命令
1、MongoDB获取系统信息
db.hostInfo()2、MongoDB获取系统内存情况
db.serverStatus().mem3、MongoDB获取连接数信息
db.serverStatus().connections4、MongoDB获取全局锁信息
db.serverStatus().globalLock5、MongoDB获取操作统计计数器
db.serverStatus().opcounters6、MongoDB获取数据库状态信息
db.stats()以上是MongoDB的重要指标通过这些指标我们可以了解到MongoDB的运行状态评估数据库的健康程度并快速确定实际项目中遇到的性能瓶颈。
比如项目中遇到的MongoSocketReadTimeoutException
com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving messageat com.mongodb.connection.InternalStreamConnection.translateReadException(InternalStreamConnection.java:475)at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:226)at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.java:105)at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.java:438)at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:112)at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168)at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289)at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:176)at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:216)at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:207)at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:113)at com.mongodb.operation.FindOperation$1.call(FindOperation.java:488)at com.mongodb.operation.FindOperation$1.call(FindOperation.java:1)at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:241)at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:214)at com.mongodb.operation.FindOperation.execute(FindOperation.java:483)at com.mongodb.operation.FindOperation.execute(FindOperation.java:1)at com.mongodb.Mongo.execute(Mongo.java:818)六、MongoDB持久性
复制延迟是指从节点无法跟上主节点的速度。
从节点一个操作的时间减去主节点此操作的时间就是复制延迟。延迟应该尽可能的接近0并且通常是毫秒级的。
备份操作通常会将所有数据读入内存因此备份操作通常应该在副本集从节点而不是主节点进行如果是单机MongoDB则应该在空间时间进行备份比如深夜凌晨。
持久性是数据库必备的一种特性想象一下如果数据库不具备持久性如果数据库重启数据全部丢失太可怕了不敢想。
为了在服务器发生故障时提供持久性MongoDB使用预写式日志机制英文简称 WAL。WAL是数据库系统中一种常见的持久性技术。在数据存入数据库之前将这些更改操作写到磁盘上。
从MongoDB4.0开始执行写操作时MongoDB会使用与oplog相同的格式创建日志。oplog语句具有幂等性不管执行多少次结果都是一样的。
MongoDB还维护了日志和数据库数据文件的内存视图。默认情况每50毫秒会将日志条目刷新到磁盘上每60秒会将数据库文件刷新到磁盘上。刷新数据的时间60秒间隔被称为检查点。日志用于将上一个检查点之后的数据提供持久性。MongoDB的持久性就是在发生故障时重启之后将日志中的语句重新执行一遍以保证在关闭前丢失的数据重新刷新到MongoDB中。
MongoDB会在data目录下创建一个journal的子目录WiredTiger日志文件的名称为WiredTigerLog.sequence。sequence是一个从0 000 000 001开始的数字。 MongoDB会对写入的日志进行压缩日志文件限制的最大大小为100MB。如果大于100MBMongoDB就会自动创建一个新的日志文件由于日志文件只需在上次检查点之后恢复数据因此在新的检查点写入完成时旧的日志文件就会被删除。 Java学习路线总结搬砖工逆袭Java架构师
10万字208道Java经典面试题总结(附答案)
Java基础教程系列
Java基础教程系列进阶篇