Postgresql的vacuum機制一些理解

2021-10-13 03:41:17 字數 1394 閱讀 3280

我們知道,postgresql(以下簡稱pg)多版本控制mvcc和oracle有所不同,oracle通過回滾段實現,資料更新之前先將舊版本資料寫入回滾段,然後再將待更新資料寫入原data block,而pg mvcc則是當元組發生更改時,直接在原資料data page插入一條新的記錄,同時將原元組邏輯上標識為刪除,這些標識為刪除的元組也叫死元組。這就導致當進行多次更新和刪除操作,磁碟上會多出很多死元組,占用了很多磁碟空間並且導致系統效能下降。

vacuum的作用則是**這些這些無效的空間。

vacuum [

(option[,

...]

)][ table_and_columns [,.

..]]

vacuum [

full

][ freeze ]

[ verbose ]

[analyze

][ table_and_columns [,.

..]]

其中option可以是下列之一:

full

[boolean

] freeze [

boolean

] verbose [

boolean

]analyze

[boolean

] disable_page_skipping [

boolean

] skip_locked [

boolean

] index_cleanup [

boolean

]truncate

[boolean

]而table_and_columns是:

table_name [

( column_name [,.

..])

]

full vacuum:會加上排他鎖,這意味著full vacuum期間,讀寫操作會被阻塞起來。並在執行過程中會生成fraged_pages和vacuum_pages兩個鍊錶,fraged_pages是可填充元組的檔案塊,而vacuum_pages是待清理的死元組檔案塊。當掃完關係表後,通過fraged_pages對有效元組跨塊移動,通過vacuum_pages對死元組進行清理,並把清理後的磁碟空間歸還給作業系統。

lazy vacuum: 不會加上排他鎖,讀寫操作可並行,只是簡單死元組塊標識為未使用,這些檔案塊不會歸還給作業系統。

更新優化器的統計資訊。當一張表(特別是大表)短時間頻繁更新,優化器的統計資訊是不及時的,或者是不準確的。這樣會導致優化器執行查詢sql時選擇錯誤的執行計畫,導致sql查詢效能差。可功過analyze更新指定表(甚至指定列)的統計資訊。

1、

2、《postgresql資料庫核心分析》

PostgreSQL的除錯攻略

需要軟體 首先當然是 postgresql的源 這個可以去 www.postgresql.org 上面down,現在最新應該是8.1.3,我當前用的是8.1.1版本 另外編譯開發包當然不能少,這個根據各個linux不同版本來獲得 apt get或者rpm包 當然在絕大部分的系統上都已經預設安裝 還有...

PostgreSQL的日誌型別

剛開始學習postgres的時候,可能對postgresql中的日誌概念比較模糊,到底有多少種日誌,哪些日誌是能刪除的,各自又記錄什麼樣的功能。postgresql中有三種日誌,pg log,pg xlog和pg clog。一.安裝路徑 這三種資料庫後兩者一般的安裝路徑是 pgdata 下面的資料夾...

PostgreSQL的日誌型別

剛開始學習postgres的時候,可能對postgresql中的日誌概念比較模糊,到底有多少種日誌,哪些日誌是能刪除的,各自又記錄什麼樣的功能。postgresql中有三種日誌,pg log,pg xlog和pg clog。一.安裝路徑 這三種資料庫後兩者一般的安裝路徑是 pgdata 下面的資料夾...