mongodb 系列 ~ journal日志暢談


一 簡介 我們來聊聊Journal日志
二 核心觀點 WAL 日志先行策略
三  開啟journal流程
     在開啟journal的系統中,寫操作從請求到寫入磁盤共經歷5個步驟,在serverStatus()中已經列出各個步驟消耗的時間。
    1 Write to privateView
    2 prepLogBuffer
    3 WritetoJournal
    4 WritetoDataFile
    5 RemaptoPrivateView
四  基本概念知識
   1 shared view
      數據文件映射到一塊內存區域,稱為shared view,數據會直接寫入(在不開啟journal的情況下) 系統每60s刷新這塊內存到磁盤.如果系統斷電,就會丟失這60S的未持久化的數據
   2 private view
      系統會再映射一塊內存區域供journal使用,稱之為private view,mongodb默認每100ms刷新privateView到journal(在開啟journal情況下) 如果系統斷電.會容忍這100ms的數據丟失,當服務重啟時,會利用journal進行恢復
   3 mongo的journal和mysql的redo效果一樣,日志先行.但是有一點不同的是,mongo的journal的功能是可以關閉的
五  系統相關
   1 當單個文件達到1GB的時候,就會創建一個新的文件,舊文件不會循環使用,自動刪除
   2 文件構成
    1 lsn代表最后使用的journal序列號
    2 prealloc 代表已經分配但是還沒有使用的文件
   3 j.*代表的是正在使用的journal文件
六  系統命令
   1 journal延遲測試的函數,
      db.runCommand("journalLatencyTest"):
  2 啟動
     journal = true
  3 查看journal運行狀態
     db.serverstatus() dur相關,具體請自行查看
     commitsInWriteLock:在有寫鎖的情況下提交的數量,這表示寫的壓力很大
     earlyCommits:表示在journalCommitInterval之前的時間,mongod請求提交的次數。用這個參數確定journalCommitInterval是不是設置的過長。
 4 journalCommitInterval 
     默認100ms,根據上述的監控指標可以進行結合判斷是否要進行調整。
七  相關問題
1 journal本身占據過大的問題
   推斷 可能是由於大批量瞬間事務引起的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM