Can they use a database with all unlogged tables?

On Tue, Sep 29, 2020 at 1:58 PM tsunakawa.ta...@fujitsu.com
<tsunakawa.ta...@fujitsu.com> wrote:
>
> Hello,
>
>
> We'd like to propose a feature to disable WAL to speed up data loading.  This 
> was inspired by a feature added in the latest MySQL.  I wish you won't fear 
> this feature...
>
>
> BACKGROUND
> ========================================
>
> This branches off from [1] as mentioned therein.  Briefly speaking, a 
> customer wants to shorten the time for nightly loading of data into their 
> data warehouse as much as possible to be prepared for using the data 
> warehouse for new things.
>
> Currently, they are using Oracle's SQL*Loader with its no-logging feature.  
> They want a similar feature to migrate to Postgres.  Other than the data 
> loading performance, they don't want to be concerned about the storage for 
> large volumes of WAL.
>
> In [1], we thought about something like Oracle's per-table no-logging 
> feature, but it seems difficult (or at least not easy.)  Meanwhile, I found 
> another feature added in the latest MySQL 8.0.21 [2].  This proposal follows 
> it almost directly.  That satisfies the customer request.
>
> As an aside, it's also conceivable that in the near future, users could see 
> the WAL bottleneck (WAL buffer or disk) when they utilize the parallel COPY 
> that is being developed in the community.
>
>
> FUNCTIONAL SPECIFICATION
> ========================================
>
> Add a new value 'none' to the server configuration parameter wal_level.  With 
> this setting:
>
> * No WAL is emitted.
>
> * The server refuses to start (pg_ctl start fails) after an abnormal shutdown 
> due to power outage, pg_ctl's immediate shutdown, etc, showing a 
> straightforward message like MySQL.
>
> * Features like continuous archiving, pg_basebackup, and streaming/logical 
> replication that requires wal_level >= replica are not available.
>
> * The user can use all features again if you shut down the server 
> successfully after data loading and reset wal_level to a value other than 
> none.  He needs to take a base backup or rebuild the replication standby 
> after restarting the server.
>
>
> In addition to the cosmetic modifications to the manual articles that refer 
> to wal_level, add a clause or paragraphs to the following sections to let 
> users know the availability of this feature.
>
> 14.4. Populating a Database
> 18.6.1. Upgrading Data via pg_dumpall
>
>
> PROGRAM DESIGN (main point only)
> ========================================
>
> As in the bootstrap mode (during initdb), when wal_level = none, XLogInsert() 
> does nothing and just returns a fixed value, which is the tail of the last 
> shutdown checkpoint WAL record.  As a result, the value is set to the 
> relation page header's LSN field.
>
> In addition, it might be worth having XLogBeginInsert() and XLogRec...() to 
> check wal_level and just return.  I don't expect much from this, but it may 
> be interesting to give it a try to see the squeezed performance.
>
> StartupXLOG() checks the wal_level setting in pg_control and quits the 
> startup with ereport(FATAL) accordingly.
>
>
> [1]
> Implement UNLOGGED clause for COPY FROM
> https://www.postgresql.org/message-id/osbpr01mb488887c0bdc5129c65dfc5e5ed...@osbpr01mb4888.jpnprd01.prod.outlook.com
>
> [2]
> Disabling Redo Logging
> https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log.html#innodb-disable-redo-logging
>
>
> Regards
> Takayuki Tsunakawa
>
>
>


-- 
Best Wishes,
Ashutosh Bapat


Reply via email to