簡體   English   中英

Postgres中使用的預寫日志(WAL)

[英]Write-ahead-logging (WAL) used in Postgres

我想使用Postgres上的Write-ahead-logging(WAL)做一些工作。 誰能指出我在Postgres代碼庫中的WAL實現? 我只想知道當前的實現並開始對其進行修改。 除非有WAL,否則任何版本的Postgres都可以。

提前致謝。

代碼的主要部分在這里:

src/backend/access/transam/xlog.c

和:

src/backend/access/transam/README

但是,當然需要執行WAL會滲透到整個代碼庫中。

您可能選擇了最困難的起點來弄濕自己的腳。 (我應該知道-這也是我的做法)。

WAL是預寫式日志記錄。 基本上,在數據庫實際執行操作之前,它將日志記錄在日志中。 然后,它去做。 這樣可以確保數據的一致性。 假設計算機突然斷電。 可能會發生以下幾點:1)在寫之前-在這種情況下,無論有無預寫日志記錄,數據庫都可以正常運行。

2)在寫入過程中-沒有提前寫入日志記錄,如果在寫入過程中關閉了計算機的電源,則數據庫將無法知道尚有待寫入的內容或正在寫入的內容。 與Postgres相比,這進一步細分為兩種可能性:

  • 關閉電源正在寫入日志時發生-在這種情況下,將回滾日志。 數據庫不會受到影響,因為從未將數據正確寫入數據庫。

  • 關閉電源是在寫入日志后寫入磁盤時發生的,在這種情況下,Postgres可以簡單地從日志中讀取應該寫入的內容,然后完成寫入操作。

3)寫完之后-無論有無WAL,這都不會影響Postgres。

另外,WAL可以提高PostgreSQL的效率,因為它可以延遲對磁盤的隨機訪問寫入,並且可以長時間對日志進行順序寫入。 這減少了磁盤正在執行的搜索請求的數量。 如果將WAL文件存儲在其他磁盤上,則可以獲得更多的速度優勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM