mongodb檢查點 MongoDB中有幾種日誌

2021-10-13 08:57:59 字數 3591 閱讀 3385

mongodb中有幾種日誌?

任何一種資料庫都有各種各樣的日誌,mongodb也不例外。mongodb中有4種日誌,分別是系統日誌、journal日誌、oplog主從日誌、慢查詢日誌等。這些日誌記錄著mongodb資料庫不同方面的蹤跡。下面分別介紹這幾種日誌。

系統日誌

系統日誌在mongodb資料庫中很重要,它記錄著mongodb啟動和停止的操作,以及伺服器在執行過程中發生的任何異常資訊。

配置系統日誌的方法比較簡單,在啟動mongod時指定logpath引數即可

系統日誌會向logpath指定的檔案持續追加。

journal日誌

journaling(日記) 日誌功能則是 mongodb 裡面非常重要的乙個功能 , 它保證了資料庫伺服器在意外斷電 、 自然災害等情況下資料的完整性。它通過預寫式的redo日誌為mongodb增加了額外的可靠性保障。開啟該功能時,mongodb會在進行寫入時建立一條journal日誌,其中包含了此次寫入操作具體更改的磁碟位址和位元組。因此一旦伺服器突然停機,可在啟動時對日記進行重放,從而重新執行那些停機前沒能夠重新整理到磁碟的寫入操作。

mongodb配置wiredtiger引擎使用記憶體緩衝區來儲存journal記錄,wiredtiger根據以下間隔或條件將緩衝的日誌記錄同步到磁碟

從mongodb 3.2版本開始每隔50ms將緩衝的journal資料同步到磁碟

如果寫入操作設定了j:true,則wiredtiger強制同步日誌檔案

由於mongodb使用的journal檔案大小限制為100mb,因此wiredtiger大約每100mb資料建立乙個新的日誌檔案。當wiredtiger建立新的journal檔案時,wiredtiger會同步以前journal檔案

mongodb達到上面的提交,便會將更新操作寫入日誌。這意味著mongodb會批量地提交更改,即每次寫入不會立即重新整理到磁碟。不過在預設設定下,系統發生崩潰時,不可能丟失超過50ms的寫入資料。

資料檔案預設每60秒重新整理到磁碟一次,因此journal檔案只需記錄約60s的寫入資料。日誌系統為此預先分配了若干個空檔案,這些檔案存放在/data/db/journal目錄中,目錄名為_j.0、_j.1等

長時間執行mongodb後,日誌目錄中會出現類似_j.6217、_j.6218的檔案,這些是當前的日誌檔案,檔案中的數值會隨著mongodb執行時間的增長而增大。資料庫正常關閉後,日記檔案會被清除(因為正常關閉後就不在需要這些檔案了).

向mongodb中寫入資料是先寫入記憶體,然後每隔60s在刷盤,同樣寫入journal,也是先寫入對應的buffer,然後每隔50ms在刷盤到磁碟的journal檔案

使用wiredtiger,即使沒有journal功能,mongodb也可以從最後乙個檢查點(checkpoint,可以想成映象)恢復;但是,要恢復在上乙個檢查點之後所做的更改,還是需要使用journal

如發生系統崩潰或使用kill -9命令強制終止資料庫的執行,mongod會在啟動時重放journal檔案,同時會顯示出大量的校驗資訊。

上面說的都是針對wiredtiger引擎,對於mmapv1引擎來說有一點不一樣,首先它是每100ms進行刷盤,其次它是通過private view寫入journal檔案,通過shared view寫入資料檔案。這裡就不過多講解了,因為mongodb 4.0已經不推薦使用這個儲存引擎了。

從mongodb 3.2版本開始wiredtiger是mongodb推薦的預設儲存引擎

需要注意的是如果客戶端的寫入速度超過了日記的重新整理速度,mongod則會限制寫入操作,直到日記完成磁碟的寫入。這是mongod會限制寫入的唯一情況。

mongodb中的普通集合是動態建立的,而且可以自動增長以容納更多的資料。mongodb中還有另一種不同型別的集合,叫做固定集合。固定集合需要事先建立好,而且它的大小是固定的。固定集合的行為型別與迴圈佇列一樣。如果沒有空間了,最老的文件會被刪除以釋放空間,新插入的文件會佔據這塊空間。

建立固定集合:

建立了乙個大小為100000位元組的固定大小集合,文件數量為100.不管先到達哪個限制,之後插入的新文件就會把最老的文件擠出集合:固定集合的文件數量不能超過文件數量限制,也不能超過大小限制。

