mongodb 系统性能篇(1)
admin
2023-04-13 23:02:10
0


创建固定集合

db.createCollection(“my_collection”,{capped:true,size:10000,max:5})

把普通集合转行成固定集合

db.runCommand({convertTocapped:”test”,size:10000})


GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS可以存储以下几种文件:

储存巨大的文件,比如视频、高清图片等

好处:

利用GridFS可以简化需求。

GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容易

GridFS可以避免用户上传内容的文件系统出现问题。

GridFS不产生磁盘碎片

GridFS使用两个表来存储数据:

files 包含元数据对象

chunks 包含其他一些相关信息的二进制块

[root@a2 bin]# ./mongofiles  put mongosniff.tar.gz

[root@a2 bin]# ./mongo

MongoDB shell version: 2.4.3

connecting to: test

> show tables;

fs.chunks

fs.files

system.indexes

> db.fs.files.find();

{ "_id" : ObjectId("5196601b171c296452c1f9f1"), "filename" : "mongosniff.tar.gz", "chunkSize" : 262144, "uploadDate" : ISODate("2013-05-17T16:51:40.843Z"), "md5" : "5067d9e1c4a0e41b93f204a72ec52794", "length" : 7171743 }

>

fs.files 存储的是文件的相关信息,fs.chunks存储是的文件,并且是二进制格式的。


查看存储文件信息

[root@a2 bin]# ./mongofiles  list

connected to: 127.0.0.1

mongosniff.tar.gz       7171743

获取存储文件:

[root@a2 bin]# ./mongofiles  get  mongosniff.tar.gz


系统性能优化:

建立索引,

当创建collection时,系统会自动建立一个_id的索引,而且不能删除

> db.system.indexes.find();

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.c1", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.c2", "name" : "_id_" }

建立普通索引

> db.c2.ensureIndex({age:1},{true});(如果数据量大,可以使用background,age:1表示索引按age的升序排列,-1为降序)< /p>

> db.system.indexes.find();

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.c1", "name" : "_id_" }

{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.c2", "name" : "_id_" }

{ "v" : 1, "key" : { "age" : 1 }, "ns" : "test.c2", "name" : "age_1", "background" : true }

建立唯一索引

> db.c2.ensureIndex({name:1},{unique:true})

如果再输入的数据name字段有重复的话,就会报错,如下:

> db.c2.insert({name:"user0"})

E11000 duplicate key error index: test.c2.$name_1  dup key: { : "user0" }

删除所有索引

> db.c2.dropIndex();

删除name字段的索引

> db.c2.dropIndex({name:1})


MongoDB 提供了一个explain命令让我们获知系统如何处理查询请求

> db.c2.find({age:{$gt:26}}).explain();

{

       "cursor" : "BtreeCursor age_1",

       "isMultiKey" : false,

       "n" : 3,                              返回的数据数

       "nscannedObjects" : 3,

       "nscanned" : 3,                        被扫描的文档数,因为做了age字段的索引

       "nscannedObjectsAllPlans" : 3,

       "nscannedAllPlans" : 3,

       "scanAndOrder" : false,

       "indexOnly" : false,

       "nYields" : 0,

       "nChunkSkips" : 0,

       "millis" : 1,                     耗时(毫秒)

       "indexBounds" : {                 所使用的索引

               "age" : [

                       [

                               26,

                               1.7976931348623157e+308

                       ]

               ]

       },

       "server" : "a1:27017"

}



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

开启profile功能:

(1)> db.setProfilingLevel(2);

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

(2)[root@a1 bin]# ./mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs -profile=2 --fork

添加 -profile参数


优化方案:

1:创建索引   db.posts.ensureIndex({ts:1});

2: 限定返回结果条数    db.posts.find().sort({ts:-1}).limit(10);

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

4: 采用cappedcollection

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

5: 采用Profiling



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

执行这个命令可能会出现如下错误

[root@a1 bin]# ./mongosniff --help

./mongosniff: error while loading shared libraries: libpcap.so.0.9: cannot open shared object file: No such file or directory

解决方法:

yum -y install libpcap-devel

由于系统自动安装的是 1.0版本,所以我们还必须建立个软连接

ln -s /usr/lib64/libpcap.so.1.0.0 /usr/lib64/libpcap.so.0.9


使用方法:

[root@a1 bin]# ./mongosniff --source NET lo

sniffing... 27017


可以将这些数据输出到一个日志文件中,那么就可以保留下所有数据库操作的历史记录,对于后期的性能分析和安全审计等工作将是一个巨大的贡献。



Mongostat

此工具可以快速的查看某组运行中的MongoDB 实例的统

计信息,也需要在打开一个客户端进行命令操作:

用法如下:

[root@localhost bin]# ./mongostat



查看数据库的状态:

> db.stats();

{

       "db" : "test",

       "collections" : 6,

       "objects" : 234,

       "avgObjSize" : 263.77777777777777,

       "dataSize" : 61724,

       "storageSize" : 1077248,

       "numExtents" : 6,

       "indexes" : 4,

       "indexSize" : 32704,

       "fileSize" : 67108864,

       "nsSizeMB" : 16,

       "dataFileVersion" : {

               "major" : 4,

               "minor" : 5

       },

       "ok" : 1

}



上一篇:mongodb主从配置

下一篇:mongodb 增删改查

相关内容

热门资讯

徐巧芯剖析赖清德:最怕自己丢掉... 海峡导报综合报道 大罢免投票一周年纪念活动26日举行,台北市长蒋万安出席并怒轰,民进党一年过后仍没有...
中国红十字会总会紧急向广东调拨... 记者从中国红十字会总会了解到,针对台风“红霞”给广东造成的灾情,中国红十字会总会启动四级应急响应,紧...
这些少年,正被“毒蛋”围猎 李梦抽了几口电子烟,吐出了白色的烟雾,有一股浓烈的水果香味。随后,她看着自己握电子烟的手,跟身边人说...
蒋万安号召“倒阁”,卢秀燕认为... 海峡导报综合报道 台北市长蒋万安27日抛出震撼议题,表示多名民代向他提议推动“倒阁”,要求台行政机构...
特朗普将在白宫会见两位重要客人 俄乌战争仍未结束,美伊冲突又有升级风险。在此背景下,美国总统特朗普将在白宫接见乌克兰和以色列领导人。...
新租客打扫卧室柜子上掉落4万元... 近日,莲前西路某小区内,张倩签下一套房子的租赁合同。当天上午,她带着12岁的大女儿周馨怡和11岁的小...
六部门通告:禁止涉军队退役报废... 关于禁止涉军队退役报废装备销售活动的通告近年来,部分经营者在线上线下公开销售涉及我军退役报废装备(指...
九寨沟景区发生泥石流,部分道路... 7月26日,九寨沟风景名胜区管理局发布泥石流灾害通报:2026年7月26日15时50分,九寨沟景区局...
空调26度不凉是什么原因 从空调内部元器件来说,不凉的原因有可能是温度传感器出现故障了,也有可能是空调压缩机或者铜管出现问题,...
鲸鸿动能携手香港国际机场、鸿蒙...   2026 年 7 月 25 日,十余位鸿蒙车主组成的车队从珠海出发,经港珠澳大桥通关抵达香港国际...