2016-12-14 36 views
1

哪個進程在PostgreSQL中寫入數據文件?PostgreSQL-數據文件

什麼是PostgreSQL中的數據文件?

注意:在postgreSQL-9.5上執行插入/更新/刪除操作。我想驗證哪個進程在磁盤即數據文件上執行提交。使用WAL和數據文件。

+1

http://www.cybertec.at/2016/11/postgresql-writer-and-wal-writer-processes-explained/和https://en.wikibooks.org/wiki/PostgreSQL/Architecture –

+0

目前,我通過jmeter.checkpoint_completion_target = 0.3,checkpoint_timeout = 30s發起大量查詢,在每個查詢之間保持30秒的延遲,以便可以檢查數據文件上的數據刷新。 –

+0

對於具體提交,執行提交的後端是寫入標記爲提交的事務的WAL記錄,然後更新'PGPROC'以設置共享內存狀態。但是該事務完成的其他部分工作可以由bgwriter編寫,稍後可以通過檢查指針將更改應用於堆等。 –

回答

2

PostgreSQL數據庫集羣的數據文件位於數據目錄的data子目錄下。他們寫了三個過程:

  • 背景作家過程寫入髒塊從緩衝區回磁盤,以確保有足夠的清潔塊。

  • checkpointer過程寫入所有髒數據塊在特定的時間磁盤(檢查點),以提供用於崩潰恢復的起點。

  • 後端進程(即服務客戶端連接的過程)只有在後臺寫入跟不上而沒有足夠的空閒塊可將數據寫入到磁盤中。

寫日誌或WAL,位於pg_xlog,是完全不同的東西。它由緊接在COMMIT之前的後端進程寫入,以確保將發生崩潰時恢復事務所需的信息安全地寫入磁盤。對於位於pg_clog中的提交日誌也是如此,其包含如果事務被提交或回滾的信息。

數據可能會在COMMIT之前寫入數據文件,但它們只在提交事務時纔可見。

這可能是值得一提的是,不僅DML語句導致被弄髒的數據塊:

  • 後臺進程「自動清理」定期掃描表和索引和刪除未使用的條目。

  • 第一進程讀取新寫入的數據將查找在提交日誌提交信息,並寫了暗示位的元組,使未來的讀者不必再這樣做的工作。

+0

是的。 TL; DR是「大多數PostgreSQL處理寫入數據目錄中的文件,每個表都是一個或多個文件,還有其他特殊文件,除了.conf文件之外,不要修改數據目錄中的任何內容」。 –

相關問題