MongoDB 创建索引导致锁库的解决方案
背景描述
300G 的数据创建索引,执行
db.collection.ensureIndex({key:1})
之后,打开另一个终端,任何操作都不能执行。根本原因
在数据库建立索引时,默认时 “foreground” 也就是前台建立索引,但是,当你的数据库数据量很大时,在建立索引的时会读取数据文件,大量的文件读写会阻止其他的操作,命令没有显性指定 background,所以命令会锁库。
解决方案
执行
db.collection.ensureIndex({key:1},{background: true})
,这样就不会锁库了,建立索引就会在后台处理了。(注:“{key:1}” 中,1 表示升序 - asc,-1 表示降序 - desc )在后台建立索引的时候,不能对建立索引的 collection 进行一些坏灭型的操作,如:运行 repairDatabase,drop,compat,当你在建立索引的时候运行这些操作的会报错。