我們知道,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 下面的資料夾...