Thread: Unsupported effective_io_concurrency platforms
If a platform doesn't have posix_fadvise(), we don't allow effective_io_concurrency to be set to anything but zero: test=> set effective_io_concurrency = 1;ERROR: 1 is outside the valid range for parameter "effective_io_concurrency" (0.. 0)test=> set effective_io_concurrency = 0;SET Do we want to give a more informative error message, like "not supported on this platform?" -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
On Mon, 2009-03-23 at 16:21 -0400, Bruce Momjian wrote: > If a platform doesn't have posix_fadvise(), we don't allow > effective_io_concurrency to be set to anything but zero: > > test=> set effective_io_concurrency = 1; > ERROR: 1 is outside the valid range for parameter "effective_io_concurrency" (0 .. 0) > test=> set effective_io_concurrency = 0; > SET > > Do we want to give a more informative error message, like "not supported > on this platform?" I would say so. Joshua D. Drake > > -- > Bruce Momjian <bruce@momjian.us> http://momjian.us > EnterpriseDB http://enterprisedb.com > > + If your life is a hard drive, Christ can be your backup. + > -- PostgreSQL - XMPP: jdrake@jabber.postgresql.org Consulting, Development, Support, Training 503-667-4564 - http://www.commandprompt.com/ The PostgreSQL Company, serving since 1997
Joshua D. Drake wrote: > On Mon, 2009-03-23 at 16:21 -0400, Bruce Momjian wrote: >> If a platform doesn't have posix_fadvise(), we don't allow >> effective_io_concurrency to be set to anything but zero: >> >> test=> set effective_io_concurrency = 1; >> ERROR: 1 is outside the valid range for parameter "effective_io_concurrency" (0 .. 0) >> test=> set effective_io_concurrency = 0; >> SET >> >> Do we want to give a more informative error message, like "not supported >> on this platform?" > > I would say so. The trick will be to fit this into the GUC framework.
Peter Eisentraut <peter_e@gmx.net> writes: > Joshua D. Drake wrote: > Do we want to give a more informative error message, like "not supported > on this platform?" > The trick will be to fit this into the GUC framework. You could do it by enforcing the limit in an assign hook, but I'm not convinced it's worth the trouble. regards, tom lane
Tom Lane wrote: > Peter Eisentraut <peter_e@gmx.net> writes: > > Joshua D. Drake wrote: > > Do we want to give a more informative error message, like "not supported > > on this platform?" > > > The trick will be to fit this into the GUC framework. > > You could do it by enforcing the limit in an assign hook, but I'm > not convinced it's worth the trouble. I have created a patch to at least display a more helpful message, without being specific: test=> set effective_io_concurrency = 1; ERROR: parameter "effective_io_concurrency" cannot be changed from 0 -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + If your life is a hard drive, Christ can be your backup. + Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.497 diff -c -c -r1.497 guc.c *** src/backend/utils/misc/guc.c 9 Mar 2009 14:34:34 -0000 1.497 --- src/backend/utils/misc/guc.c 28 Mar 2009 23:40:52 -0000 *************** *** 4738,4747 **** } if (newval < conf->min || newval > conf->max) { ! ereport(elevel, ! (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ! errmsg("%d is outside the valid range for parameter \"%s\" (%d .. %d)", ! newval, name, conf->min, conf->max))); return false; } } --- 4738,4753 ---- } if (newval < conf->min || newval > conf->max) { ! if (conf->min == conf->max) ! ereport(elevel, ! (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ! errmsg("parameter \"%s\" cannot be changed from %d", ! name, conf->min))); ! else ! ereport(elevel, ! (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ! errmsg("%d is outside the valid range for parameter \"%s\" (%d .. %d)", ! newval, name, conf->min, conf->max))); return false; } } *************** *** 4810,4819 **** } if (newval < conf->min || newval > conf->max) { ! ereport(elevel, ! (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ! errmsg("%g is outside the valid range for parameter \"%s\" (%g .. %g)", ! newval, name, conf->min, conf->max))); return false; } } --- 4816,4831 ---- } if (newval < conf->min || newval > conf->max) { ! if (conf->min == conf->max) ! ereport(elevel, ! (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ! errmsg("parameter \"%s\" cannot be changed from %g", ! name, conf->min))); ! else ! ereport(elevel, ! (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ! errmsg("%g is outside the valid range for parameter \"%s\" (%g .. %g)", ! newval, name, conf->min, conf->max))); return false; } }
Bruce Momjian wrote: > Tom Lane wrote: > > Peter Eisentraut <peter_e@gmx.net> writes: > > > Joshua D. Drake wrote: > > > Do we want to give a more informative error message, like "not supported > > > on this platform?" > > > > > The trick will be to fit this into the GUC framework. > > > > You could do it by enforcing the limit in an assign hook, but I'm > > not convinced it's worth the trouble. > > I have created a patch to at least display a more helpful message, > without being specific: > > test=> set effective_io_concurrency = 1; > ERROR: parameter "effective_io_concurrency" cannot be changed from 0 I fixed this an easier way, by making the parameter PGC_INTERNAL on systems that don't have posix_fadvise(). -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + If your life is a hard drive, Christ can be your backup. + Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.497 diff -c -c -r1.497 guc.c *** src/backend/utils/misc/guc.c 9 Mar 2009 14:34:34 -0000 1.497 --- src/backend/utils/misc/guc.c 2 Apr 2009 19:52:49 -0000 *************** *** 1713,1719 **** }, { ! {"effective_io_concurrency", PGC_USERSET, RESOURCES, gettext_noop("Number of simultaneous requests that can be handled efficiently by the disk subsystem."), gettext_noop("For RAID arrays, this should be approximately the number of drive spindles in the array.") }, --- 1713,1725 ---- }, { ! {"effective_io_concurrency", ! #ifdef USE_PREFETCH ! PGC_USERSET, ! #else ! PGC_INTERNAL, ! #endif ! RESOURCES, gettext_noop("Number of simultaneous requests that can be handled efficiently by the disk subsystem."), gettext_noop("For RAID arrays, this should be approximately the number of drive spindles in the array.") },