Postgresql

PostgreSQL 檢查點日誌解釋

  • September 10, 2017

我知道 PostgreSQL 檢查點是什麼以及它何時發生。

我需要一些關於參數產生的日誌的額外資訊log_checkpoints = on,所以請向我解釋一下它的一些要點:

2017-09-09 16:31:37 EEST [6428-6524] LOG: checkpoint complete: wrote 30057 buffers (22.9%); 0 transaction log file(s) added, 0 removed, 47 recycled; write=148.465 s, sync=34.339 s, total=182.814 s; sync files=159, longest=16.143 s, average=0.215 s

  1. 我知道 22.9% 的共享緩衝區被寫入(我有 1024 MB shared_buffers,這意味著 234 MB 被寫出)。
  2. 我知道有 47 個 WAL 文件被回收,即不再需要它們來進行崩潰恢復,因為來自它們的真實數據已經在磁碟上。

問題A。但是write=148.465 ssync=34.339呢?有什麼區別?什麼是write,為什麼它的時間遠遠超過fsync()操作?

問題B。是什麼sync files?哪些文件:WAL 文件?為什麼sync files是159個,而回收的文件卻只有47個?這些之間有什麼關係?

謝謝!

對於您的問題A:“寫”和“同步”的意思正是他們所說的;它是從 Postgres 緩衝池中對臟頁進行緩衝(如在文件系統 I/O 緩衝區中)寫入的序列,然後fsync()(通常)確保文件系統緩衝區實際上已寫入磁碟。寫入受到限制並在後台發生,因此它們可能需要更長的時間。

對於您的問題 B:sync files告訴您檢查點影響了多少作業系統文件。由於每個表和索引都儲存在自己的文件中,因此該數字可以讓您了解檢查點影響了多少數據庫對象。WAL 在刷新 WAL 緩衝區時同步,即在檢查點之前;這就是為什麼它被稱為“提前寫”。

引用自:https://dba.stackexchange.com/questions/185502