詳談WAL文件+-+瀚高HGDB+-+禹曉_第1頁(yè)
詳談WAL文件+-+瀚高HGDB+-+禹曉_第2頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

詳談WAL文件禹曉

售后技術(shù)支持工程師PART01WAL概述WAL的概念、位置、命名格式等什么是WALWAL是WriteAheadLog的縮寫,它被當(dāng)成事務(wù)日志的同義詞,而且也用來(lái)指代一種將行為寫入事務(wù)日志的實(shí)現(xiàn)機(jī)制,即預(yù)寫式日志。WAL(預(yù)寫式日志)的概念就是在修改數(shù)據(jù)之前,必須要把這些修改操作記錄到磁盤中,這樣后面更新實(shí)際數(shù)據(jù)時(shí),就不需要實(shí)時(shí)地把數(shù)據(jù)持久化到文件中了。即使機(jī)器突然宕機(jī)或數(shù)據(jù)庫(kù)異常退出,導(dǎo)致一部分內(nèi)存中的臟數(shù)據(jù)沒(méi)有及時(shí)地刷新到文件中,在數(shù)據(jù)庫(kù)重啟后,通過(guò)讀取WAL日志,并把最后一部分的WAL日志重新執(zhí)行一遍,就可以恢復(fù)到宕機(jī)時(shí)的狀態(tài)。WAL文件位置HighGoDataBase的WAL日志文件在數(shù)據(jù)目錄內(nèi)的pg_wal目錄下[highgo@localhostdata]$ll$pg_wal/total65536-rw.1highgohighgo16777216Jun909:48000000010000000000000019-rw.1highgohighgo16777216Jun909:4800000001000000000000001A-rw.1highgohighgo16777216Jun909:4800000001000000000000001B-rw.1highgohighgo16777216Jun909:4800000001000000000000001Cdrwx.2highgohighgo43Jun909:48archive_statuspg_wal目錄下會(huì)產(chǎn)生多個(gè)WAL日志,這樣就可保證在宕機(jī)后,未持久化的數(shù)據(jù)都可以通過(guò)WAL日志來(lái)恢復(fù),那些不需要的WAL日志將會(huì)被自動(dòng)覆蓋。WAL段文件名是由24個(gè)十六進(jìn)制數(shù)組成的,其命名規(guī)則如下:WAL段文件命名WAL段文件命名WAL段文件名分為三部分,其中每8個(gè)字符為一組,每組的意義如下:

00000001000000000000001B

