Re: fdatasync performance problem with large number of DB files
David Steele <david@pgmasters.net>
From: David Steele <david@pgmasters.net>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Fujii Masao <masao.fujii@oss.nttdata.com>,
Bruce Momjian <bruce@momjian.us>, Paul Guo <guopa@vmware.com>,
Tom Lane <tgl@sss.pgh.pa.us>, Michael Brown <michael.brown@discourse.org>,
pgsql-hackers <pgsql-hackers@postgresql.org>,
Justin Pryzby <pryzby@telsasoft.com>
Date: 2021-03-20T00:30:54Z
Lists: pgsql-hackers
On 3/19/21 7:16 PM, Thomas Munro wrote: > Thanks Justin and David. Replies to two emails inline: > > Fair point. Here's what I went with: > > When set to <literal>fsync</literal>, which is the default, > <productname>PostgreSQL</productname> will recursively open and > synchronize all files in the data directory before crash > recovery > begins. The search for files will follow symbolic links for the WAL > directory and each configured tablespace (but not any other symbolic > links). > +1 > I thought about adding some text along the lines that such symlinks > are not expected, but I think you're right that what we really need is > a good place to point to. I mean, generally you can't mess around > with the files managed by PostgreSQL and expect everything to keep > working correctly WRT to symlinks I'm not sure that's fair to say. From PG's perspective it's just a dir/file after all. Other than pg_wal I have seen pg_stat/pg_stat_tmp sometimes symlinked, plus config files, and the log dir. pgBackRest takes a pretty liberal approach here. Were preserve all dir/file symlinks no matter where they appear and allow all of them to be remapped on restore. > but it wouldn't hurt to make an explicit statement > about symlinks and where they're allowed (or maybe there is one > already and I failed to find it). I couldn't find it either and I would be in favor of it. For instance, pgBackRest forbids tablespaces inside PGDATA and when people complain (more often then you might imagine) we can just point to the code/docs. > There are hints though, like > pg_basebackup's documentation which tells you it won't follow or > preserve them in general, but... hmm, it also contemplates various > special subdirectories (pg_dynshmem, pg_notify, pg_replslot, ...) that > might be symlinks without saying why. Right, pg_dynshmem is another one that I've seen symlinked. Some things are nice to have on fast storage. pg_notify and pg_replslot are similar since they get written to a lot in certain configurations. >> It worries me that this needs to be explicitly "turned off" after the >> initial recovery. Seems like something of a foot gun. >> >> Since we have not offered this functionality before I'm not sure we >> should rush to introduce it now. For backup solutions that do their own >> syncing, syncfs() should provide excellent performance so long as the >> file system is not shared, which is something the user can control (and >> is noted in the docs). > > Thanks. I'm leaving the 0002 patch "on ice" until someone can explain > how you're supposed to use it without putting a hole in your foot. +1 > (One silly thing I noticed is that our comments generally think > "filesystem" is one word, but our documentation always has a space; > this patch followed the local convention in both cases!) Personally I prefer "file system". Regards, -- -David david@pgmasters.net
Commits
-
Change recovery_init_sync_method to PGC_SIGHUP.
- 34a8b64b4e5f 14.0 landed
-
Provide recovery_init_sync_method=syncfs.
- 61752afb2640 14.0 landed