PostgreSQL DBA(64) - checkpoint_completion_target引數解析
本文介紹了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可休眠的機會越大.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2652315/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL DBA(145) - pgAdmin(AUTOVACUUM:引數解析#3)SQL
- PostgreSQL DBA(144) - pgAdmin(AUTOVACUUM:引數解析#2)SQL
- PostgreSQL DBA(66) - 配置引數(checkpoint_flush_after)SQL
- PostgreSQL DBA(1) - 資料庫引數設定#1SQL資料庫
- PostgreSQL DBA(2) - 資料庫引數設定#2SQL資料庫
- Oracle引數檔案解析——引數解析Oracle
- PostgreSQL:引數簡介SQL
- PostgreSQL AutoVacuum 相關引數SQL
- PostgreSQL DBA(45) - Hypothetical Indexes in PostgreSQLSQLIndex
- Shell解析引數
- postgresql配置引數最佳化SQL
- PostgreSQL DBA(35) - CTESQL
- PostgreSQL DBA(42) - localeSQL
- CNN模型引數解析CNN模型
- js解析url引數JS
- canvas transform引數解析CanvasORM
- 解析型別引數型別
- ThreadPoolExecutor 引數解析thread
- ogg引數解析
- opatch命令引數解析
- JavaScript解析URL引數JavaScript
- Curl 命令引數解析
- PostgreSQL DBA(133) - Extension(postgresql_anonymizer)SQL
- 連線PostgreSQL時,如何指定引數SQL
- PostgreSQL vacuum原理一功能與引數SQL
- PostgreSQL DBA(59) - Index(Bloom)SQLIndexOOM
- PostgreSQL DBA(53) - Index(BRIN)SQLIndex
- PostgreSQL DBA(58) - DBLinkSQL
- PostgreSQL DBA(48) - Index(GiST)SQLIndex
- PostgreSQL DBA(51) - Index(GIN)SQLIndex
- PostgreSQL DBA(52) - Index(RUM)SQLIndex
- PostgreSQL DBA(47) - Index(Btree)SQLIndex
- PostgreSQL DBA(43) - Index(Hash)SQLIndex
- PostgreSQL DBA(191) - CollationSQL
- PostgreSQL DBA(182) - HOTSQL
- PostgreSQL DBA(185) - watchSQL
- PostgreSQL DBA(181) - Using PostgreSQL as a Data WarehouseSQL
- 使用 Python 解析引數Python