TimeLineIDLogIdLogSegTimeline:時(shí)間線,不會(huì)因?yàn)閿?shù)據(jù)庫(kù)的起、停發(fā)生變化,只有當(dāng)數(shù)據(jù)庫(kù)發(fā)生基于時(shí)間點(diǎn)恢復(fù)后才會(huì)進(jìn)行改變。LSN:LogSequenceNumber,xlog記錄的日志序列號(hào),標(biāo)識(shí)了該記錄在事務(wù)日志中的位置,64位無(wú)符號(hào)整形變量。LogId:LSN的高32位。LogSeg:LSN的低32位/16M,LogSeg最大的值為256。通過(guò)系統(tǒng)函數(shù)來(lái)獲得當(dāng)前WAL的寫入位置和插入位置highgo=#selectpg_current_wal_lsn(),pg_current_wal_insert_lsn();pg_current_wal_lsn|pg_current_wal_insert_lsn+0/1B000108|0/1B000108LSN為0/1B000108logId就是“0/1B000108”中的第一個(gè)數(shù)字,即“0”logSeg就是“0/1B000108”中的第二個(gè)數(shù)字除以16M的大小,即1B000108除以16M,而16M相當(dāng)于2的24次方,相當(dāng)于十六進(jìn)制數(shù)“1B000108”右移6位,即“1B000108”中的最高兩位“1B”那么根據(jù)WAL文件的格式timelineID+logId+logSeg,則相當(dāng)于:“00000001”+“00000000”+“0000001B”,即為:“00000001000000000000001B”寫的位置是在文件“00000001000000000000001B”中的偏移量是多少呢?實(shí)際上是在“0/1B000108”中第二個(gè)數(shù)字“1B000108”后六位“000108”,換算成十進(jìn)制為“264”。WAL段文件命名WAL段文件命名當(dāng)然數(shù)據(jù)庫(kù)已準(zhǔn)備了函數(shù)pg_walfile_name、pg_walfile_name_offset幫我們做以上的轉(zhuǎn)換,如下所示:highgo=#selectpg_walfile_name('0/1B000108');pg_walfile_name00000001000000000000001Bhighgo=#selectpg_walfile_name_offset('0/1B000108');pg_walfile_name_offset(00000001000000000000001B,264)[highgo@localhostpg_wal]$du-sh00000001000000000000001B16M 00000001000000000000001BWAL段文件默認(rèn)大小是16M,如何更改WAL文件的大???答:HighGoDataBase支持initdb和pg_resetwal修改WAL文件大小WAL段文件大小WAL段文件大小HighGoDataBase支持initdb和pg_resetwal修改WAL文件大小,方便了WAL文件的管理[highgo@localhost~]$initdb--help-X,--waldir=WALDIRlocationforthewrite-aheadlogdirectory--wal-segsize=SIZEsizeofWALsegments,inmegabytes[highgo@pg118~]$pg_resetwal--help--wal-segsize=SIZEsizeofWALsegments,inmegabytesWAL日志文件大小默認(rèn)為16MB,該值必須是1到1024之間的2的次方,增大WAL文件大小能夠減少WAL日志文件的產(chǎn)生。WAL文件內(nèi)部布局第一個(gè)頁(yè)面包含了由XLogLongPageHeaderData定義的首部數(shù)據(jù),其他的頁(yè)面包含了由XLogPageHeaderData定義的首部數(shù)據(jù)。每個(gè)頁(yè)面的首部數(shù)據(jù)之后,緊接著就是以降序?qū)懭氲腦LOG記錄。PART02WAL文件作用WAL文件在數(shù)據(jù)庫(kù)運(yùn)維過(guò)程中的用途W(wǎng)AL文件的作用實(shí)現(xiàn)事務(wù)的持久性物理復(fù)制(流復(fù)制)邏輯復(fù)制系統(tǒng)崩潰后恢復(fù)基于時(shí)間點(diǎn)恢復(fù)(PITR)實(shí)現(xiàn)事務(wù)的持久性每個(gè)事務(wù)在提交時(shí)先保證WAL日志已經(jīng)刷寫到硬盤文件中,這樣即使數(shù)據(jù)庫(kù)系統(tǒng)發(fā)生異?;蛑貑?,用戶也可以通過(guò)回放(Replay)該事務(wù)的WAL日志進(jìn)行恢復(fù),從而實(shí)現(xiàn)事務(wù)的持久化特性。持久性:事務(wù)完成后,它對(duì)于系統(tǒng)的影響是永久性的,即使今后出現(xiàn)致命的系統(tǒng)故障(如機(jī)器重啟、掉電),數(shù)據(jù)也一直保持。物理復(fù)制(流復(fù)制)HighGoDataBase目前支持異步、同步、級(jí)聯(lián)流復(fù)制等功能。流復(fù)制是基于WAL日志的物理復(fù)制,其原理是主庫(kù)不間斷地發(fā)送WAL日志流到備庫(kù),備庫(kù)接收主庫(kù)發(fā)送的WAL日志流后應(yīng)用WAL。異步和同步的區(qū)別?簡(jiǎn)單來(lái)說(shuō),異步流復(fù)制是指主庫(kù)上提交事務(wù)時(shí)不需要等待備庫(kù)接收WAL日志流并寫入到備庫(kù)WAL日志文件時(shí)便返回成功,而同步流復(fù)制相反。邏輯復(fù)制HighGoDatabase支持邏輯復(fù)制邏輯復(fù)制是基于邏輯解析(logicaldecoding),其核心原理是主庫(kù)將WAL日志流解析成一定格式,訂閱節(jié)點(diǎn)收到解析的WAL數(shù)據(jù)流后進(jìn)行應(yīng)用,從而實(shí)現(xiàn)數(shù)據(jù)同步,邏輯復(fù)制并不是使用WAL原始日志文件進(jìn)行復(fù)制,而是將WAL日志解析成了一定格式。邏輯復(fù)制需要注意的點(diǎn):需要將發(fā)布節(jié)點(diǎn)wal_level參數(shù)需要設(shè)置成logical目前邏輯復(fù)制僅支持普通表,序列、視圖、物化視圖、分區(qū)表、外部表等對(duì)象都不支持。不支持復(fù)制DDL操作,需在訂閱節(jié)點(diǎn)對(duì)發(fā)布表手工執(zhí)行DDL操作基于時(shí)間點(diǎn)恢復(fù)(PITR)PITR模式下的HighGoDataBase會(huì)在基礎(chǔ)備份上重放歸檔日志中的WAL數(shù)據(jù),從pg_start_backup創(chuàng)建的重做點(diǎn)開(kāi)始,恢復(fù)到想要的位置為止。PITR過(guò)程與常規(guī)恢復(fù)不同的是從配置參數(shù)archive_command中設(shè)置的歸檔目錄讀取WAL段,從backup_label文件讀取檢查點(diǎn)位置。PART03WAL文件配置和管理WAL文件相關(guān)機(jī)制及參數(shù)介紹WAL段切換當(dāng)發(fā)生下面任一種情況時(shí),WAL段會(huì)發(fā)生切換:(1)WAL段已經(jīng)被填滿(2)調(diào)用函數(shù)pg_switch_wal()(3)啟用了archive_mode且已經(jīng)超過(guò)archive_timeout配置的時(shí)間WAL段文件回收被切換的文件通常被回收(重命名或重用),以供未來(lái)使用,如果不需要,可能會(huì)被移除WAL_1被重命名為WAL_7回收利用,而WAL_2被移除WAL歸檔當(dāng)WAL段文件發(fā)生切換時(shí)自動(dòng)將其復(fù)制到歸檔區(qū)域,archive_command參數(shù)配置歸檔區(qū)域。當(dāng)WAL_7發(fā)生切換時(shí),該文件被復(fù)制到歸檔區(qū)域,作為Archivelog7。WAL部分參數(shù)配置$PGDATA/postgresql.conf文件中有以下關(guān)于WAL的配置參數(shù)#-Settings-#wal_level=replica表示決定多少信息寫入到WAL中。默認(rèn)值是replica。修改此參數(shù)需要重啟數(shù)據(jù)庫(kù)??蛇x的參數(shù)值是minimal、replica、logical。minimal是僅寫入崩潰或者突發(fā)關(guān)機(jī)時(shí)所需要的信息。replica增加wal歸檔信息,包括只讀服務(wù)器需要的信息。logical主要用于邏輯復(fù)制場(chǎng)景。 #fsync=on表示數(shù)據(jù)庫(kù)將調(diào)用fsync()把文件系統(tǒng)中的臟頁(yè)刷新到物理磁盤,確保數(shù)據(jù)庫(kù)在操作系統(tǒng)或者硬件崩潰的情況下可恢復(fù)到一個(gè)一致的狀態(tài)。默認(rèn)值on。當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)不是很重要,或者性能需求大于數(shù)據(jù)安全性需求時(shí),為了提高數(shù)據(jù)庫(kù)文件加載速度,可以把此參數(shù)設(shè)置為off。注:fsync=off時(shí),可以關(guān)閉full_page_writes,因?yàn)榧词筬ull_page_writes=on也無(wú)法保證數(shù)據(jù)安全性。WAL部分參數(shù)配置#synchronous_commit=on表示提交事務(wù)提交后是否需要等待

