夜色av网/黄色aa级片/84pao国产成人高清在线/免费av资源

大數據就業實戰培訓 Oracle就業實戰培訓

CUUG,以就業為導向,讓學員學到真正實用的技術

當前位置: CUUG培訓-優技培訓 >> 關于我們 >

PostgreSQL技術大講堂 - 第17講:Vacuum空間管理工具

PostgreSQL技術大講堂 - 第17講:Vacuum空間管理工具

來源:CUUG培訓-優技培訓    更新時間:2023/5/24 15:02:43    閱讀次數:

PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。

Part 17:Vacuum空間管理工具

內容1:VACUUM 概述

內容2:可見性地圖作用

內容3:凍結處理

內容4:Autovacuum daemon

內容5:Full VACUUM

 

VACUUM概述

· VACUUM概述Vacuum處理對數據庫中的指定表或所有表執行以下任務:

1、移除死元組

 刪除死元組并對每個頁面的活元組進行碎片整理。

 刪除指向死元組的索引元組。

2、冷凍老的Txid

 必要時凍結老元組的Txid 更新凍結的與系統目錄(pg_database和pg_class)相關的txid

 如有可能,移除clog中不必要的部分

3、其他

 更新已處理表的FSM和VM。

 更新幾個統計數據(pg_stat_all_tables等)

 

VACUUM處理流程

· VACUUM 處理流程

(1) 從指定的表中獲取每個表。

(2) 獲取表的ShareUpdateExclusiveLock鎖。此鎖允許讀取其他事務。

(3) 掃描所有頁面以獲取所有死元組,必要時凍結舊元組。

(4) 如果存在,則移除指向相應死元組的索引元組。

(5) 對表的每一頁執行以下步驟(6)和(7)。

(6) 移除死元組并重新分配頁面中的活元組。

(7) 更新目標表的相應FSM和VM。

(8) 如果最后一頁沒有元組,則截斷最后一頁u003c/p>

(9) 更新與目標表的真空處理相關的統計信息和系統目錄。

(10) 更新與真空處理相關的統計數據和系統目錄。

(11) 如果可能的話,刪除不必要的文件和clog的頁面

· 第一步

執行凍結處理并刪除指向死元組的索引元組

1、掃描目標表,創建死元組列表

2、通過死元組列表刪除索引元組,即“清理階段”

3、如此循環,直到清完為止

· 清理操作流程

· 第二步

更新與每個目標表的真空處理相關的統計信息和系統目錄。

此外,如果最后一頁沒有元組,則從表文件中將其截斷。

如果可能的話,它會刪除不必要的clog部分

 

可見性地圖

· 提高vacuum的效率

可見性地圖用來記錄含有被刪除行的數據塊id,以提供給vacuum參考。

 

凍結處理

· 凍結處理流程

凍結處理有兩種模式:

lazy mode(惰性模式)

eager mode(急切模式)

 

刪除不需要的clog文件

· 刪除clog文件

 

Autovacuum Daemon

· Autovacuum 守護進程

默認每分鐘執行一次,由autovacuum_naptime參數定義。

默認調用三個worker進程進行工作,由autovacuum_max_workers參數定義。

 

Full VACUUM

· Full VACUUM

· Full VACUUM 處理流程

什么時候需要FULL VACUUM?

testdb=# CREATE EXTENSION pg_freespacemap;

CREATE EXTENSION

testdb=# SELECT count(*) as "number of pages",

pg_size_pretty(cast(avg(avail) as bigint)) as "Av. freespace size",

round(100 * avg(avail)/8192 ,2) as "Av. freespace ratio"

FROM pg_freespace('accounts');

number of pages | Av. freespace size | Av. freespace ratio

-----------------+--------------------+---------------------

1640 | 99 bytes | 1.21


FULL VACUUM示例(一)

testdb=# DELETE FROM accounts WHERE aid %10 != 0 OR aid < 100;

DELETE 90009

testdb=# VACUUM accounts;

VACUUM

testdb=# SELECT count(*) as "number of pages",

pg_size_pretty(cast(avg(avail) as bigint)) as "Av. freespace size",

round(100 * avg(avail)/8192 ,2) as "Av. freespace ratio"

FROM pg_freespace('accounts');

number of pages | Av. freespace size | Av. freespace ratio

-----------------+--------------------+---------------------

1640 | 7124 bytes | 86.97

(1 row)


FULL VACUUM示例(二)

testdb=# SELECT *, round(100 * avail/8192 ,2) as "freespace ratio"

FROM pg_freespace('accounts');

blkno | avail | freespace ratio

-------+-------+-----------------

0 | 7904 | 96.00

1 | 7520 | 91.00

2 | 7136 | 87.00

3 | 7136 | 87.00

4 | 7136 | 87.00

5 | 7136 | 87.00


FULL VACUUM示例(三)

testdb=# VACUUM FULL accounts;

VACUUM

testdb=# SELECT count(*) as "number of blocks",

pg_size_pretty(cast(avg(avail) as bigint)) as "Av. freespace size",

round(100 * avg(avail)/8192 ,2) as "Av. freespace ratio"

FROM pg_freespace('accounts');

number of pages | Av. freespace size | Av. freespace ratio

-----------------+--------------------+---------------------

164 | 0 bytes | 0.00

(1 row)


以上就是Part 17 - Vacuum空間管理工具 的內容,歡迎進群一起探討交流QQ交流群:752027153微信交流群:聯系客服拉你進微信PG交流群釘釘交流群:35822460,釘釘群專門有視頻講解

071考試
大數據課程
WDP
oracle機構
oracle認證
oracle課程
oracle視頻
CUUG就業實戰培訓
CUUG與ORACLE公司建立最核心、最權威、最深層次的戰略合作伙伴關系;
CUUG是唯一一家只做DBA就業培訓和oracle認證的授權機構,28年培養數萬名oracle技術人才;
CUUG金牌講師授課,來自一線的資深ORACLE OCM技術專家團隊;
CUUG頂尖完善的學習體系,以甲骨文原廠ORACLE數據庫核心技術為教學課程;

報名入口 點擊進入

課程咨詢:400-0909-964

考試咨詢:400-0909-964

QQ:點擊獲取

E-mail:yuezt@cuug.com