溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mongodb 日志原理和操作

發布時間:2020-08-08 17:39:40 來源:ITPUB博客 閱讀:190 作者:runblood 欄目:關系型數據庫

日志原理:

WiredTiger使用檢查點在磁盤上提供一致性數據視圖,并允許MongoDB從上一個檢查點恢復。 但是,如果MongoDB在檢查點之間意外退出,則需要使用日志記錄來恢復上次檢查點之后發生的信息。

 

通過日志記錄,恢復過程如下:

查看數據文件以查找上一個檢查點的標識符。

在日志文件中搜索與上一個檢查點的標識符相匹配的記錄。

自上次檢查點以來,在日志文件中應用這些操作。

 

MongoDB WiredTiger 首先使用內存緩沖來存儲日志記錄,直到超過128 kB,才寫入磁盤。根據以下時間間隔或條件,WiredTiger將緩沖的日記記錄同步到磁盤:

3.2版新增功能:每50毫秒。

版本3.6中:MongoDB 設置檢查點以60秒的間隔執行。

如果寫入操作包含 j:true 的寫入指令,則WiredTiger會強制WiredTiger日志文件同步。

由于MongoDB使用的日志文件大小限制為100 MB,WiredTiger大約每隔100 MB創建一個新的日志文件。當WiredTiger創建新的日志文件時,WiredTiger將同步前一個日志文件。

注意: 在寫操作之間,當日志記錄保留在WiredTiger緩沖區中時,在mongod強制關閉時更新可能會丟失。

日志方式:

  1. 不開啟      journal ,寫入 wiredtiger      的數據,并不會立即持久化存儲;而是每分鐘會做一次全量的checkpoint( storage.syncPeriodSecs 配置項,默認為1分鐘),將所有的數據持久化。
  2. 開啟 journal 后 ,每次寫入會記錄一條操作日志(通過journal可以重新構造出寫入的數據)。這樣即使出現宕機,啟動時      Wiredtiger 會先將數據恢復到最近的一次checkpoint的點,然后重放后續的 journal 操作日志來恢復數據。 

MongoDB 里的 journal 行為 主要由2個參數控制, storage.journal.enabled  決定是否開啟journal, storage.journal.commitInternalMs  決定 journal 刷盤的間隔( journal操作的最大間隔時間??梢允?-300ms之間的值,低的值有助于持久化,但是會增加磁盤的額外負擔。

如果journal和數據文件在同一磁盤上,默認為100ms。如果在不同的磁盤上為30ms。

如果強制mongod提交日志文件,可以指定j:true,指定后,時間變為原來的三分之一 ),默認為100ms,用戶也可以通過寫入時指定 writeConcern 為 {j: ture} 來每次寫入時都確保 journal 刷盤。

日志切換:

use admin

db.runCommand( { logRotate : 1 } )

后者:

1 3 * * * killall -SIGUSR1 mongod
3 3 * * * killall -SIGUSR1 mongos

15 3 * * * /usr/bin/find /data/mongodb/data/prod_shard2_1/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;

19 3 * * * /usr/bin/find /data/mongodb/data/prod_configdb2/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;

21 3 * * * /usr/bin/find /data/mongodb/data/prod_mongos/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;

日志級別在配置文件中的加入:  

use admin
db.runCommand( {
   setParameter: 1,
   logComponentVerbosity: {
      verbosity: 1,
      query: {
         verbosity: 2
      },
      storage: {
         verbosity: 2,
         journal: {
            verbosity: 1
         }
      }
   }
} )

或者:

verbose&&quiet

     mongodb默認情況下日志文件非常大,每秒都會記錄大量的connection等調試信息,這對于我們管理日志和定位        錯誤有很大影響,需要修改它的默認日志級別。

     mongodb的日志級別在配置文件中的verbose和quiet參數決定。verbose表示會打印debug信息,范例配置如下

     verbose=true

     vv=true

     注:這里的vv表示debug級別,有vv-vvvvv,v越多則記錄的日志信息越詳細。

     而如果設置了quiet=true參數,表示安靜地輸出,即不會再有debug信息,日志中只會打印一些關鍵的信息,比如        自動故障切換,系統錯誤等信息,相當于error log。這時需要注釋掉verbose參數。范例配置如下:

     #verbose=true

     quiet=true

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女