Mongodb性能优化

---sMongodb性能优化

1.explain

db.t2.find({age:{$gt:25}}).explain();

 

执行计划中重要的属性

cursor:返回的游标的类型

nscanned:被扫描的文档数量

n:返回的文档的数量

millis:耗时(毫秒)

indexBounds所使用的索引

 

2.看损耗profile

  开启profiling功能

    启动Mongodb时加上-profile=级别即可

    客户端调用db.setProfilingLevel(级别)

    profiler信息保存在system.profile中  可以通过db.getProfilingLevel()来获取

    当前的profile级别。

 

    profile级别在Mongodb中有三个 分别是0,1,2

    0--->不开启

    1--->记录慢命令(默认执行时间>100ms)

                db.setProfilingLevel(1,slowms)

    2--->记录所有命令

 

   查看db.system.profile.find();

          db.system.profile.find({mills:{$gt:5}});

 

   重要的属性:

     ts :该命令何时执行的

     info:本命令的详细信息

     reslen:返回的结果集的大小

     nscanned:本次查询扫描的记录数

     nreturned:实际返回的结果集

     millis:该命令执行的消耗时间,单位毫秒

 

 3.常用的性能优化手段

    如果nscanned(扫描的记录数)远远大于了nreturned(返回的结果集)的话,

    那么我们就要考虑通过索引来优化记录定位了。

 

    reslen如果过大,说明返回的结果集过大,IO就大,过滤条件时候要处理,限定结果是否要处理

 

   索引优化的建议:如果很少读,那么不要加索引,索引越多,写越慢。索引适合读多写少的场景。

    建议1:在频繁作为查询条件且修改较少的属性上创建索引。

                     提供检索速度减低IO

              作为排序的属性要创建索引

                有索引列,就已经按照索引列排好了序,不需要进行排序运算了。

             降低了CPU

 

    建议2: 每次查询应该限定返回结果的条数

                降低的主要是IO

    建议3:只返回自己需要的属性。而不查询所有字段。

    建议4:有些情况下采用capped collection

                capped collection 本身比普通collection的读写效率要高。

        固定大小  预先创建,并设置大小

        可以insert ,update   不能delete,只能drop整个collection

            默认是基于insert 的次序排序的。

        FIFO

    建议5:可以使用存储过程来降低IO操作

    建议6:   可以强制使用索引hint

    建议7:   采用profiling

                   profiling功能肯定会影响效率,但是不太严重。

           使用system.profile来记录,其本身是capped collection

 

 4.性能监控

     主要利用Mongodb提供的工具Mongostat

     查看某运行中的Mongodb的实例统计信息

     直接mongostat--->看到了统计信息

     insert   每秒插入量

     query   每秒的查询量

     update 每秒的修改量

     delete  每秒删除的量

     locked:锁定量

     qr/qw :客户端查询排队的长度(读|写)

     ar/aw:活跃客户端量(读|写)

     conn:连接数。

 

     客户端可以通过调用db.serverStatus()来查看

     注意一下其中重要的内容

 

 

     db.stats();当前数据库的一些信息

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB性能优化是指通过一系列技术手段来提升MongoDB数据库的读写效率、响应速度和吞吐量。下面是一些常见的MongoDB性能优化方法: 1. 索引优化:使用合适的索引可以加速查询操作。在选择索引字段时,应根据查询的频率和字段的选择性来进行考虑。避免创建过多的索引,因为过多的索引会增加数据写入和更新的开销。 2. 查询优化:使用合适的查询语句和操作符可以减少数据扫描的量。避免使用全表扫描操作,尽量利用索引进行查询。 3. 数据模型优化:合理设计数据模型可以提升数据库的性能。将经常一起查询的数据放在同一个集合中,避免频繁的跨集合查询。 4. 分片集群优化:对于大规模数据集,可以使用分片集群来提高性能和可伸缩性。通过合理划分数据和配置分片,可以实现负载均衡和并行查询。 5. 预分配空间:在写入大量数据之前,可以预先为集合或数据库分配足够的存储空间,避免频繁的扩容操作对性能造成影响。 6. 配置参数优化:根据系统硬件和工作负载的特点,调整MongoDB的配置参数,如缓存大小、线程数等,以获得更好的性能表现。 7. 使用复制集和副本集:通过配置复制集和副本集,可以提高数据的可用性和读取性能。 8. 批量操作和异步写入:通过批量操作和异步写入方式可以提高写入性能。例如,使用Bulk Write API进行批量插入、更新和删除操作;启用Write Concern的"unacknowledged"模式,将写入操作异步化。 9. 监控和调优:定期监控数据库的性能指标,如QPS、响应时间、磁盘使用率等,及时发现并解决潜在的性能问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值