MongoDB 创建索引导致锁库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beautiful20100708/article/details/84952154

MongoDB 创建索引导致锁库

  • 背景描述

两千多万数据,204G 的数据创建索引,执行 db.collection.ensureIndex({key:1}) 之后,是要锁库的,打开另一个终端,任何操作都不能执行。

  • 根本原因

在数据库建立索引时,默认时 “foreground” 也就是前台建立索引,但是,当你的数据库数据量很大时,在建立索引的时会读取数据文件,大量的文件读写会阻止其他的操作,命令没有显性指定 background,所以命令会锁库。

  • 解决方案

执行 db.collection.ensureIndex({key:1},{background: true}),这样就不会锁库了,建立索引就会在后台处理了。(注:“{key:1}” 中,1 表示升序 - asc,-1 表示降序 - desc )

在后台建立索引的时候,不能对建立索引的 collection 进行一些坏灭型的操作,如:运行 repairDatabase,drop,compat,当你在建立索引的时候运行这些操作的会报错。

猜你喜欢

转载自blog.csdn.net/beautiful20100708/article/details/84952154