簡體   English   中英

性能:在從UNLOGGED轉換為LOGGED之前或之后創建索引?

[英]Performance: Create indices after or before converting from UNLOGGED to LOGGED?

我正在開發一種軟​​件,該軟件最初會用大量數據填充表(批量模式),然后切換為“正常”操作模式。

為了使批量模式更快,我從幾乎沒有索引的UNLOGGED表開始(還有其他事情)。

加載所有初始數據后,我切換到普通模式:創建索引並更改要再次記錄的表。

我的問題是:性能明智-創建索引和更改為LOGGED表的順序是否有所不同? 從可靠性的角度來看,我切換到LOGGED的速度似乎越快(丟失我所有寶貴數據的機會越小)。 但是,我是否必須及時支付創建所有索引所需的時間?

在我的初始測試中, ALTER TABLE x SET LOGGED似乎花費了很多時間,我不明白,因為我認為它只影響之后的操作,而它本身幾乎是沒有操作的。

我的PG是:

x86_64-pc-linux-gnu上的PostgreSQL 9.6.11,由gcc(GCC)7.3.0編譯,64位

雖然我的要求比較籠統。 任何可以幫助我了解UNLOGGEDLOGGED (尤其是與UNLOGGED結合使用)的情況的鏈接都將受到贊賞。

如果將數據加載到未記錄的表中,然后將其更改為已記錄的表,則無論您在何時創建索引,都不會獲得預期的收益。

未記錄表的好處是不會寫入WAL(事務日志)。 但是,當您將未登錄的表轉換為已登錄的表時,將寫入整個表的 WAL 及其索引 這是必要的,因為現在PostgreSQL必須能夠在發生崩潰的情況下恢復該表。

您的收獲是WAL將以塊方式而不是逐行寫入。

如果必須在加載表和將表轉換為已記錄表之間進行修改,則未記錄表將成為一大優勢。 所有這些修改都不必進行WAL記錄。

暫無
暫無

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

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