On Tue, Apr 2, 2024 at 8:32 PM Thomas Munro <thomas.mu...@gmail.com> wrote: > > Here are the remaining patches discussed in this thread. They give > tablespace-specific io_combine_limit, effective_io_readahead_window > (is this useful?), and up-to-1MB io_combine_limit (is this useful?). > I think the first two would probably require teaching reloption.c how > to use guc.c's parse_int() and unit flags, but I won't have time to > look at that for this release so I'll just leave these here. > > On the subject of guc.c, this is a terrible error message... did I do > something wrong? > > postgres=# set io_combine_limit = '42MB'; > ERROR: 5376 8kB is outside the valid range for parameter > "io_combine_limit" (1 .. 32)
Well, GUC_UNIT_BLOCKS interpolates the block limit into the error message string (get_config_unit_name()). But, I can't imagine this error message is clear for any of the GUCs using GUC_UNIT_BLOCKS. I would think some combination of the two would be helpful, like "43008 kB (5376 blocks) is outside of the valid range for parameter". The user can check what their block size is. I don't think we need to interpolate and print the block size in the error message. On another note, since io_combine_limit, when specified in size, rounds up to the nearest multiple of blocksize, it might be worth mentioning this in the io_combine_limit docs at some point. I checked docs for another GUC_UNIT_BLOCKS guc, backend_flush_after, and it alludes to this. - Melanie