PostgreSQL vacuum原理—啟動機制
在”PostgreSQL vacuum原理一功能與引數中我在致講了vacuum的幾大功能點,以及相關的一些引數,如何來調整vacuum。那麼這一章節主要講比較核心的一些東西。
1.PG發起vacuum的流程
在PG例項起動時,postmaster 程式會fork出autovacuum launcher程式。
完整的vacuum程式建立如下:
pg_ctl命令列起動PG例項,然後fork出postmaster Server程式,這也是PG的主程式。postmaster程式再負責fork各種其它後臺程式。
按以下順序,依次起動:logger程式,checkpoint程式,writer程式,wal writer程式,autovacuum launcher程式以及stats collector程式。
autovacuum launcher程式再負責fork autovacuum worker程式。我們具體的vacuum動作最後都交由worker程式來做,幹雜活。
預設情況下,最多由三個worker程式,由引數autovacuum_max_workers控制。
2. autovacuum launcher程式
autovacuum launcher是vacuum worker的總排程者。在起vacuum worker時,會先balance一次vacuum_cost_limit值,balance的過程就是新的worker起來時,
賦予此worker後面因vacuum而消耗的最大允許IO limit。因為vacuum_cost_limit值是所有worker平攤的,我們設定的vacuum_cost_limit是所有worker的總累加值。
因此新的work加入進來後,需要做兩件事:一是計算新的work的cost_limit值;二是調整已經在running的worker的cost_limit值。
另外值得注意的是:從目前原始碼中得知,vacuum_cost_limit的值是要被vacuum_cost_delay時間平分掉的。假設cost_limit的值是200,cost_delay是10毫秒,max worker是3個,
並且都在running狀態。那麼可以計算出,其實每個worker每個毫秒所能允許消耗的IO值是:200/10/3,約為6.6。
另外autovacuum launcher還要重建db list,根據autovacuum_naptime去計算每個db分配到的時間。引數介紹請見:”PostgreSQL vacuum原理一功能與引數”另外,
值得注意的是,雖然可以幾個worker一起執行,但是目前的做法是,在db 級別並行。也就是說worker是根據autovacuum launcher重建的db list去逐一遍歷每個DB的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30088583/viewspace-1601849/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL vacuum原理—vacuum揭秘SQL
- PostgreSQL vacuum原理一功能與引數SQL
- PostgreSQL vacuum 核心原始碼機理SQL原始碼
- PostgreSQL的vacuum流程SQL
- 【Postgresql】VACUUM 垃圾回收SQL
- PostgreSQL vacuum可見性SQL
- PostgreSQL Cost Based Vacuum探秘SQL
- postgresql隨機啟動設定SQL隨機
- PostgreSQL VFD機制SQL
- 新特性:postgresql的vacuum漫談SQL
- PostgreSQL VACUUM 之深入淺出 (一)SQL
- PostgreSQL VACUUM 之深入淺出 (二)SQL
- PostgreSQL VACUUM 之深入淺出 (三)SQL
- PostgreSQL DBA(142) - PG 12(Monitoring PostgreSQL VACUUM processes)SQL
- Tomcat 7 啟動分析(五)Lifecycle 機制和實現原理Tomcat
- PostgreSQL DBA(92) - PG 12 Improving VACUUMSQL
- PostgreSQL外掛hook機制SQLHook
- PostgreSQL DBA(143) - pgAdmin(Monitoring PostgreSQL VACUUM processes#2)SQL
- postgreSQL 12-2 vacuum-主流程SQL
- Handler機制原理
- PostgreSQL 並行vacuum patch - 暨為什麼需要並行vacuum或分割槽表SQL並行
- PostgreSQL MVCC快照機制淺析SQLMVC
- CentOS如何啟動PostgreSQLCentOSSQL
- PostgreSQL:啟動與停止SQL
- 從mixin機制理解Flutter App啟動FlutterAPP
- PostgreSQL 原始碼解讀(127)- MVCC#11(vacuum過程-vacuum_rel函式)SQL原始碼MVCC#函式
- Zookeeper watch機制原理
- handler機制的原理
- PostgreSQL 原始碼解讀(131)- MVCC#15(vacuum過程-lazy_vacuum_heap函式)SQL原始碼MVCC#函式
- PostgreSQL 原始碼解讀(132)- MVCC#16(vacuum過程-lazy_vacuum_index函式#1)SQL原始碼MVCC#Index函式
- Postgresql關於Vacuum的作用和操作方法,Vacuum full鎖表並生成新的relfilenodeSQL
- PostgreSQL 原始碼解讀(128)- MVCC#12(vacuum過程-heap_vacuum_rel函式)SQL原始碼MVCC#函式
- PostgreSQL 原始碼解讀(133)- MVCC#17(vacuum過程-lazy_vacuum_index函式#2)SQL原始碼MVCC#Index函式
- 【Qt】connect機制原理QT
- 深入淺出VACUUM核心原理(中): index by passIndex
- PostgreSQL 原始碼解讀(129)- MVCC#13(vacuum過程-vacuum_set_xid_limits函式)SQL原始碼MVCC#MIT函式
- 怎麼啟動postgresql服務SQL
- Windows 安裝包啟動PostgresqlWindowsSQL