Profiler 信息保存在 system.profile (Capped Collection) 中。也可经者家伙进行安装及查阅数据:强硬的MongoDB数据库管理工具

Mongo Shell 还提供了一个较简单的指令show
profile,可列出最近5久实施时间超过1ms的 Profile 记录。

查看时库下所有集合的剖析数据

db.system.profile.find()
翻有一个汇的分析数据

db.system.profile.find({info:/user.info/})
翻看执行时超出100毫秒的实行操作,并倒序排列,并获取前5行

db.system.profile.find({millis:{$gt:100}}).sort({$natural:-1}).limit(5);

Profile 信息内容详解:

ts-该令于何时执行.

millis Time-该令执行耗时,以毫秒记.

info-本命令的详细信息.

query-表明这是一个query查询操作.

ntoreturn-本次查询客户端要求返回的笔录数.比如, findOne()命令执行时
ntoreturn 为 1.产生limit(n) 条件时ntoreturn为n.

query-具体的询问条件(如x>3).

nscanned-本次查询扫描的笔录数.

reslen-返回结果集的大小.

nreturned-本次查询实际返回的结果集.

update-表明这是一个update更新操作.

fastmod-Indicates a fast modify operation. See
Updates. These
operations are normally quite fast.

fastmodinsert – indicates a fast modify operation that performed an
upsert.

upsert-表明update的upsert参数为true.此参数的效能是一旦update的记录不存,则用update的条件insert一长记录.

moved-表明此次update是否动了硬盘上之数据,如果新记录比原来记录短,通常不见面移动时记下,如果新记录比原记录长,那么可能会见动记录及外位置,这时候会造成相关索引的更新.磁盘操作更多,加上索引更新,会教这样的操作比较慢.

insert-这是一个insert插入操作.
getmore-这是一个getmore
操作,getmore通常发生在结果集于好之查询时,第一单query返回了有些结实,后续之结果是由此getmore来获取的。

2、优化

MongoDB 询问优化

一旦nscanned(扫描的记录数)远大于nreturned(返回结果的记录数)的话,那么我们将要考虑通过加索引来优化记录定位了。

reslen
如果过那个,那么证明我们返回的结果集太特别了,这时请查看find函数的亚独参数是否就写及了若用之属性名。(类似于MySQL中永不总是select
*)

于开创索引的提议是:如果生少读,那么尽量不要加加索引,因为索引越多,写操作会更为慢。如果读量很特别,那么创建索引还是比划算的。

MongoDB 更新优化

而写查询量或者update量过怪之口舌,多加索引是会有益处的。以及~~~~(省略N字,和RDBMS差不多的理)

Use fast modify operations when possible (and usually with these, an
index). See Updates.

Profiler 的效率

Profiling
功能肯定是会影响效率的,但是未顶严重,原因是外以的凡system.profile
来记录,而system.profile 是一个capped
collection
这种collection 在操作上发生有克与特点,但是效率又强。

优化建议:

  • 假如 nscanned 远大于 nreturned,那么需要动用索引。
  • 假定 reslen 返回字节非常可怜,那么考虑只抱所需要的字段。
  • 实践 update 操作时同检查一下
    nscanned,并应用索引减少文档扫描数量。
  • 运用 db.eval() 在服务端执行某些统计操作。
  • 压缩返回文档数量,使用 skip & limit 分页。

输入输出样例

输入样例#1: 复制

10 4
16 5 6 9 5 13 14 20 8 12

输出样例#1: 复制

5
5
5
5
5
8
8

0 –
不开,关闭性能分析,测试环境可以打开,生成环境关闭,对性能有非常非常影响

题目背景

1

2

db.setProfilingLevel( level , slowms )

db.setProfilingLevel( 1 , 10 );

问题叙述

为检测生产流程上合N件产品之质地,我们先是被每一样件产品从一个分数A表示该人,然后统计前M件产品遭质量太差之产品之分值Q[m]
= min{A1, A2, … Am},以及第2至第M + 1件的Q[m + 1], Q[m + 2] …
最后统计第N – M + 1及第N项的Q[n]。根据Q再举行更评估。

吁您抢要来Q序列。

SQL Server有工具进行数据库的优化,Mongo Database
Profiler.不仅有,而且效果更强硬。

说明

[多少范围]

30%的数据,N <= 1000

100%的数据,N <= 100000

100%的数据,M <= N, A <= 1 000 000

 

干燥队列裸题

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<deque>
 7 #define LL long long 
 8 #define lb(x)    ((x)&(-x))
 9 using namespace std;
10 const int MAXN=1000001;
11 inline int read()
12 {
13     char c=getchar();int x=0,f=1;
14     while(c<'0'||c>'9')    {if(c=='-')    f=-1;c=getchar();}
15     while(c>='0'&&c<='9')    x=x*10+c-48,c=getchar();return x*f;
16 }
17 struct node
18 {
19     int pos,val;
20     node(){    pos=val=0;    }
21     node(int a,int b){    pos=a,val=b;     }
22 };
23 deque<node>q;
24 int a[MAXN];
25 int main()
26 {
27     int n=read(),m=read();
28     for(int i=1;i<=n;i++)
29         a[i]=read();
30     for(int i=1;i<=n;i++)
31     {
32         while(q.size()>0&&i-m>=q.front().pos)    q.pop_front();
33         while(q.size()>0&&a[i]<=q.back().val)        q.pop_back();
34         q.push_back(node(i,a[i]));
35         if(i>=m)    printf("%d\n",q.front().val);    
36     }
37     return 0;
38 }

 

MongoDB 自带
Profiler,可以充分有利于地记下下具有耗时过长操作,以便为调优。有少数种植艺术可以控制
Profiling 的开关和级别,第一栽是直接在开行参数里一直进行安装。

输入输出格式

输入格式:

 

输入共少履。

率先执共少独数N、M,由空格隔开。含义如前述。

其次实行共N个数,表示N件产品之色。

 

出口格式:

 

输出共N – M + 1行。

第1交N – M + 1行每行一个频繁,第i行的数Q[i + M – 1]。含义如前述。

 

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

1

2

3

> db.setProfilingLevel(2);

{"was" : 0 , "ok" : 1}

> db.getProfilingLevel()

方斜体的级别可取0,1,2 叔只价,他们代表的义如下:

2 – 记录有命令

啊得以统计客户端调用db.setProfilingLevel(级别)
命令来实时配置。可以由此db.getProfilingLevel()命令来博取当前之Profile级别。

Profile
记录在级别1时会晤记录慢命令,那么这个慢的定义是什么?上面我们说及其默认为100ms,当然有默认就发出安,其安装方法以及级别相同发生个别种,一种是通过长–slowms启动参数配置。第二种植是调用db.setProfilingLevel时长第二个参数:

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