這篇文章主要介紹“PostgreSQL中checkpoint_completion_target參數(shù)對checkpoint調(diào)度的影響是什么”,在日常操作中,相信很多人在PostgreSQL中checkpoint_completion_target參數(shù)對checkpoint調(diào)度的影響是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PostgreSQL中checkpoint_completion_target參數(shù)對checkpoint調(diào)度的影響是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項目策劃、軟件開發(fā),軟件安全維護、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務(wù),主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,重慶APP軟件開發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。創(chuàng)新互聯(lián)深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
PostgreSQL對checkpoint過程的調(diào)度,與數(shù)據(jù)庫在運行過程中產(chǎn)生日志的大小和時間兩個維度相關(guān).
日志
PostgreSQL源碼中CalculateCheckpointSegments和IsCheckpointOnSchedule函數(shù)給出了checkpoint_completion_target參數(shù)對checkpoint調(diào)度的影響,在給出計算公式前,先行定義幾個變量:
checkpoint進度progress:
progress=(num_processed / num_to_scan)
其中:
1.num_processed已處理的臟塊數(shù)
2.num_to_scan總共需要處理的塊數(shù)
checkpoint啟動后產(chǎn)生的日志相對允許最大日志量的比例:
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啟動后產(chǎn)生的日志量(以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
現(xiàn)就此臨界點對該公式進行變換,讓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進程休眠的機會越多.
時間
設(shè)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可休眠的機會越大.
到此,關(guān)于“PostgreSQL中checkpoint_completion_target參數(shù)對checkpoint調(diào)度的影響是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)頁標(biāo)題:PostgreSQL中checkpoint_completion_target參數(shù)對checkpoint調(diào)度的影響是什么
分享路徑:http://weahome.cn/article/ieohdg.html