Postgresql
PostgreSQL 檢查點日誌解釋
我知道 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
- 我知道 22.9% 的共享緩衝區被寫入(我有 1024 MB
shared_buffers
,這意味著 234 MB 被寫出)。- 我知道有 47 個 WAL 文件被回收,即不再需要它們來進行崩潰恢復,因為來自它們的真實數據已經在磁碟上。
問題A。但是
write=148.465 s
和sync=34.339
呢?有什麼區別?什麼是write
,為什麼它的時間遠遠超過fsync()
操作?問題B。是什麼
sync files
?哪些文件:WAL 文件?為什麼sync files
是159個,而回收的文件卻只有47個?這些之間有什麼關係?謝謝!
對於您的問題A:“寫”和“同步”的意思正是他們所說的;它是從 Postgres 緩衝池中對臟頁進行緩衝(如在文件系統 I/O 緩衝區中)寫入的序列,然後
fsync()
(通常)確保文件系統緩衝區實際上已寫入磁碟。寫入受到限制並在後台發生,因此它們可能需要更長的時間。對於您的問題 B:
sync files
告訴您檢查點影響了多少作業系統文件。由於每個表和索引都儲存在自己的文件中,因此該數字可以讓您了解檢查點影響了多少數據庫對象。WAL 在刷新 WAL 緩衝區時同步,即在檢查點之前;這就是為什麼它被稱為“提前寫”。