MongoDB性能优化——找出慢语句


  • Lv 1

    1、摘要

    • 在Oracle中我们可以查看AWR性能分析报告找出慢SQL,在MySQL中我们可以查看慢查询日志来定位到SQL语句,那么在MongoDB中呢?我们可以通过优化器profile来找出慢语句

    • 一般我们在做性能分析的时候,性能瓶颈跟我们查询语句太慢有着直接关系,所以在MongoDB中我们想找出这些慢语句的话,可以通过它的Profiling功能

    2、开启Profiling功能

    有两种方式可以控制 Profiling 的开启、关闭和级别

    • 第一种是直接在启动参数里直接进行设置:启动MongoDB 时加上–profile=级别 即可

    • 列表另外一种可以通过客户端调用db.setProfilingLevel(级别) 命令来实时配置,profile 信息保存在system.profile 中。我们可以通过db.getProfilingLevel()命令来获取当前的profile 级别,类似如下操作:

    <code>MongoDB Enterprise testrs:PRIMARY> db.getProfilingLevel()
    2
    MongoDB Enterprise testrs:PRIMARY>
    </code>
    • 上面profile 的级别可以取0、1、2 三个值,他们表示的意义如下:
      0 :不开启
      1 :记录慢命令 (默认为>100ms)
      2 :记录所有命令
      Profile 记录在级别1 时会记录慢命令,那么这个慢的定义是什么?上面我们说到其默认为100ms,当然有默认就有设置,其设置方法和级别一样有两种: 一种是通过添加 –slowms 启动参数配置;第二种是调用db.setProfilingLevel 时加上第二个参数,例如:
    <code>MongoDB Enterprise testrs:PRIMARY> db.setProfilingLevel( 1 , 10 );
    { "was" : 2, "slowms" : 10, "ok" : 1 }
    MongoDB Enterprise testrs:PRIMARY> db.getProfilingLevel()
    1
    MongoDB Enterprise testrs:PRIMARY>
    </code>

    本帖部分内容已隐藏,请登入并回覆,以查看隐藏内容!


  • Lv 1

    慢語句查詢還有另一種方式

    在Mongod的log檔中預設會紀錄>100ms的查詢語句

    如要修改log檔中記錄慢語句的時間 則一樣使用樓主提供的指令 

    但第一個參數使用0 (此指令表示log檔會紀錄查詢時間>10ms的語句)

    db.setProfilingLevel( 0 , 10 );

  • cid:1:privileges:groups:find

    @PlantWang 说:

    本帖部分内容已隐藏,请登入并回覆,以查看隐藏内容!

     本帖部分内容已隐藏,请登入并回覆,以查看隐藏内容!


  • 註冊用戶

    想看~快給我看~芝麻開門


  • 註冊用戶

    想看~快給我看~芝麻開門


  • Lv 1

    推一個~

    不過mongodb的setProfilingLevel跟多數數據庫監控一樣,多少也會耗費服務器的硬件資源~~~


  • Lv 1

    我也想看~快給我看~芝麻開門



  • 我也想看~快給我看~芝麻開門


  • 註冊用戶

    hello 我扔 dafjdl



  • 管道聚合 性能怎么优化?


  • 註冊用戶

    启动MongoDB 时加上–profile=级别


  • Lv 1

    想看~快給我看~芝麻開門


  • 註冊用戶

    @ken哈哈哈。。。芝麻开门啦


  • 註冊用戶

    芝麻开门,看你是不是骗我的,(*^__^*) 嘻嘻……


  • 註冊用戶

    本帖下載内容已隐藏,请登入以查看隐藏内容!


  • 註冊用戶

    想看~快給我看~芝麻開門


  • 註冊用戶

    性能优化,刚好需要,感谢!


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待