

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
詳談WAL文件禹曉
售后技術(shù)支持工程師PART01WAL概述WAL的概念、位置、命名格式等什么是WALWAL是WriteAheadLog的縮寫,它被當(dāng)成事務(wù)日志的同義詞,而且也用來指代一種將行為寫入事務(wù)日志的實現(xiàn)機制,即預(yù)寫式日志。WAL(預(yù)寫式日志)的概念就是在修改數(shù)據(jù)之前,必須要把這些修改操作記錄到磁盤中,這樣后面更新實際數(shù)據(jù)時,就不需要實時地把數(shù)據(jù)持久化到文件中了。即使機器突然宕機或數(shù)據(jù)庫異常退出,導(dǎo)致一部分內(nèi)存中的臟數(shù)據(jù)沒有及時地刷新到文件中,在數(shù)據(jù)庫重啟后,通過讀取WAL日志,并把最后一部分的WAL日志重新執(zhí)行一遍,就可以恢復(fù)到宕機時的狀態(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目錄下會產(chǎn)生多個WAL日志,這樣就可保證在宕機后,未持久化的數(shù)據(jù)都可以通過WAL日志來恢復(fù),那些不需要的WAL日志將會被自動覆蓋。WAL段文件名是由24個十六進制數(shù)組成的,其命名規(guī)則如下:WAL段文件命名WAL段文件命名WAL段文件名分為三部分,其中每8個字符為一組,每組的意義如下:
00000001000000000000001B
TimeLineIDLogIdLogSegTimeline:時間線,不會因為數(shù)據(jù)庫的起、停發(fā)生變化,只有當(dāng)數(shù)據(jù)庫發(fā)生基于時間點恢復(fù)后才會進行改變。LSN:LogSequenceNumber,xlog記錄的日志序列號,標(biāo)識了該記錄在事務(wù)日志中的位置,64位無符號整形變量。LogId:LSN的高32位。LogSeg:LSN的低32位/16M,LogSeg最大的值為256。通過系統(tǒng)函數(shù)來獲得當(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”中的第一個數(shù)字,即“0”logSeg就是“0/1B000108”中的第二個數(shù)字除以16M的大小,即1B000108除以16M,而16M相當(dāng)于2的24次方,相當(dāng)于十六進制數(shù)“1B000108”右移6位,即“1B000108”中的最高兩位“1B”那么根據(jù)WAL文件的格式timelineID+logId+logSeg,則相當(dāng)于:“00000001”+“00000000”+“0000001B”,即為:“00000001000000000000001B”寫的位置是在文件“00000001000000000000001B”中的偏移量是多少呢?實際上是在“0/1B000108”中第二個數(shù)字“1B000108”后六位“000108”,換算成十進制為“264”。WAL段文件命名WAL段文件命名當(dāng)然數(shù)據(jù)庫已準(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文件的大?。看穑篐ighGoDataBase支持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)部布局第一個頁面包含了由XLogLongPageHeaderData定義的首部數(shù)據(jù),其他的頁面包含了由XLogPageHeaderData定義的首部數(shù)據(jù)。每個頁面的首部數(shù)據(jù)之后,緊接著就是以降序?qū)懭氲腦LOG記錄。PART02WAL文件作用WAL文件在數(shù)據(jù)庫運維過程中的用途W(wǎng)AL文件的作用實現(xiàn)事務(wù)的持久性物理復(fù)制(流復(fù)制)邏輯復(fù)制系統(tǒng)崩潰后恢復(fù)基于時間點恢復(fù)(PITR)實現(xiàn)事務(wù)的持久性每個事務(wù)在提交時先保證WAL日志已經(jīng)刷寫到硬盤文件中,這樣即使數(shù)據(jù)庫系統(tǒng)發(fā)生異?;蛑貑?,用戶也可以通過回放(Replay)該事務(wù)的WAL日志進行恢復(fù),從而實現(xiàn)事務(wù)的持久化特性。持久性:事務(wù)完成后,它對于系統(tǒng)的影響是永久性的,即使今后出現(xiàn)致命的系統(tǒng)故障(如機器重啟、掉電),數(shù)據(jù)也一直保持。物理復(fù)制(流復(fù)制)HighGoDataBase目前支持異步、同步、級聯(lián)流復(fù)制等功能。流復(fù)制是基于WAL日志的物理復(fù)制,其原理是主庫不間斷地發(fā)送WAL日志流到備庫,備庫接收主庫發(fā)送的WAL日志流后應(yīng)用WAL。異步和同步的區(qū)別?簡單來說,異步流復(fù)制是指主庫上提交事務(wù)時不需要等待備庫接收WAL日志流并寫入到備庫WAL日志文件時便返回成功,而同步流復(fù)制相反。邏輯復(fù)制HighGoDatabase支持邏輯復(fù)制邏輯復(fù)制是基于邏輯解析(logicaldecoding),其核心原理是主庫將WAL日志流解析成一定格式,訂閱節(jié)點收到解析的WAL數(shù)據(jù)流后進行應(yīng)用,從而實現(xiàn)數(shù)據(jù)同步,邏輯復(fù)制并不是使用WAL原始日志文件進行復(fù)制,而是將WAL日志解析成了一定格式。邏輯復(fù)制需要注意的點:需要將發(fā)布節(jié)點wal_level參數(shù)需要設(shè)置成logical目前邏輯復(fù)制僅支持普通表,序列、視圖、物化視圖、分區(qū)表、外部表等對象都不支持。不支持復(fù)制DDL操作,需在訂閱節(jié)點對發(fā)布表手工執(zhí)行DDL操作基于時間點恢復(fù)(PITR)PITR模式下的HighGoDataBase會在基礎(chǔ)備份上重放歸檔日志中的WAL數(shù)據(jù),從pg_start_backup創(chuàng)建的重做點開始,恢復(fù)到想要的位置為止。PITR過程與常規(guī)恢復(fù)不同的是從配置參數(shù)archive_command中設(shè)置的歸檔目錄讀取WAL段,從backup_label文件讀取檢查點位置。PART03WAL文件配置和管理WAL文件相關(guān)機制及參數(shù)介紹WAL段切換當(dāng)發(fā)生下面任一種情況時,WAL段會發(fā)生切換:(1)WAL段已經(jīng)被填滿(2)調(diào)用函數(shù)pg_switch_wal()(3)啟用了archive_mode且已經(jīng)超過archive_timeout配置的時間WAL段文件回收被切換的文件通常被回收(重命名或重用),以供未來使用,如果不需要,可能會被移除WAL_1被重命名為WAL_7回收利用,而WAL_2被移除WAL歸檔當(dāng)WAL段文件發(fā)生切換時自動將其復(fù)制到歸檔區(qū)域,archive_command參數(shù)配置歸檔區(qū)域。當(dāng)WAL_7發(fā)生切換時,該文件被復(fù)制到歸檔區(qū)域,作為Archivelog7。WAL部分參數(shù)配置$PGDATA/postgresql.conf文件中有以下關(guān)于WAL的配置參數(shù)#-Settings-#wal_level=replica表示決定多少信息寫入到WAL中。默認(rèn)值是replica。修改此參數(shù)需要重啟數(shù)據(jù)庫??蛇x的參數(shù)值是minimal、replica、logical。minimal是僅寫入崩潰或者突發(fā)關(guān)機時所需要的信息。replica增加wal歸檔信息,包括只讀服務(wù)器需要的信息。logical主要用于邏輯復(fù)制場景。 #fsync=on表示數(shù)據(jù)庫將調(diào)用fsync()把文件系統(tǒng)中的臟頁刷新到物理磁盤,確保數(shù)據(jù)庫在操作系統(tǒng)或者硬件崩潰的情況下可恢復(fù)到一個一致的狀態(tài)。默認(rèn)值on。當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)不是很重要,或者性能需求大于數(shù)據(jù)安全性需求時,為了提高數(shù)據(jù)庫文件加載速度,可以把此參數(shù)設(shè)置為off。注:fsync=off時,可以關(guān)閉full_page_writes,因為即使full_page_writes=on也無法保證數(shù)據(jù)安全性。WAL部分參數(shù)配置#synchronous_commit=on表示提交事務(wù)提交后是否需要等待
WAL刷到磁盤后才返回成功信息。默認(rèn)值on。可選的參數(shù)值是off、local、remote_write、remote_apply、on。不同于fsync,將這個參數(shù)設(shè)置為off
不會產(chǎn)生數(shù)據(jù)庫不一致性的風(fēng)險:只會導(dǎo)致用戶最近的幾個已提交成功的事務(wù)丟失,即在數(shù)據(jù)庫崩潰或突然關(guān)機后,重啟數(shù)據(jù)庫時,用戶會發(fā)現(xiàn)故障時間點附近的這幾個事務(wù)實際上并沒有提交成功,而是回滾掉了,而數(shù)據(jù)庫狀態(tài)是一致的。因此,當(dāng)性能比確保事務(wù)的持久性更重要時,synchronous_commit=off可以提高性能。#wal_sync_method=fsync表示向磁盤強制更新
WAL數(shù)據(jù)的方法,默認(rèn)值fsync??蛇x的參數(shù)值是open_datasync、fdatasync、fsync、fsync_writethrough、open_sync。此選項一般保持默認(rèn)值。如果fsync=off,該參數(shù)設(shè)置就沒有意義。WAL部分參數(shù)配置#full_page_writes=on服務(wù)器會在檢查點checkpoint之后對頁面第一次修改時將整個頁面寫到WAL日志里。默認(rèn)值on。這么做是因為在操作系統(tǒng)崩潰期間可能只有部分頁面寫入磁盤,導(dǎo)致在一個頁面中混合有新舊數(shù)據(jù)。將完整的頁面保存在WAL日志中,就可以直接使用WAL日志中的頁覆蓋新舊數(shù)據(jù)混合頁以完成恢復(fù)工作。#wal_buffers=-1表示用于緩存WAL數(shù)據(jù)共享內(nèi)存的大小。默認(rèn)值-1。在每次事務(wù)提交時,都會將WAL緩沖區(qū)的內(nèi)容刷寫到磁盤,所以將wal_buffers設(shè)置成極大的值并不能顯著提高性能。WAL部分參數(shù)配置#-Checkpoints–#checkpoint_timeout=5min表示自動執(zhí)行WALCheckPoint的最長時間間隔。默認(rèn)5min。增大這個參數(shù)會增加數(shù)據(jù)庫崩潰以后恢復(fù)操作需要的時間。#max_wal_size=1GBWAL日志文件增大到該參數(shù)指定大小后,會自動進行CheckPoint。默認(rèn)1GB。特殊情況下,如負(fù)荷過高、archive_command歸檔失敗、wal_keep_segments設(shè)置過大,WAL文件大小會超過設(shè)置的值。增加這個參數(shù)會延長崩潰恢復(fù)所需要的時間。#min_wal_size=80MB只要WAL文件磁盤使用率小于于這個設(shè)置,執(zhí)行CheckPoint時就可以回收而不是刪除舊的WAL日志文件。默認(rèn)值80MB。這可以用來確保預(yù)留足夠的空間處理WAL文件在使用中的峰值,如運行大批量工作。WAL部分參數(shù)配置#checkpoint_completion_target=0.5#checkpointtargetduration,0.0-1.0表示完成CheckPoint所需時間占CheckPoint啟動間隔的總時間的比例。默認(rèn)值0.5。參數(shù)的取值范圍是0.0-1.0。#checkpoint_flush_after=256kB在執(zhí)行檢查點時,只要有checkpoint_flush_after字節(jié)被寫入,就嘗試強制操作系統(tǒng)將其緩存中的臟數(shù)據(jù)刷寫到磁盤。Linux上的默認(rèn)值是256kB。參數(shù)的取值范圍是0~2MB。#checkpoint_warning=30s如果CheckPoint實際發(fā)生間隔小于該數(shù)值,在log中寫入一條警告信息。默認(rèn)值是30s。參數(shù)設(shè)置為0時禁用,如果checkpoint_timeout值小于該數(shù)值,也不會生成警告信息。WAL部分參數(shù)配置#-Archiving-#archive_mode=off表示是否將完成的WAL段進行歸檔存儲。默認(rèn)off。修改此參數(shù)需要重啟數(shù)據(jù)庫??蛇x的參數(shù)值有off、on、always。
#archive_command=''執(zhí)行本地shell命令來歸檔完成的WAL段。例如:'test!-f/mnt/server/archivedir/%f&&cp%p/mnt/server/archivedir/%f'字符串中的%p要被歸檔的文件的路徑名,%f歸檔的文件名#archive_timeout=0為了限制未歸檔數(shù)據(jù)存在的時間,可以設(shè)置archive_timeout來強制服務(wù)器來周期性地切換到一個新的WAL段文件。PART04WAL插入和恢復(fù)數(shù)據(jù)過程WAL文件數(shù)據(jù)插入及數(shù)據(jù)恢復(fù)過程詳解WAL插入和恢復(fù)數(shù)據(jù)過程數(shù)據(jù)插入操作(1)檢查點程序啟動向當(dāng)前WAL段文件寫入一條XLOG記錄(2)發(fā)起第一條ins
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年旋渦式鼓風(fēng)機合作協(xié)議書
- 廣告宣傳欄制作協(xié)議
- 2025年江西危險品資格證理論考試試題2024年的
- 企業(yè)出口貿(mào)易資質(zhì)及運營證明(8篇)
- 深度解析管理學(xué)試題及答案
- 學(xué)校內(nèi)部教育培訓(xùn)合作協(xié)議
- 家政服務(wù)中介合同
- 農(nóng)業(yè)種植技術(shù)轉(zhuǎn)讓協(xié)議
- 室內(nèi)裝修工程施工合同
- 餐飲業(yè)高效點餐與智能廚房管理方案
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計規(guī)范
- 2024年網(wǎng)絡(luò)安全知識競賽考試題庫400題(含答案)
- 《海上風(fēng)電場工程測量規(guī)程》(NB-T 10104-2018)
- 2024年手機充電器市場洞察報告
- 《學(xué)包粽子》微課
- 臨床藥師的溝通技巧和專業(yè)素養(yǎng)
- SL345-2007水利水電工程注水試驗規(guī)程
- 中國古代十大傳世名畫
- 《重疊問題》-徐長青
- 數(shù)據(jù)治理策略與框架
- 漁業(yè)保險與風(fēng)險防控
評論
0/150
提交評論