MongoDB資料庫級別的鎖粒度介紹

chenfeng發表於2016-05-13
從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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章