查詢MongoDB oplog.rs

來源:互聯網
上載者:User

標籤:oplog.rs;oplog   timestamp   

oplog是Capped Collection,預設分配5%的空閑磁碟空間。

來看下oplog.rs的樣子:

rs_test:SECONDARY> use localswitched to db localrs_test:SECONDARY> db.oplog.rs.findOne();{        "ts" : Timestamp(1465879171, 238),        "h" : NumberLong("-2275413922284641862"),        "v" : 2,        "op" : "u",        "ns" : "MyDB.SyncTable",        "o2" : {                "_id" : "bbf80260-3d58-49f1-9c8c-e093d5d57527"        },        "o" : {                "_id" : "bbf80260-3d58-49f1-9c8c-e093d5d57527",                "EntityId" : "362569",                "TypeName" : "Product",                "Times" : 14208,                "CreateTime" : ISODate("2014-11-15T14:35:51.916Z"),                "LastModified" : ISODate("2016-06-14T04:38:21.708Z"),                "LastOperationTime" : ISODate("2016-06-14T04:39:30.957Z")        }}


欄位含義

ts:8位元組的時間戳記,由4位元組unix timestamp + 4位元組自增計數表示。
這個值很重要,在選舉(如master宕機時)新primary時,會選擇ts最大的那個secondary作為新primary。

op:1位元組的操作類型,例如i表示insert,d表示delete。

ns:操作所在的namespace。
o:操作所對應的document,即當前操作的內容(比如更新操作時要更新的的欄位和值)
o2: 在執行更新操作時的條件,僅限於update時才有該屬性。

其中op,可以是如下幾種情形之一:
"i": insert
"u": update
"d": delete
"c": db cmd
"db":聲明當前資料庫 (其中ns 被設定成為=>資料庫名稱+ ‘.‘)
"n": no op,即空操作,其會定期執行以確保時效性。修改配置,會產生 "n" 操作。


查詢樣本


oplog.rs系統集合只用於複製,不能建立索引,查詢語句會很慢。

> db.oplog.rs.find({},{"ts":1}).sort({$natural: -1}){ "ts" : Timestamp(1406185666, 1) }  { "ts" : Timestamp(1406180043, 1) }  { "ts" : Timestamp(1406180033, 1) }  { "ts" : Timestamp(1406172831, 1) }  { "ts" : Timestamp(1406171938, 1) }  > db.oplog.rs.find({ "ts" : { "$gte" : Timestamp(1406185630, 1) } },{"ts":1})


查詢一小時內的oplog

> var SECS_PER_HOUR = 3600> var now = Math.floor((new Date().getTime()) / 1000) // seconds since epoch right now> db.oplog.rs.find({ "ts" : { "$lt" : Timestamp(now, 1), "$gt" : Timestamp(now - SECS_PER_HOUR, 1) } }


查詢某一時間段內的oplog(當然注意時間是UTC儲存)

> var since = Math.floor(ISODate("2014-08-12T09:00:00.000Z").getTime() / 1000)> var until = Math.floor(ISODate("2014-08-12T15:00:00.000Z").getTime() / 1000)> db.oplog.rs.find({ "ts" : { "$lt" : Timestamp(until, 1), "$gt" : Timestamp(since, 1) } })


彙總統計各個集合的UPDATE操作量

> db.oplog.rs.aggregate([        { $match: { "op":"u" }},        { $group: { _id:"$ns",count:{$sum:1}}}    ])


oplog參考


Replica Set Oplog
https://docs.mongodb.com/manual/core/replica-set-oplog/


本文出自 “SQL Server Deep Dives” 部落格,請務必保留此出處http://ultrasql.blog.51cto.com/9591438/1789178

查詢MongoDB oplog.rs

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.