版权声明:本文为博主原创文章,未经博主允许不得转载。 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,当你在建立索引的时候运行这些操作的会报错。