您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“POSTGRESQL中WAL機(jī)制的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“POSTGRESQL中WAL機(jī)制的示例分析”這篇文章吧。
POSTGRESQL 做作為類似MYSQL BINLOG + UNDO LOG , ORACLE REDO LOG ,的存在,是POSTGRESQL 本身在防止數(shù)據(jù)丟失,備份數(shù)據(jù),數(shù)據(jù)復(fù)制,數(shù)據(jù)庫CRASH 后的恢復(fù)數(shù)據(jù)等等功能于一身。
還是那句話,如果汽車的三大件,發(fā)動(dòng)機(jī),變速箱,底盤,那 POSTGRESQL WAL 想當(dāng)于汽車的 底盤,它集合了數(shù)據(jù)庫的安全性,性能,穩(wěn)定性等等重要特性于一身。
如果詳細(xì)的解釋W(xué)AL 到底具體的作用,它一個(gè)歷史日志,記錄數(shù)據(jù)庫系統(tǒng)中的所有更改和操作,以確保沒有任何數(shù)據(jù)由于故障而丟失,例如電源故障或其他導(dǎo)致服務(wù)器崩潰的服務(wù)器故障。由于日志包含了關(guān)于已經(jīng)執(zhí)行的每個(gè)事務(wù)的足夠信息,所以數(shù)據(jù)庫服務(wù)器應(yīng)該能夠通過在事務(wù)日志中重播更改和操作來恢復(fù)數(shù)據(jù)庫中的數(shù)據(jù)。
我們來大致跟著WAL 的流程走一遍來(其實(shí)很多數(shù)據(jù)庫都是這樣,MYSQL , SQL SERVER , ORACLE),只不過生成的形式,文件的格式,以及使用的方式,等等有所不同,但他們一直的目標(biāo)就是數(shù)據(jù)不丟失。
首先在確認(rèn)一點(diǎn)的是,任何的數(shù)據(jù)操作都是在內(nèi)存中完成的,和磁盤上的文件沒有什么關(guān)系,要說關(guān)系就是數(shù)據(jù)的持久化,duration。
上圖粗糙的描述了,一個(gè)數(shù)據(jù)的寫入(寫入包含INSERT ,UPDATE,其實(shí)DELETE 從某種角度也是數(shù)據(jù)的寫入),那在數(shù)據(jù)寫入到內(nèi)存中,和WAL LOG 是一項(xiàng)事務(wù),(其實(shí)LOG 也是有buffer的,主要為性能)。這里我們忽略LOG BUFFER,直接認(rèn)為,上面的操作是一個(gè)事務(wù)。 然后數(shù)據(jù)落到日志后,這個(gè)操作就會(huì)返回成功,后面的就是dirty page 刷入到磁盤的過程,這其實(shí)是不著急的,(這里不著急不是說等一個(gè)小時(shí)),在進(jìn)行check point 后,數(shù)據(jù)就會(huì)落入到數(shù)據(jù)PAGE,數(shù)據(jù)就持久化了, 大致就是這樣一個(gè)流程。
那這里有一個(gè)問題,就是在數(shù)據(jù)dirty page 沒有刷新到DATA PAGE,而機(jī)器就OVER 了,或者OOM,那下次機(jī)器在啟動(dòng)后,數(shù)據(jù)頁面沒有數(shù)據(jù),那數(shù)據(jù)丟失了嗎? 沒有,因?yàn)橛蠾AL,為什么數(shù)據(jù)頁面沒有數(shù)據(jù),因?yàn)閐irty page 沒有check point ,而系統(tǒng)啟動(dòng)后,通過檢查check point點(diǎn),獲知check point 點(diǎn)的位置,而在此位置后的的 dirty page 的操作都在wal中存儲(chǔ),所以直接執(zhí)行 check point 點(diǎn)后的 wal 你的數(shù)據(jù)就回來了,crash data recovery. You job is done.
這就是這個(gè)WAL 的最重要的功能,之一。
我們可以通過下面的命令來確認(rèn)當(dāng)前的wal 落到到那個(gè)wal 文件中
另外在PG 11 之前的版本會(huì)存儲(chǔ)兩個(gè) checkpoint的位置,一個(gè)是最后一次的checkpoint的位置,另一個(gè)是再一次要進(jìn)行的checkpiont的位置,而11,則只記錄最近一次的checkpoint的記錄號(hào)。
同時(shí)我們通過pg_controldata 命令可以獲得關(guān)于當(dāng)前PG 在WAL 中的詳細(xì)信息,甚至利用的好,還可以來獲知一些關(guān)系性能方面的事情。(具體怎么干,找時(shí)間能寫一篇)
同時(shí) DBA 也可以手動(dòng)進(jìn)行 WAL 的新日志的生成,切斷現(xiàn)在的WAL日志,進(jìn)行需要的維護(hù)。
同時(shí),PG 也和其他數(shù)據(jù)庫一樣,例如MYSQL mysqlbinlog 命令來解析BINLOG文件,PG 的 pg_waldump 也可以將wal 文件翻譯成人類可讀的格式。
以上是“POSTGRESQL中WAL機(jī)制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。