您好,登錄后才能下訂單哦!
這篇文章主要介紹“PostgreSQL中checkpoint_completion_target參數對checkpoint調度的影響是什么”,在日常操作中,相信很多人在PostgreSQL中checkpoint_completion_target參數對checkpoint調度的影響是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PostgreSQL中checkpoint_completion_target參數對checkpoint調度的影響是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
PostgreSQL對checkpoint過程的調度,與數據庫在運行過程中產生日志的大小和時間兩個維度相關.
日志
PostgreSQL源碼中CalculateCheckpointSegments和IsCheckpointOnSchedule函數給出了checkpoint_completion_target參數對checkpoint調度的影響,在給出計算公式前,先行定義幾個變量:
checkpoint進度progress:
progress=(num_processed / num_to_scan)
其中:
1.num_processed已處理的臟塊數
2.num_to_scan總共需要處理的塊數
checkpoint啟動后產生的日志相對允許最大日志量的比例:
elapsed_xlogs = elapsed_xlogsize/wal_segment_size/checkpoint_segments checkpoint_segments = max_wal_size_mb/wal_segment_size/(1.0 + checkpoint_completion_target)
其中:
1.elapsed_xlogsize是指在checkpoint啟動后產生的日志量(以MB為單位)
2.wal_segment_size默認為16MB
3.max_wal_size_mb是postgresql.conf配置文件中
在滿足以下條件時:
progress*checkpoint_completion_target ≥ elapsed_xlogs
在checkpointer進程會進行一定時間的休眠(100ms),以控制臟塊刷盤(包括fsync)的進度.
可以看出,上述條件的臨界點是:
progress*checkpoint_completion_target = elapsed_xlogs
現就此臨界點對該公式進行變換,讓checkpoint_completion_target放在等式的右邊:
(num_processed / num_to_scan)*checkpoint_completion_target = elapsed_xlogsize*(1.0 + checkpoint_completion_target)/max_wal_size_mb --> num_processed / num_to_scan = elapsed_xlogsize*(1.0/checkpoint_completion_target + 1)/max_wal_size_mb
由此可見,在其他變量一定的情況下,右邊算式的值與checkpoint_completion_target成反比,checkpoint_completion_target越大該值越小,意味著checkpointer進程休眠的機會越多.
時間
設elapsed_seconds=(now.tv_sec - ckpt_start_time + now.tv_usec / 1000000.0)表示過去消逝的時間
滿足以下條件,checkpointer進度可休眠:
(num_processed/num_to_scan)*checkpoint_completion_target ≥ elapsed_seconds / checkpoint_timeout --> num_processed/num_to_scan ≥ elapsed_seconds/(checkpoint_completion_target*checkpoint_timeout)
右邊表達式在其他變量一定的情況下,checkpoint_completion_target越大,則值越小,checkpointer可休眠的機會越大.
到此,關于“PostgreSQL中checkpoint_completion_target參數對checkpoint調度的影響是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。