• Mongodb学习笔记(三)性能篇


    一、索引管理

        MongoDB提供了多样性的索引支持,索引信息被保存在system.indexes中MongoDB中_id字段在创建的时候,默认已经建立了索引,这个索引比较特殊,并且不可以删除,不过Capped Collections例外。

        1、建立索引

            建立索引函数:ensureIndex();

              1(升序),-1(降序)

              例:db.c1.ensureIndex({name:1});

              当系统已有大量数据时,常见索引非常耗时,需要在后台执行,只需要指定“backgroud:true”即可。

              例:db.c1.ensureIndex({age:1},{}backgroud:true);

            建立唯一索引:{unique:true}

              例:db.c1.ensureIndex({age:1},{unique:true});

        2、查看索引清单:

            getIndexKeys();

              例:db.c1.getIndexKeys();

        3、删除索引

            dropIndex()    //某个索引

            dropIndexs()    //删除所有索引

              例:db.c1.dropIndexs();    //删除所有索引

                db.ci.dropIndex({age:1});    //删除age索引

    二、性能优化

        1、explain执行计划

            MongoDB提供了一个explain命令让我们活值系统如何处理查询请求。利用explain命令让我们可以很好的观察系统如何使用索引来加快检索,同时可以针对性优化索引。

        2、优化器profile

            MongoDB Database Profile是一种慢查询日志功能,可以作为我们优化数据的依据。

            开启Profiling功能:有两种方式可以控制Profiling开关和级别

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

                在客户端调用db.setProfilingLevel(级别)命令来实时配置

            Profile信息保存在system.profile中。我们可以通过db.getProfilingLevel()命令来获取当前的Profile的级别。

            具体操作:

                db.setProflingLevel(2);    //第二个参数为毫秒,默认为100ms

                db.getProfilingLevel();

                级别值:

                    0---不开启

                    1---记录慢命令(默认为>100ms)

                    2---记录所有命令

    三、优化方案

        1、创建索引

            在查询条件的字段上,或者排序条件的字段上创建索引,可以显著提高执行效率

            db.c1.ensureIndex({age:1});

        2、限定返回结果条数

            使用limit()限定返回结果集的大小,可以减少database server的资源消耗,可以减少网络传输数据量。

            db.c1.find().sort({age:-1}).limit(10);

        3、查询使用到的字段,不查询所有字段。

            db.c1.find({},{name:"user",age:25}).sort(age:-1).limit(10);

        4、采用cappendcollection

            cappend Collections比普通的Collections的读写效率高

        5、采用Profiling

            Profiling功能肯定是会影响效率的,但是bu tai yan不太严重,原因是它使用的是system.profile来记录,system.profile是一个capped collection这种collection在操作上有一些限制和特点,但是效率更高。

    四、性能监控

        通过对数据库的性能监控,能够更好的了解数据库的工作张台,从而进行优化。

        工具:

          Mongodniff    //主要抓去通讯记录

              此工具可以从底层监控到底有哪些命令发送给MongoDB去执行

              ./mongosniff --source NET lo

              它是实时动态监视的,需要打开另一个客户端进行命令操作,可以将这些数据输出到一个日志文件中,那么就可以保留喜爱所有数据库操作的历史记录,对于后期的性能分析和安全审计等工作将是一个巨大的贡献。

          Mongostat

              ./mongostat

              实时监控

  • 相关阅读:
    FastDFS的配置、部署与API使用解读(6)FastDFS配置详解之Storage配置(转)
    WEB服务器防盗链_HttpAccessKeyModule_Referer(Nginx&&PHP)
    php检查是否是数字和字母
    为什么要使用Docker?
    TP5整合 WorkerMan 以及 GatewayWorker
    PHP基于ThinkPHP5的砍价活动相关设计
    Git (gnome-ssh-askpass:3871): Gtk-WARNING **: cannot open display:
    B2B2C商品模块数据库设计
    PHP开发中多种方案实现高并发下的抢购、秒杀功能
    Linux CentOs集群LVS+Keepalived负载均衡的实现
  • 原文地址:https://www.cnblogs.com/yuyangphpweibo/p/7928486.html
Copyright © 2020-2023  润新知