journalctl查看日志,Journaling日志功能

 2023-12-25 阅读 27 评论 0

摘要:一、無Journaling的mongo運行原理   在沒有使用journal功能時,mongo數據庫只將數據的內存映射加載到共享視圖shared,不需要將數據加載到視圖。當需要讀取數據時,通過shared中的內存映射找到數據在次盤整的位置,將數據加載到shared中,同時

一、無Journaling的mongo運行原理

  在沒有使用journal功能時,mongo數據庫只將數據的內存映射加載到共享視圖shared,不需要將數據加載到視圖。當需要讀取數據時,通過shared中的內存映射找到數據在次盤整的位置,將數據加載到shared中,同時返回到客戶端,也就是按需加載。當客戶端對數據進行修改或者寫操作時,將數據添加到shared中,每60秒shared鐘的數據返寫到磁盤。如下圖所示:

journalctl查看日志、

二、存在Journaling的mongo運行原理

  在添加journal功能之后,就會產生一個private視圖。整個的運行操作主要有一下幾部分組成。

  

  在對數據進行操作,需要以下幾步進行執行:

  1、獲取數據

    在打開journal功能后,數據會從磁盤獲取內存映射,加載到shared中,同時shared中的內存映射會同步到private中一份,在客戶端獲取數據時,通過內存映射從磁盤加載到shared和private中,客戶端從private獲取數據。圖示如下:

      

  2、寫數據、批量寫入journal和刷新shared

    客戶端修改或者寫操作時,數據會存儲到private中,private中的數據會周期性的寫入到journal文件中,這個周期默認是100ms,是通過journalCommitInterval來控制的。同時,journal文件中的數據操作會寫入shared中,批量寫入到journal可以提高對數據庫的并發操作。如果數據庫出現故障,在這段時間內的數據可能丟失。圖示如下:

    

  3、數據庫若崩潰

     一旦數據庫崩潰,在重新啟動數據庫時,journal文件中的數據庫操作會再次刷新到shared中。圖示如下:

      

  4、重新映射、刷新磁盤

   journal中存儲的是數據操作指令,只是對shared中的數據進行操作。在將journal中的內容刷新到shared中后,shared中的數據會重新映射private中,由于shared中的數據與private中的數據不一致,在重新映射后,private的大小一般為0。同時,shared中的數據也會周期性的將數據刷新到磁盤,這個周期默認為60s。在刷新磁盤成功后,journal文件中的數據會自動刪除。圖示如下:

    

?

轉載于:https://www.cnblogs.com/youzhongmin/p/8306964.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194979.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息