PG技術(shù)大講堂 - 第13講:PostgreSQL Full-Page Writes 全頁寫

PostgreSQL從小白到專家,是從入門逐漸能力提升的一個(gè)系列教程,內(nèi)容包括對(duì)PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對(duì)熱愛PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。
Part 13:full-page Writes
內(nèi)容1:PostgreSQL全頁寫概述
內(nèi)容2:PostgreSQL 全頁寫特點(diǎn)
內(nèi)容3:塊不一致造成的原因
內(nèi)容4:是否可以禁用全頁寫
全頁寫概述
· Full-Page Writes(全頁寫)

Full-Page Writes 特點(diǎn)
· 什么是全頁寫
把數(shù)據(jù)塊寫入到WAL日志中
· 目的是為了什么
解決塊不一致問題,保護(hù)數(shù)據(jù)的完整性
· 有哪些缺點(diǎn)
全頁寫會(huì)導(dǎo)致WAL日志膨脹,增加額外I/O
· 如何控制
full_page_writes
Full-Page Writes 模式
全頁寫模式
· 非強(qiáng)制模式:最近一次檢查點(diǎn)之后,第一次修改的數(shù)據(jù)塊會(huì)進(jìn)行全頁寫,后續(xù)再修改時(shí)不會(huì)進(jìn)行全頁寫,直到下一次檢查點(diǎn)發(fā)生。
· 強(qiáng)制模式:當(dāng)用pg_basebackup對(duì)數(shù)據(jù)庫進(jìn)行備份時(shí),會(huì)自動(dòng)執(zhí)行強(qiáng)制模式,在備份期間被修改的數(shù)據(jù)塊會(huì)全部寫入WAL當(dāng)中。執(zhí)行pg_start_backup時(shí),系統(tǒng)也會(huì)進(jìn)入全頁寫模式。
塊不一致
塊不一致的原因
· 操作系統(tǒng)進(jìn)行I/O操作時(shí),總是以塊為單位,比如512字節(jié)、1KB等等。
· 數(shù)據(jù)庫塊一般是操作系統(tǒng)塊的整數(shù)倍,比如2k、4k、8k等等。
· 塊是數(shù)據(jù)庫最小的I/O單位,當(dāng)數(shù)據(jù)庫寫一個(gè)數(shù)據(jù)塊時(shí),操作系統(tǒng)需要I/O多次,可能在I/O過程中系統(tǒng)斷電、磁盤故障等等原因?qū)е乱粋€(gè)數(shù)據(jù)塊沒有完整的寫入,導(dǎo)致塊不一致。

全頁寫是否需要關(guān)閉
· 全頁寫會(huì)導(dǎo)致WAL日志膨脹,增加額外I/O,影響數(shù)據(jù)庫整體性能
· 禁用全頁寫理由
? 如果數(shù)據(jù)庫有完整的備份,可以禁用全頁寫
? 如果優(yōu)先考慮從數(shù)據(jù)庫整體性能,可以禁用全頁寫
? 選擇能夠阻止部分頁面寫入的文件系統(tǒng)(比如ZFS)

以上就是Part 13 - PostgreSQL full-page Writes 的內(nèi)容,歡迎進(jìn)群一起探討,釘釘交流群:35,82,24,60,釘釘群有專門講解公開課
往期課程及視頻,聯(lián)系cuug咨詢老師