WAL刷到磁盤后才返回成功信息。默認(rèn)值on??蛇x的參數(shù)值是off、local、remote_write、remote_apply、on。不同于fsync,將這個(gè)參數(shù)設(shè)置為off

不會(huì)產(chǎn)生數(shù)據(jù)庫(kù)不一致性的風(fēng)險(xiǎn):只會(huì)導(dǎo)致用戶最近的幾個(gè)已提交成功的事務(wù)丟失,即在數(shù)據(jù)庫(kù)崩潰或突然關(guān)機(jī)后,重啟數(shù)據(jù)庫(kù)時(shí),用戶會(huì)發(fā)現(xiàn)故障時(shí)間點(diǎn)附近的這幾個(gè)事務(wù)實(shí)際上并沒(méi)有提交成功,而是回滾掉了,而數(shù)據(jù)庫(kù)狀態(tài)是一致的。因此,當(dāng)性能比確保事務(wù)的持久性更重要時(shí),synchronous_commit=off可以提高性能。#wal_sync_method=fsync表示向磁盤強(qiáng)制更新

WAL數(shù)據(jù)的方法,默認(rèn)值fsync。可選的參數(shù)值是open_datasync、fdatasync、fsync、fsync_writethrough、open_sync。此選項(xiàng)一般保持默認(rèn)值。如果fsync=off,該參數(shù)設(shè)置就沒(méi)有意義。WAL部分參數(shù)配置#full_page_writes=on服務(wù)器會(huì)在檢查點(diǎn)checkpoint之后對(duì)頁(yè)面第一次修改時(shí)將整個(gè)頁(yè)面寫到WAL日志里。默認(rèn)值on。這么做是因?yàn)樵诓僮飨到y(tǒng)崩潰期間可能只有部分頁(yè)面寫入磁盤,導(dǎo)致在一個(gè)頁(yè)面中混合有新舊數(shù)據(jù)。將完整的頁(yè)面保存在WAL日志中,就可以直接使用WAL日志中的頁(yè)覆蓋新舊數(shù)據(jù)混合頁(yè)以完成恢復(fù)工作。#wal_buffers=-1表示用于緩存WAL數(shù)據(jù)共享內(nèi)存的大小。默認(rèn)值-1。在每次事務(wù)提交時(shí),都會(huì)將WAL緩沖區(qū)的內(nèi)容刷寫到磁盤,所以將wal_buffers設(shè)置成極大的值并不能顯著提高性能。WAL部分參數(shù)配置#-Checkpoints–#checkpoint_timeout=5min表示自動(dòng)執(zhí)行WALCheckPoint的最長(zhǎng)時(shí)間間隔。默認(rèn)5min。增大這個(gè)參數(shù)會(huì)增加數(shù)據(jù)庫(kù)崩潰以后恢復(fù)操作需要的時(shí)間。#max_wal_size=1GBWAL日志文件增大到該參數(shù)指定大小后,會(huì)自動(dòng)進(jìn)行CheckPoint。默認(rèn)1GB。特殊情況下,如負(fù)荷過(guò)高、archive_command歸檔失敗、wal_keep_segments設(shè)置過(guò)大,WAL文件大小會(huì)超過(guò)設(shè)置的值。增加這個(gè)參數(shù)會(huì)延長(zhǎng)崩潰恢復(fù)所需要的時(shí)間。#min_wal_size=80MB只要WAL文件磁盤使用率小于于這個(gè)設(shè)置,執(zhí)行CheckPoint時(shí)就可以回收而不是刪除舊的WAL日志文件。默認(rèn)值80MB。這可以用來(lái)確保預(yù)留足夠的空間處理WAL文件在使用中的峰值,如運(yùn)行大批量工作。WAL部分參數(shù)配置#checkpoint_completion_target=0.5#checkpointtargetduration,0.0-1.0表示完成CheckPoint所需時(shí)間占CheckPoint啟動(dòng)間隔的總時(shí)間的比例。默認(rèn)值0.5。參數(shù)的取值范圍是0.0-1.0。#checkpoint_flush_after=256kB在執(zhí)行檢查點(diǎn)時(shí),只要有checkpoint_flush_after字節(jié)被寫入,就嘗試強(qiáng)制操作系統(tǒng)將其緩存中的臟數(shù)據(jù)刷寫到磁盤。Linux上的默認(rèn)值是256kB。參數(shù)的取值范圍是0~2MB。#checkpoint_warning=30s如果CheckPoint實(shí)際發(fā)生間隔小于該數(shù)值,在log中寫入一條警告信息。默認(rèn)值是30s。參數(shù)設(shè)置為0時(shí)禁用,如果checkpoint_timeout值小于該數(shù)值,也不會(huì)生成警告信息。WAL部分參數(shù)配置#-Archiving-#archive_mode=off表示是否將完成的WAL段進(jìn)行歸檔存儲(chǔ)。默認(rèn)off。修改此參數(shù)需要重啟數(shù)據(jù)庫(kù)??蛇x的參數(shù)值有off、on、always。

#archive_command=''執(zhí)行本地shell命令來(lái)歸檔完成的WAL段。例如:'test!-f/mnt/server/archivedir/%f&&cp%p/mnt/server/archivedir/%f'字符串中的%p要被歸檔的文件的路徑名,%f歸檔的文件名#archive_timeout=0為了限制未歸檔數(shù)據(jù)存在的時(shí)間,可以設(shè)置archive_timeout來(lái)強(qiáng)制服務(wù)器來(lái)周期性地切換到一個(gè)新的WAL段文件。PART04WAL插入和恢復(fù)數(shù)據(jù)過(guò)程WAL文件數(shù)據(jù)插入及數(shù)據(jù)恢復(fù)過(guò)程詳解WAL插入和恢復(fù)數(shù)據(jù)過(guò)程數(shù)據(jù)插入操作(1)檢查點(diǎn)程序啟動(dòng)向當(dāng)前WAL段文件寫入一條XLOG記錄(2)發(fā)起第一條ins

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論