• 第三部分 性能 简单


    索引管理
    性能优化
    性能监控

    索引
    MongoDB提供了多样性的索引支持,索引信息被保存在system.indexes中,MongoDB中_id字段在创建的时候,默认已经建立了索引,这个索引比较特殊,并且不可删除,不过Capped Collection例外
    1 建立过引(普通索引)
    函数: ensureIndex()
    例子: name上建立索引 1(升序) -1(降序)
    db.persons.ensureIndex({name:1});
    当系统已经有大量数据时,创建索引非常耗时,需要在后台执行,只需要指定background:true即可
    db.c3.ensureIndex({age:1},{background:true});


    db.c1.find({name:"user5"}).explain(); //查询的详细信息列出来

    db.c1.getIndexKyes(); //所有索引的字段
    db.c1.getIndexes(); //所有索引的相关信息

    2 唯一索引
    只需要在ensureIndex命令中提定"uniqure:true"即可创建唯一索引,
    如果表中有二条一样的数据,那么建立不了唯一索引
    这个唯一索引没弄成功????????????
    妈的,试了两次还是不行,真不知道是好里不对,按例子来的也不对

    3 查看索引
    查看索引使用命令getIndexes()
    上例显示出来的一共有二个索引,其中_id是创建表的时候自动创建的索引,此索引是不能够了删除的

    4 删除索引
    dropIndex();
    db.c3.dropIndex(); //删除所有索引

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

    性能优化
    explain执行计划
    MongoDB提供了一个explain命令让我们获知系统如何处理查询请求,利用explain命令我们可以很好地观察系统如何使用索引来加快检索,同时可以针对性优化索引

    优化器profile
    MongoDB Database Profiler是一种查询日志功能,可以作为我们优化数据库的依据
    开始Profiling功能
    有两种方式可以控制Profiling的开关和级别
    启动MongoDB时加上-profile=级别即可
    在客户端调用db.setProfilingLevel(级别)命令来实时配置
    Profiler信息保存在system.profile中,我们可以通过db.getProfilingLevel()命令来获取当前的Profile级别

    具体操作
    db.setProfilingLevel(2);
    上面的profile的级别可以取0 1 2 三个值,它们的表示
    0 不开启
    1 记录慢命令
    2 记录所有命令

    Profile在级别1时会记录慢命令,上面默认值为100ms,在默认就有设置,其设置方法和级另有两种方法:
    一种是通添加--slowms启动参数配置,
    db.setProfilingLevel时加上第二个参数
    db.setProfilingLevel(1,10);
    那么这个慢的定义是什么
    可以理解比较耗时的命令
    如果一个查询耗时10毫秒,就会被记录下来


    优化方案1: 创建索引
    在查询条件的字段上,或者排序条件的字段上创建索引,可以显著提高执行效率
    db.posts.ensureIndex({name:1});

    方案2: 限定返顺结果条数
    使用limit()限定返回结果集的大小,可以减少database server的资源消耗,可以减少网络传输数据量
    db.posts.find().sort({ts:1}).limit(10);

    方案3: 查询使用的字段,不查询所有字段
    db.posts.find({},{t1:1,title:1,author:1}).sort({ts:-1}).limit(10);

    方案4: 采用cappedCollection
    capped Collection比普通Collections的读写效率高

    方案5: 采用Profiling
    Profiling功能肯定是会影响次效率,但是不太严重,原因是他使用的是system.profile来记录system.profile是一个capped collection这种collection在操作上有一些限制和特点,但是效率更高


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

  • 相关阅读:
    iphone 越狱后 安装 pillow 报错 (未解决, 仅记录)
    阿甘正传影评
    聊聊“内卷”的本质
    Django REST Framework: 使用cach_page和drf-extensions进行缓存
    Python常用第三方库大全
    Go 第三方库推荐:类型转换如此简单
    Python 内置库:itertools
    4 款 MySQL 调优工具
    如何使用 asyncio 限制协程的并发数
    Go 的json 解析标准库竟然存在这样的陷阱?
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2858364.html
Copyright © 2020-2023  润新知