中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

postgresql中autovacuum有什么用

發布時間:2021-11-26 09:12:23 來源:億速云 閱讀:206 作者:小新 欄目:大數據

小編給大家分享一下postgresql中autovacuum有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

懂得postgresql  數據庫原理的都知道 vacuum 的重要性,而相關線程中,autovacuum 是重要的,或者說最重要也是當之無愧。

postgresql中autovacuum有什么用

Autovacuum 作為postgresql 的一個進程一致在工作。

那么這個autovacuum 在除了進行和他名字一樣的工作之外,他還負責要收集更多關于dead tuple 和膨脹的信息,要對更新表統計信息的表進行分析,以便優化器能夠為SQL語句選擇最佳執行計劃。

在PG中還有另外一進程 stats collector ,用于跟蹤使用情況和活動信息。這些信息會被autovacuum來進行利用。來更好的進行相關的清理工作。

postgresql中autovacuum有什么用

這兩個功能在 postgresql.conf 中的開關就是

postgresql中autovacuum有什么用

postgresql中autovacuum有什么用

同時在系統進行vacuum的同時,作為DBA 是希望能進行分析的所以日志中能進行記錄那是最好的。所以log_autoovacuum_min_duration 可以記錄指定時間超過250毫秒的vacuum 就會被記錄。

postgresql中autovacuum有什么用

那在重啟后,我們能看到的日志中的記錄就是下面這個樣子。所以Postgresql在日志方面的記錄是很全面的,這相對于某些數據庫(SQL SERVER 和 MYSQL)要好的太多了。

postgresql中autovacuum有什么用

所以給POSTGRESQL 日志配一個好的快速的空間在大型頻繁的系統是有必要的。

下面接著的問題是,到底什么樣的表會被進行autovacuum,或者是備選對象。

實際死的tuple >= autovacuum_vacuum_scale_factor * number of tuples + autovacuum_vacuum_threshold

上面的公式就是表在插入,更新,刪除后會被選入到autovacuum中的方法。下面的參數們就是觸發分析或進行autovacuum的選擇項

postgresql中autovacuum有什么用

例如上面的操作 例如一個表中的行數是1000行(1000*0.2)+50 = 250行,當這個表現在的死行超過250行,就要觸發vacuum了。所以調整這個參數是很重要的,另外如果有大表的情況下,你會發現你清理dead T 的速度是越來越慢,那就的對有些大表進行自定義。

怎么定義?首先先確認經常有處理不完的dead tuple 是那些表,

postgresql中autovacuum有什么用

SELECT n_tup_ins as "inserts",n_tup_upd as "updates",n_tup_del as "deletes", n_live_tup as "live_tuples", n_dead_tup as "dead_tuples"

FROM pg_stat_user_tables

通過手動的方式,可以調整這兩個參數來達到針對這個表進行更頻繁或者更不頻繁的vacuum的方法。

postgresql中autovacuum有什么用

在講完這些后,還有一個問題,就是清理表的vacuum 的線程有沒有數量的限制。autovacuum_max_workers 就是控制工作線程的數量的參數,如果你有四個數據庫,則另一個數據庫就要等待,到下一個周期才能輪上這個數據庫的表進行操作。所以可以適當的調整一下這個參數,如果你一個cluster中的數據庫比較多的情況下。

postgresql中autovacuum有什么用

說到這里,目前還有一個問題需要考慮,就是業務繁忙時期到底要不要進行AUTOVACUUM, 是不是會在業務繁忙的時候,雪上加霜,對于性能更不利。

自動真空從磁盤讀取一個表的8KB(默認的block_size)頁,并修改/寫入包含死元組的頁。這涉及讀和寫IO。因此,這可能是一個IO密集型操作,在事務高峰期間,在一個包含許多死元組的巨大表上運行一個自動真空,是否是一件好事,所以為了避免這樣的情況,可以在參數中進行配置。

vacuum_cost_page_hit 是你在緩沖中能讀取頁面的cost 

vacuum_cost_page_miss 是不在緩沖中讀取的頁面的cost

vacuum_cost_page_dirty 是在頁面中發現dead T 后進行重寫的成本

postgresql中autovacuum有什么用

假如 vacuum_cost_delay = 20   的情況下,一秒是1000毫秒,則會發生50次的vacuum,在默認的情況下 根據時間的定義   

下面有一個公式

200 * 50 * 8 = 在buffer 中可以處理的dead T數據量

200/10*50 *8= 在磁盤中可以處理的dead T 的數據量

200/20*50*8  = 在一個周期可以處理的dead T 并改寫的數量

這三個數量是成遞減的分布的,所以調高autovacuum_max_workers,成本被平均分配給實例中運行的所有autovacuum進程的autovacuum數量。因此,增加autovacuum um_max_workers可能會延遲當前運行的autovacuum workers的自動真空執行。增加autovacuum um_vacuum um_cost_limit可能會導致IO瓶頸。

當然這些參數也是可以針對表進行特殊設置的。所以到此autovacuum 的調整絕對屬于一個高智商的數學和判斷題。

看完了這篇文章,相信你對“postgresql中autovacuum有什么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

攀枝花市| 腾冲县| 望都县| 车险| 镇原县| 德江县| 小金县| 潍坊市| 星子县| 图片| 罗定市| 滕州市| 台东市| 耒阳市| 探索| 从化市| 宁南县| 民勤县| 新安县| 津市市| 永善县| 渭南市| 洛扎县| 疏附县| 通辽市| 太仆寺旗| 华容县| 潍坊市| 绍兴市| 平阴县| 仪征市| 怀安县| 刚察县| 正安县| 休宁县| 河津市| 龙门县| 通道| 平塘县| 南通市| 拜城县|