Re: Allowing WAL fsync to be done via O_SYNC
От | Bruce Momjian |
---|---|
Тема | Re: Allowing WAL fsync to be done via O_SYNC |
Дата | |
Msg-id | 200103152036.PAA16287@candle.pha.pa.us обсуждение исходный текст |
Ответ на | Re: Allowing WAL fsync to be done via O_SYNC (Bruce Momjian <pgman@candle.pha.pa.us>) |
Ответы |
Re: Allowing WAL fsync to be done via O_SYNC
|
Список | pgsql-hackers |
> > I've been mentally working through the code, and see only one reason why > > it might be necessary to go with a compile-time choice: suppose we see > > that none of O_DSYNC, O_SYNC, O_FSYNC, [others] are defined? With the > > compile-time choice it's easy: #define USE_FSYNC_FOR_WAL, and sail on. > > If it's a GUC variable then we need a way to prevent the GUC option from > > becoming unset (which would disable the fsync() calls, leaving nothing > > to replace 'em). Doable, perhaps, but seems kind of ugly ... any > > thoughts about that? > > I don't think having something a run-time option is always a good idea. > Giving people too many choices is often confusing. > > I think we should just check at compile time, and choose O_* if we have > it, and if not, use fsync(). No one will ever do the proper timing > tests to know which is better except us. Also, it seems O_* should be > faster because you are fsync'ing the buffer you just wrote, so there is > no looking around for dirty buffers like fsync(). I later read Vadim's comment that fsync() of two blocks may be faster than two O_* writes, so I am now confused about the proper solution. However, I think we need to pick one and make it invisible to the user. Perhaps a compiler/config.h flag for testing would be a good solution. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
В списке pgsql-hackers по дате отправления: