MongoDB数据库级别的锁粒度介绍

从2.2版本开始,MongoDB实现了数据库级别的锁,对于大部分的读写操作都用数据库锁即可,但是一些全局操作,通常涉及到多个数据库操作的时候还是需要全局锁。在2.2版本之前MongoDB只有全局锁,例如,如果有6个数据库那么其中一个数据库的写操作不会影响其它5个数据库的读写操作的,但是这在2.2之前是不行的。 
 在MongoDB 3.0版本中锁的粒度就变得更细了,除了全局锁、数据库锁还加入了集合锁,而且对于WiredTiger存储引擎和MMAPv1存储引擎而言两者之间的锁机制也有不同。 
 WiredTiger:对于大部分的读写操作,WiredTiger使用乐观锁。WiredTiger对于全局、数据库、集合级别只会使用意向锁。当存储引擎检测到两个操作之间的冲突,一个写冲突导致MongoDB透明地重试写操作。一些全局操作,跟2.2版本一样还是会需要全局锁,例如,删除一个集合,那么仍然还是需要一个互斥的数据库锁的。 
 MMAPv1:3.0版本MMAPv1引擎用集合锁,相比之前的版本数据库锁是最细粒度的锁而言有了更进一步的改进。例如,在使用MMAPv1作为存储引擎的数据库中有6个集合,当其中一个集合写锁存在的时候,其它5个集合仍然可以自由的使用读锁、写锁来进行读写操作。


3. 如何查看当前MongoDB锁的状态

 MongoDB提供了如下的命令来查看当前的锁状态:

 db.serverStatus().lock
 db.currentOp()
 mongotop
 mongostat


例如以下命令:
> db.serverStatus().locks  (查看当前锁状态和参数)
{
        "." : {
                "timeLockedMicros" : {
                        "R" : NumberLong(3446875),
                        "W" : NumberLong(12490366)
                },
                "timeAcquiringMicros" : {
                        "R" : NumberLong(14271840),
                        "W" : NumberLong(9769978)
                }
        },
        "admin" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(1232329),
                        "w" : NumberLong(0)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(14127),
                        "w" : NumberLong(0)
                }
        },
        "local" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(2535529),
                        "w" : NumberLong(44)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(67516),
                        "w" : NumberLong(2)
                }
        },
        "wangshuai" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(1009773),
                        "w" : NumberLong(208)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(37788),
                        "w" : NumberLong(3)
                }
        },
        "mongodb" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(956544),
                        "w" : NumberLong(76)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(33572),
                        "w" : NumberLong(2)
                }
        },
        "idx_t" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(1206567),
                        "w" : NumberLong(94)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(31303),
                        "w" : NumberLong(3)
                }
        },
        "test" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(8352489),
                        "w" : NumberLong(1787736)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(405137),
                        "w" : NumberLong(5)
                }
        },
        "chenfeng" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(1723920),
                        "w" : NumberLong(334)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(61279),
                        "w" : NumberLong(92)
                }
        },
        "duansf" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(1449306),
                        "w" : NumberLong(112)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(3003718),
                        "w" : NumberLong(2)
                }
        },
        "mongodb2" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(962135),
                        "w" : NumberLong(81)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(28994),
                        "w" : NumberLong(3)
                }
        },
        "idex_t" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(1395111),
                        "w" : NumberLong(116)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(25777),
                        "w" : NumberLong(2)
                }
        },
        "dsf" : {
                "timeLockedMicros" : {
                        "r" : NumberLong(1196845),
                        "w" : NumberLong(39)
                },
                "timeAcquiringMicros" : {
                        "r" : NumberLong(338304),
                        "w" : NumberLong(3)
                }
        }
}
>


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2099433/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15498/viewspace-2099433/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值