固定集合建立之後就不能改變,無法將固定集合轉換為非固定集合,但是可以將常規集合轉換為固定集合。

固定集合可以進行一種特殊的排序,稱為自然排序(natural sort),自然排序返回結果集中文件的順序就是文件在磁碟的順序。自然順序就是文件的插入順序,因此自然排序得到的文件是從舊到新排列的。當然也可以按照從新到舊:

oplog主從日誌

replica sets複製集用於在多台伺服器之間備份資料。mongodb的複製功能是使用操作日誌oplog實現的,操作日誌包含了主節點的每一次寫操作。oplog是主節點的local資料庫中的乙個固定集合。備份節點通過查詢這個集合就可以知道需要進行複製的操作。

乙個mongod例項中的所有資料庫都使用同乙個oplog,也就是所有資料庫的操作日誌(插入,刪除,修改)都會記錄到oplog中

每個備份節點都維護著自己的oplog,記錄著每一次從主節點複製資料的操作。這樣,每個成員都可以作為同步源給其他成員使用。

如圖所示,備份節點從當前使用的同步源中獲取需要執行的操作,然後在自己的資料集上執行這些操作,最後再將這些操作寫入自己的oplog,如果遇到某個操作失敗的情況(只有當同步源的資料損壞或者資料與主節點不一致時才可能發生),那麼備份節點就會停止從當前的同步源複製資料。

oplog-copy.png

oplog中按順序儲存著所有執行過的寫操作,replica sets中每個成員都維護者乙份自己的oplog,每個成員的oplog都應該跟主節點的oplog完全一致(可能會有一些延遲)

如果某個備份節點由於某些原因掛了,但它重新啟動後,就會自動從oplog中最後乙個操作開始進行同步。由於複製操作的過程是想複製資料在寫入oplog,所以備份節點可能會在已經同步過的資料上再次執行複製操作。mongodb在設計之初就考慮到了這種情況:將oplog中的同乙個操作執行多次,與只執行一次的效果是一樣的。

由於oplog大小是固定的,它只能保持特定數量的操作日誌。通常,oplog使用空間的增長速度與系統處理寫請求的速率幾乎相同:如果主節點上每分鐘處理了1kb的寫入請求,那麼oplog很可能也會在一分鐘內寫入1kb條操作日誌。

但是,有一些例外:如果單次請求能夠影響到多個文件(比如刪除多個文件或者多文件更新),oplog中就會出現多條操作日誌。如果單個操作會影響多個文件,那麼每個受影響的文件都會對應oplog的一條日誌。因此,如果執行db.student.remove()刪除了10w個文件,那麼oplog中也就會有10w條操作日誌,每個日誌對應乙個被刪除的文件。如果執行大量的批量操作,oplog很快就會被填滿。

慢查詢日誌

mongodb中使用系統分析器(system profiler)來查詢耗時過長的操作。系統分析器記錄固定集合system.profile中的操作,並提供大量有關耗時過長的操作資訊,但相應的mongod的整體效能也會有所下降。因此我們一般定期開啟分析器來獲取資訊。

預設情況下,系統分析器處於關閉狀態,不會進行任何記錄。可以在shell中執行db.setprofilinglevel()開啟分析器

第乙個引數是指定級別,不同的級別代表不同的意義,0表示關閉,1表示預設記錄耗時大於100毫秒的操作,2表示記錄所有操作。第二個引數則是自定義「耗時過長"標準,比如記錄所有耗時操作500ms的操作

可以通過db.system.profile.stats()檢視集合的最大容量

檢查點 為什麼要插入檢查點 檢查點的作用

一 為什麼要插入檢查點 檢查點的作用 檢查點記錄被測系統的預期結果,在執行過程中,qtp將預期結果與實際執行結果進行比較,若一致,測試結果報告中,檢查點為passed,否則為failed。只有插入檢查點的 才具有測試能力,檢查功能點是否實現 二 標準檢查點 standard checkpoint 檢...

功能測試檢查點

測試物件 flight 程式 c s 架構 檢查mercury 是否顯示在 之間 dim a,ba window flight reservation winedit order no 4 getroproperty text b cstr a msgbox b 正規表示式檢查 if語句判定成功或者...

lr VuGen(事務 檢查點)

事務的應用 在每乙個請求前後加上transaction 和 end transaction,選單欄insert new step 記錄請求的響應時間,其中end transaction有status選項,有4個選項,若是auto就不用手工判斷事務的執行結果,但這個結果不夠準確。2 統計事務的成功率 ...