未验证 提交 750647bb 编写于 作者: W Weinan WANG 提交者: GitHub

GPDB GUC dispatching flag refactor


So far, we use to dispatch a guc when creating gang if its flag contains
GUC_GPDB_ADDOPT. It has some drawbacks.
1. This flag left a lots footprint in guc.c, when we diff upstream code.
2. It is easy to forget marking it when new guc introduce.

To deal with these issues, and also this PR is the first step of
[PR7184](https://github.com/greenplum-db/gpdb/pull/7184).

Rename GUC_GPDB_ADDOPT flag as GUC_GPDB_NEED_SYNC, as well as, declare a new
guc flag named GUC_GPDB_NO_SYNC. For the predefine guc in guc.c and guc_gp.c
must explicitly assign one of these two flags.
For custom guc, give a default flag, GUC_GPDB_NO_SYNC, if it does not
explicit set.

Instead of the direct set flag in guc.c, we define two array, sync_guc_names_array
and unsync_guc_names_array.To recode guc names into and automatically
assign flag when the guc object is built in Postgres. Hence, we can
reduce footprint when diffing with upstream guc.c

Idea from Heikki Linnakangas <hlinnakangas@pivotal.io>
Idea from Hubert Zhang <hzhang@pivotal.io>
上级 060f6414
......@@ -252,7 +252,7 @@ buildGangDefinition(List *segments, SegmentType segmentType)
static void
addOneOption(StringInfo string, struct config_generic *guc)
{
Assert(guc && (guc->flags & GUC_GPDB_ADDOPT));
Assert(guc && (guc->flags & GUC_GPDB_NEED_SYNC));
switch (guc->vartype)
{
case PGC_BOOL:
......@@ -349,7 +349,7 @@ makeOptions(void)
{
struct config_generic *guc = gucs[i];
if ((guc->flags & GUC_GPDB_ADDOPT) &&
if ((guc->flags & GUC_GPDB_NEED_SYNC) &&
(guc->context == PGC_USERSET ||
guc->context == PGC_BACKEND ||
IsAuthenticatedUserSuperUser()))
......
......@@ -293,3 +293,18 @@ worry about NULL values ever, the variable can be given a non-null static
initializer as well as a non-null boot_val. guc.c will overwrite the
static initializer pointer with a copy of the boot_val during
InitializeGUCOptions, but the variable will never contain a NULL.
GUC Synchronization
-------------------
Due to distributed character of gpdb, each GUC needs to declare whether
it needs to sync value between master and primaries. If you want to
introduce a new GUC in guc.c or guc_gp.c, the GUC's name must be populated
into either sync_guc_name.h or unsync_guc_name.h. If not, gpdb will raise an
ERROR in run-time.
For custom GUC, if it has synchronization requirement, add GUC_GPDB_NEED_SYNC
bit into the GUC flag. Otherwise, system will default add GUC_GPDB_NO_SYNC
flag bit for it as it can not synchronize in cluster.
A GUC ought to be synchronized only if the scope is whole cluster as well as
the value must be same between master and primaries.
......@@ -708,6 +708,10 @@ const char *const config_type_names[] =
*
* 7. If it's a new GUC_LIST_QUOTE option, you must add it to
* variable_is_guc_list_quote() in src/bin/pg_dump/dumputils.c.
*
* 8. In gpdb, the guc is force explicit declare whether it needs to sync value
* between master and primary. Add guc name into either sync_guc_names_array
* or unsync_guc_names_array.
*/
......@@ -994,8 +998,7 @@ static struct config_bool ConfigureNamesBool[] =
{
{"log_duration", PGC_SUSET, LOGGING_WHAT,
gettext_noop("Logs the duration of each completed SQL statement."),
NULL,
GUC_GPDB_ADDOPT
NULL
},
&log_duration,
false,
......@@ -1058,8 +1061,7 @@ static struct config_bool ConfigureNamesBool[] =
{
{"log_executor_stats", PGC_SUSET, STATS_MONITORING,
gettext_noop("Writes executor performance statistics to the server log."),
NULL,
GUC_GPDB_ADDOPT
NULL
},
&log_executor_stats,
false,
......@@ -1068,8 +1070,7 @@ static struct config_bool ConfigureNamesBool[] =
{
{"log_statement_stats", PGC_SUSET, STATS_MONITORING,
gettext_noop("Writes cumulative performance statistics to the server log."),
NULL,
GUC_GPDB_ADDOPT
NULL
},
&log_statement_stats,
false,
......@@ -1766,7 +1767,7 @@ static struct config_int ConfigureNamesInt[] =
{"temp_buffers", PGC_USERSET, RESOURCES_MEM,
gettext_noop("Sets the maximum number of temporary buffers used by each session."),
NULL,
GUC_UNIT_BLOCKS | GUC_GPDB_ADDOPT
GUC_UNIT_BLOCKS
},
&num_temp_buffers,
1024, 100, INT_MAX / 2,
......@@ -1818,7 +1819,7 @@ static struct config_int ConfigureNamesInt[] =
gettext_noop("This much memory can be used by each internal "
"sort operation and hash table before switching to "
"temporary disk files."),
GUC_UNIT_KB | GUC_GPDB_ADDOPT
GUC_UNIT_KB
},
&work_mem,
32768, 64, MAX_KILOBYTES,
......@@ -1829,7 +1830,7 @@ static struct config_int ConfigureNamesInt[] =
{"maintenance_work_mem", PGC_USERSET, RESOURCES_MEM,
gettext_noop("Sets the maximum memory to be used for maintenance operations."),
gettext_noop("This includes operations such as VACUUM and CREATE INDEX."),
GUC_UNIT_KB | GUC_GPDB_ADDOPT
GUC_UNIT_KB
},
&maintenance_work_mem,
65536, 1024, MAX_KILOBYTES,
......@@ -1986,7 +1987,7 @@ static struct config_int ConfigureNamesInt[] =
{"statement_timeout", PGC_USERSET, CLIENT_CONN_STATEMENT,
gettext_noop("Sets the maximum allowed duration of any statement."),
gettext_noop("A value of 0 turns off the timeout."),
GUC_UNIT_MS | GUC_GPDB_ADDOPT
GUC_UNIT_MS
},
&StatementTimeout,
0, 0, INT_MAX,
......@@ -2216,7 +2217,7 @@ static struct config_int ConfigureNamesInt[] =
gettext_noop("Sets the delay in microseconds between transaction commit and "
"flushing WAL to disk."),
NULL,
GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET
/* we have no microseconds designation, so can't supply units here */
},
&CommitDelay,
......@@ -2229,7 +2230,7 @@ static struct config_int ConfigureNamesInt[] =
gettext_noop("Sets the minimum concurrent open transactions before performing "
"commit_delay."),
NULL,
GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_DISALLOW_USER_SET
},
&CommitSiblings,
5, 0, 1000,
......@@ -2253,7 +2254,7 @@ static struct config_int ConfigureNamesInt[] =
gettext_noop("Sets the minimum execution time above which "
"statements will be logged."),
gettext_noop("Zero prints all queries. -1 turns this feature off."),
GUC_UNIT_MS | GUC_GPDB_ADDOPT
GUC_UNIT_MS
},
&log_min_duration_statement,
-1, -1, INT_MAX,
......@@ -2548,8 +2549,7 @@ static struct config_int ConfigureNamesInt[] =
{
{"gin_fuzzy_search_limit", PGC_USERSET, CLIENT_CONN_OTHER,
gettext_noop("Sets the maximum allowed result for exact search by GIN."),
NULL,
GUC_GPDB_ADDOPT
NULL
},
&GinFuzzySearchLimit,
0, 0, INT_MAX,
......@@ -2807,7 +2807,7 @@ static struct config_string ConfigureNamesString[] =
gettext_noop("Sets the display format for date and time values."),
gettext_noop("Also controls interpretation of ambiguous "
"date inputs."),
GUC_LIST_INPUT | GUC_REPORT | GUC_GPDB_ADDOPT
GUC_LIST_INPUT | GUC_REPORT
},
&datestyle_string,
"ISO, MDY",
......@@ -2818,7 +2818,7 @@ static struct config_string ConfigureNamesString[] =
{"default_tablespace", PGC_USERSET, CLIENT_CONN_STATEMENT,
gettext_noop("Sets the default tablespace to create tables and indexes in."),
gettext_noop("An empty string selects the database's default tablespace."),
GUC_IS_NAME | GUC_GPDB_ADDOPT
GUC_IS_NAME
},
&default_tablespace,
"",
......@@ -2829,7 +2829,7 @@ static struct config_string ConfigureNamesString[] =
{"temp_tablespaces", PGC_USERSET, CLIENT_CONN_STATEMENT,
gettext_noop("Sets the tablespace(s) to use for temporary tables and sort files."),
NULL,
GUC_LIST_INPUT | GUC_LIST_QUOTE | GUC_GPDB_ADDOPT
GUC_LIST_INPUT | GUC_LIST_QUOTE
},
&temp_tablespaces,
"",
......@@ -2918,9 +2918,7 @@ static struct config_string ConfigureNamesString[] =
{
{"lc_numeric", PGC_USERSET, CLIENT_CONN_LOCALE,
gettext_noop("Sets the locale for formatting numbers."),
NULL,
/* Please don't remove GUC_GPDB_ADDOPT or lc_numeric won't work correctly */
GUC_GPDB_ADDOPT
NULL
},
&locale_numeric,
"C",
......@@ -2974,7 +2972,7 @@ static struct config_string ConfigureNamesString[] =
{"search_path", PGC_USERSET, CLIENT_CONN_STATEMENT,
gettext_noop("Sets the schema search order for names that are not schema-qualified."),
NULL,
GUC_LIST_INPUT | GUC_LIST_QUOTE | GUC_GPDB_ADDOPT
GUC_LIST_INPUT | GUC_LIST_QUOTE
},
&namespace_search_path,
"\"$user\",public",
......@@ -3090,7 +3088,7 @@ static struct config_string ConfigureNamesString[] =
{"TimeZone", PGC_USERSET, CLIENT_CONN_LOCALE,
gettext_noop("Sets the time zone for displaying and interpreting time stamps."),
NULL,
GUC_REPORT | GUC_GPDB_ADDOPT
GUC_REPORT
},
&timezone_string,
"GMT",
......@@ -3370,8 +3368,7 @@ static struct config_enum ConfigureNamesEnum[] =
{"client_min_messages", PGC_USERSET, LOGGING_WHEN,
gettext_noop("Sets the message levels that are sent to the client."),
gettext_noop("Each level includes all the levels that follow it. The later"
" the level, the fewer messages are sent."),
GUC_GPDB_ADDOPT
" the level, the fewer messages are sent.")
},
&client_min_messages,
NOTICE, client_message_level_options,
......@@ -3426,7 +3423,7 @@ static struct config_enum ConfigureNamesEnum[] =
{"IntervalStyle", PGC_USERSET, CLIENT_CONN_LOCALE,
gettext_noop("Sets the display format for interval values."),
NULL,
GUC_REPORT | GUC_GPDB_ADDOPT
GUC_REPORT
},
&IntervalStyle,
INTSTYLE_POSTGRES, intervalstyle_options, NULL, NULL
......@@ -3435,8 +3432,7 @@ static struct config_enum ConfigureNamesEnum[] =
{
{"log_error_verbosity", PGC_SUSET, LOGGING_WHAT,
gettext_noop("Sets the verbosity of logged messages."),
NULL,
GUC_GPDB_ADDOPT
NULL
},
&Log_error_verbosity,
PGERROR_DEFAULT, log_error_verbosity_options,
......@@ -3447,8 +3443,7 @@ static struct config_enum ConfigureNamesEnum[] =
{"log_min_messages", PGC_SUSET, LOGGING_WHEN,
gettext_noop("Sets the message levels that are logged."),
gettext_noop("Each level includes all the levels that follow it. The later"
" the level, the fewer messages are sent."),
GUC_GPDB_ADDOPT
" the level, the fewer messages are sent.")
},
&log_min_messages,
WARNING, server_message_level_options,
......@@ -3459,8 +3454,7 @@ static struct config_enum ConfigureNamesEnum[] =
{"log_min_error_statement", PGC_SUSET, LOGGING_WHEN,
gettext_noop("Causes all statements generating error at or above this level to be logged."),
gettext_noop("Each level includes all the levels that follow it. The later"
" the level, the fewer messages are sent."),
GUC_GPDB_ADDOPT
" the level, the fewer messages are sent.")
},
&log_min_error_statement,
ERROR, server_message_level_options,
......@@ -3644,7 +3638,6 @@ static int GUCNestLevel = 0; /* 1 when in main transaction */
static int guc_var_compare(const void *a, const void *b);
static int guc_name_compare(const char *namea, const char *nameb);
static void InitializeGUCOptionsFromEnvironment(void);
static void InitializeOneGUCOption(struct config_generic * gconf);
static void push_old_value(struct config_generic * gconf, GucAction action);
......@@ -4130,6 +4123,7 @@ build_guc_variables(void)
guc_variables = guc_vars;
num_guc_variables = num_vars;
size_guc_variables = size_vars;
gpdb_assign_sync_flag(guc_variables, num_guc_variables, true /* predefine */);
qsort((void *) guc_variables, num_guc_variables,
sizeof(struct config_generic *), guc_var_compare);
}
......@@ -4168,6 +4162,7 @@ add_guc_variable(struct config_generic * var, int elevel)
size_guc_variables = size_vars;
}
guc_variables[num_guc_variables++] = var;
gpdb_assign_sync_flag(&var, 1, false /* predefine */);
qsort((void *) guc_variables, num_guc_variables,
sizeof(struct config_generic *), guc_var_compare);
return true;
......@@ -4285,7 +4280,7 @@ guc_var_compare(const void *a, const void *b)
/*
* the bare comparison function for GUC names
*/
static int
int
guc_name_compare(const char *namea, const char *nameb)
{
/*
......
......@@ -90,6 +90,7 @@ static void assign_gp_default_storage_options(const char *newval, void *extra);
static bool check_pljava_classpath_insecure(bool *newval, void **extra, GucSource source);
static void assign_pljava_classpath_insecure(bool newval, void *extra);
static bool check_gp_resource_group_bypass(bool *newval, void **extra, GucSource source);
static int guc_array_compare(const void *a, const void *b);
extern struct config_generic *find_option(const char *name, bool create_placeholders, int elevel);
......@@ -686,7 +687,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"log_dispatch_stats", PGC_SUSET, STATS_MONITORING,
gettext_noop("Writes dispatcher performance statistics to the server log."),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&log_dispatch_stats,
false,
......@@ -859,7 +860,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_enable_mk_sort", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Enable multi-key sort."),
gettext_noop("A faster sort."),
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_enable_mk_sort,
......@@ -871,7 +872,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_enable_motion_mk_sort", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Enable multi-key sort in sorted motion recv."),
gettext_noop("A faster sort for recv motion"),
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_enable_motion_mk_sort,
......@@ -885,7 +886,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_mk_sort_check", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Extensive check mk_sort"),
gettext_noop("Expensive debug checking"),
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_mk_sort_check,
false,
......@@ -974,7 +975,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_select_invisible", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Use dummy snapshot for MVCC visibility calculation."),
NULL,
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_NEED_SYNC
},
&gp_select_invisible,
false,
......@@ -1105,7 +1106,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_workfile_compression", PGC_USERSET, RESOURCES_DISK,
gettext_noop("Enables compression of temporary files."),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&gp_workfile_compression,
false,
......@@ -1147,7 +1148,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_interconnect_full_crc", PGC_USERSET, QUERY_TUNING_OTHER,
gettext_noop("Sanity check incoming data stream."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_interconnect_full_crc,
false,
......@@ -1158,7 +1159,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_interconnect_log_stats", PGC_USERSET, QUERY_TUNING_OTHER,
gettext_noop("Emit statistics from the UDP-IC at the end of every statement."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_interconnect_log_stats,
false,
......@@ -1570,7 +1571,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_disable_tuple_hints", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Specify if reader should set hint bits on tuples."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_disable_tuple_hints,
true,
......@@ -1612,7 +1613,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"coredump_on_memerror", PGC_SUSET, DEVELOPER_OPTIONS,
gettext_noop("Generate core dump on memory error."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&coredump_on_memerror,
false,
......@@ -1737,7 +1738,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"pljava_release_lingering_savepoints", PGC_SUSET, CUSTOM_OPTIONS,
gettext_noop("If true, lingering savepoints will be released on function exit; if false, they will be rolled back"),
NULL,
GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY
GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY
},
&pljava_release_lingering_savepoints,
false,
......@@ -1769,7 +1770,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_partitioning_dynamic_selection_log", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Print out debugging info for GPDB dynamic partition selection"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_partitioning_dynamic_selection_log,
false,
......@@ -1780,7 +1781,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_perfmon_print_packet_info", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Print out debugging info for a Perfmon packet"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_perfmon_print_packet_info,
false,
......@@ -1791,7 +1792,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_log_stack_trace_lines", PGC_USERSET, LOGGING_WHAT,
gettext_noop("Control if file/line information is included in stack traces"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_log_stack_trace_lines,
true,
......@@ -1803,7 +1804,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_log_resqueue_memory", PGC_USERSET, LOGGING_WHAT,
gettext_noop("Prints out messages related to resource queue's memory management."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_log_resqueue_memory,
false,
......@@ -1815,7 +1816,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_log_resgroup_memory", PGC_USERSET, LOGGING_WHAT,
gettext_noop("Prints out messages related to resource group's memory management."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_log_resgroup_memory,
false,
......@@ -1827,7 +1828,7 @@ struct config_bool ConfigureNamesBool_gp[] =
gettext_noop("Prints out the memory limit for operators (in explain) assigned by resource queue's "
"memory management."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_resqueue_print_operator_memory_limits,
false,
......@@ -1839,7 +1840,7 @@ struct config_bool ConfigureNamesBool_gp[] =
gettext_noop("Prints out the memory limit for operators (in explain) assigned by resource group's "
"memory management."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_resgroup_print_operator_memory_limits,
false,
......@@ -1992,7 +1993,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"optimizer_partition_selection_log", PGC_USERSET, LOGGING_WHAT,
gettext_noop("Log optimizer partition selection."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&optimizer_partition_selection_log,
false,
......@@ -2769,7 +2770,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"dml_ignore_target_partition_check", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Ignores checking whether the user provided correct partition during a direct insert to a leaf partition"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&dml_ignore_target_partition_check,
false,
......@@ -2824,7 +2825,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"vmem_process_interrupt", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Checks for interrupts before reserving VMEM"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&vmem_process_interrupt,
false,
......@@ -2835,7 +2836,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"execute_pruned_plan", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Prune plan to discard unwanted plan nodes for each slice before execution"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&execute_pruned_plan,
true,
......@@ -2857,7 +2858,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_enable_segment_copy_checking", PGC_USERSET, CUSTOM_OPTIONS,
gettext_noop("Enable check the distribution key restriction on segment for command \"COPY FROM ON SEGMENT\"."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_enable_segment_copy_checking,
true,
......@@ -2868,7 +2869,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_ignore_error_table", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
gettext_noop("Ignore INTO error-table in external table and COPY (Deprecated)."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_ignore_error_table,
false,
......@@ -2898,7 +2899,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"verify_gpfdists_cert", PGC_USERSET, EXTERNAL_TABLES,
gettext_noop("Verifies the authenticity of the gpfdist's certificate"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&verify_gpfdists_cert,
true, check_verify_gpfdists_cert, NULL
......@@ -2908,7 +2909,7 @@ struct config_bool ConfigureNamesBool_gp[] =
{"gp_external_enable_filter_pushdown", PGC_USERSET, EXTERNAL_TABLES,
gettext_noop("Enable passing of query constraints to external table providers"),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&gp_external_enable_filter_pushdown,
true, NULL, NULL
......@@ -3041,7 +3042,7 @@ struct config_int ConfigureNamesInt_gp[] =
gettext_noop("The planner considers this much memory may be used by each internal "
"sort operation and hash table before switching to "
"temporary disk files."),
GUC_UNIT_KB | GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL
GUC_UNIT_KB | GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL
},
&planner_work_mem,
32768, 2 * BLCKSZ / 1024, MAX_KILOBYTES,
......@@ -3052,7 +3053,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"statement_mem", PGC_USERSET, RESOURCES_MEM,
gettext_noop("Sets the memory to be reserved for a statement."),
NULL,
GUC_UNIT_KB | GUC_GPDB_ADDOPT
GUC_UNIT_KB | GUC_GPDB_NEED_SYNC
},
&statement_mem,
#ifdef USE_ASSERT_CHECKING
......@@ -3088,7 +3089,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"max_statement_mem", PGC_SUSET, RESOURCES_MEM,
gettext_noop("Sets the maximum value for statement_mem setting."),
NULL,
GUC_UNIT_KB | GUC_GPDB_ADDOPT
GUC_UNIT_KB | GUC_GPDB_NEED_SYNC
},
&max_statement_mem,
2048000, 32768, INT_MAX,
......@@ -3121,7 +3122,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_max_partition_level", PGC_SUSET, PRESET_OPTIONS,
gettext_noop("Sets the maximum number of levels allowed when creating a partitioned table."),
gettext_noop("Use 0 for no limit."),
GUC_GPDB_ADDOPT | GUC_SUPERUSER_ONLY | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_SUPERUSER_ONLY | GUC_NOT_IN_SAMPLE
},
&gp_max_partition_level,
0, 0, INT_MAX,
......@@ -3154,7 +3155,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_workfile_limit_files_per_query", PGC_USERSET, RESOURCES,
gettext_noop("Maximum number of workfiles allowed per query per segment."),
gettext_noop("0 for no limit. Current query is terminated when limit is exceeded."),
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&gp_workfile_limit_files_per_query,
100000, 0, INT_MAX,
......@@ -3176,7 +3177,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_workfile_limit_per_query", PGC_USERSET, RESOURCES,
gettext_noop("Maximum disk space (in KB) used for workfiles per query per segment."),
gettext_noop("0 for no limit. Current query is terminated when limit is exceeded."),
GUC_GPDB_ADDOPT | GUC_UNIT_KB
GUC_GPDB_NEED_SYNC | GUC_UNIT_KB
},
&gp_workfile_limit_per_query,
0, 0, INT_MAX,
......@@ -3187,7 +3188,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_vmem_idle_resource_timeout", PGC_USERSET, CLIENT_CONN_OTHER,
gettext_noop("Sets the time a session can be idle (in milliseconds) before we release gangs on the segment DBs to free resources."),
gettext_noop("A value of 0 turns off the timeout."),
GUC_UNIT_MS | GUC_GPDB_ADDOPT
GUC_UNIT_MS | GUC_GPDB_NEED_SYNC
},
&IdleSessionGangTimeout,
#ifdef USE_ASSERT_CHECKING
......@@ -3299,7 +3300,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_max_packet_size", PGC_BACKEND, GP_ARRAY_TUNING,
gettext_noop("Sets the max packet size for the Interconnect."),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_max_packet_size,
DEFAULT_PACKET_SIZE, MIN_PACKET_SIZE, MAX_PACKET_SIZE,
......@@ -3310,7 +3311,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_queue_depth", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the maximum size of the receive queue for each connection in the UDP interconnect"),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_queue_depth,
4, 1, 4096,
......@@ -3321,7 +3322,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_snd_queue_depth", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the maximum size of the send queue for each connection in the UDP interconnect"),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_snd_queue_depth,
2, 1, 4096,
......@@ -3332,7 +3333,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_timer_period", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the timer period (in ms) for UDP interconnect"),
NULL,
GUC_UNIT_MS | GUC_GPDB_ADDOPT
GUC_UNIT_MS | GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_timer_period,
5, 1, 100,
......@@ -3343,7 +3344,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_timer_checking_period", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the timer checking period (in ms) for UDP interconnect"),
NULL,
GUC_UNIT_MS | GUC_GPDB_ADDOPT
GUC_UNIT_MS | GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_timer_checking_period,
20, 1, 100,
......@@ -3354,7 +3355,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_default_rtt", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the default rtt (in ms) for UDP interconnect"),
NULL,
GUC_UNIT_MS | GUC_GPDB_ADDOPT
GUC_UNIT_MS | GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_default_rtt,
20, 1, 1000,
......@@ -3365,7 +3366,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_min_rto", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the min rto (in ms) for UDP interconnect"),
NULL,
GUC_UNIT_MS | GUC_GPDB_ADDOPT
GUC_UNIT_MS | GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_min_rto,
20, 1, 1000,
......@@ -3376,7 +3377,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_transmit_timeout", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Timeout (in seconds) on interconnect to transmit a packet"),
gettext_noop("Used by Interconnect to timeout packet transmission."),
GUC_UNIT_S | GUC_GPDB_ADDOPT
GUC_UNIT_S | GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_transmit_timeout,
3600, 1, 7200,
......@@ -3387,7 +3388,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_min_retries_before_timeout", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the min retries before reporting a transmit timeout in the interconnect."),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_min_retries_before_timeout,
100, 1, 4096,
......@@ -3398,7 +3399,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_debug_retry_interval", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the interval by retry times to record a debug message for retry."),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_debug_retry_interval,
10, 1, 4096,
......@@ -3409,7 +3410,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_udp_bufsize_k", PGC_BACKEND, GP_ARRAY_TUNING,
gettext_noop("Sets recv buf size of UDP interconnect, for testing."),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_udp_bufsize_k,
0, 0, 32768,
......@@ -3421,7 +3422,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_udpic_dropseg", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Specifies a segment to which the dropacks, and dropxmit settings will be applied, for testing. (The default is to apply the dropacks and dropxmit settings to all segments)"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_udpic_dropseg,
UNDEF_SEGMENT, UNDEF_SEGMENT, INT_MAX,
......@@ -3432,7 +3433,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_udpic_dropacks_percent", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the percentage of correctly-received acknowledgment packets to synthetically drop, for testing. (affected by gp_udpic_dropseg)"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_udpic_dropacks_percent,
0, 0, 100,
......@@ -3443,7 +3444,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_udpic_dropxmit_percent", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the percentage of correctly-received data packets to synthetically drop, for testing. (affected by gp_udpic_dropseg)"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_udpic_dropxmit_percent,
0, 0, 100,
......@@ -3454,7 +3455,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_udpic_fault_inject_percent", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the percentage of fault injected into system calls, for testing. (affected by gp_udpic_dropseg)"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_udpic_fault_inject_percent,
0, 0, 100,
......@@ -3465,7 +3466,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_udpic_fault_inject_bitmap", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the bitmap for faults injection, for testing. (affected by gp_udpic_dropseg)"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_udpic_fault_inject_bitmap,
0, 0, INT_MAX,
......@@ -3476,7 +3477,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_udpic_network_disable_ipv6", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the address info hint to disable the ipv6, for testing. (affected by gp_udpic_dropseg)"),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_udpic_network_disable_ipv6,
0, 0, 1,
......@@ -3522,7 +3523,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_debug_linger", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Number of seconds for QD/QE process to linger upon fatal internal error."),
gettext_noop("Allows an opportunity to debug the backend process before it terminates."),
GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_NEED_SYNC
},
&gp_debug_linger,
120, 0, 3600,
......@@ -3530,7 +3531,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_debug_linger", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Number of seconds for QD/QE process to linger upon fatal internal error."),
gettext_noop("Allows an opportunity to debug the backend process before it terminates."),
GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_NO_RESET_ALL | GUC_UNIT_S | GUC_GPDB_NEED_SYNC
},
&gp_debug_linger,
0, 0, 3600,
......@@ -3576,7 +3577,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_setup_timeout", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Timeout (in seconds) on interconnect setup that occurs at query start"),
gettext_noop("Used by Interconnect to timeout the setup of the communication fabric."),
GUC_UNIT_S | GUC_GPDB_ADDOPT
GUC_UNIT_S | GUC_GPDB_NEED_SYNC
},
&interconnect_setup_timeout,
7200, 0, 7200,
......@@ -3587,7 +3588,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_interconnect_tcp_listener_backlog", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Size of the listening queue for each TCP interconnect socket"),
gettext_noop("Cooperate with kernel parameter net.core.somaxconn and net.ipv4.tcp_max_syn_backlog to tune network performance."),
GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&listenerBacklog,
128, 0, 65535,
......@@ -3598,7 +3599,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_snapshotadd_timeout", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Timeout (in seconds) on setup of new connection snapshot"),
gettext_noop("Used by the transaction manager."),
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_UNIT_S | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_UNIT_S | GUC_GPDB_NEED_SYNC
},
&gp_snapshotadd_timeout,
10, 0, INT_MAX,
......@@ -3706,7 +3707,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_hashjoin_tuples_per_bucket", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Target density of hashtable used by Hashjoin during execution"),
gettext_noop("A smaller value will tend to produce larger hashtables, which increases join performance"),
GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_hashjoin_tuples_per_bucket,
5, 1, 25,
......@@ -3717,7 +3718,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_hashagg_groups_per_bucket", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Target density of hashtable used by Hashagg during execution"),
gettext_noop("A smaller value will tend to produce larger hashtables, which increases agg performance"),
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_NEED_SYNC
},
&gp_hashagg_groups_per_bucket,
5, 1, 25,
......@@ -3728,7 +3729,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_hashagg_default_nbatches", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Default number of batches for hashagg's (re-)spilling phases."),
gettext_noop("Must be a power of two."),
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_hashagg_default_nbatches,
32, 4, 1048576,
......@@ -3739,7 +3740,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_motion_slice_noop", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Make motion nodes in certain slices noop"),
gettext_noop("Make motion nodes noop, to help analyze performance"),
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_NO_SHOW_ALL | GUC_GPDB_NEED_SYNC
},
&gp_motion_slice_noop,
0, 0, INT_MAX,
......@@ -3760,7 +3761,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_gpperfmon_send_interval", PGC_SUSET, LOGGING_WHAT,
gettext_noop("Interval in seconds between sending messages to gpperfmon."),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&gp_gpperfmon_send_interval,
1, 1, 3600,
......@@ -3896,7 +3897,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_blockdirectory_entry_min_range", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Minimal range in bytes one block directory entry covers."),
gettext_noop("Used to reduce the size of a block directory."),
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_blockdirectory_entry_min_range,
0, 0, INT_MAX,
......@@ -3907,7 +3908,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_blockdirectory_minipage_size", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Number of entries one row in a block directory table contains."),
gettext_noop("Use smaller value in non-bulk load cases."),
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_blockdirectory_minipage_size,
NUM_MINIPAGE_ENTRIES, 1, NUM_MINIPAGE_ENTRIES,
......@@ -3931,7 +3932,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"pljava_statement_cache_size", PGC_SUSET, CUSTOM_OPTIONS,
gettext_noop("Size of the prepared statement MRU cache"),
NULL,
GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY
GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY
},
&pljava_statement_cache_size,
0, 0, 512,
......@@ -3942,7 +3943,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_resqueue_memory_policy_auto_fixed_mem", PGC_USERSET, RESOURCES_MEM,
gettext_noop("Sets the fixed amount of memory reserved for non-memory intensive operators in the AUTO policy."),
NULL,
GUC_UNIT_KB | GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_UNIT_KB | GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&gp_resqueue_memory_policy_auto_fixed_mem,
100, 50, INT_MAX,
......@@ -3953,7 +3954,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_resgroup_memory_policy_auto_fixed_mem", PGC_USERSET, RESOURCES_MEM,
gettext_noop("Sets the fixed amount of memory reserved for non-memory intensive operators in the AUTO policy."),
NULL,
GUC_UNIT_KB | GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_UNIT_KB | GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&gp_resgroup_memory_policy_auto_fixed_mem,
100, 50, INT_MAX,
......@@ -3974,7 +3975,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"optimizer_plan_id", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Choose a plan alternative"),
NULL,
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&optimizer_plan_id,
0, 0, INT_MAX,
......@@ -3985,7 +3986,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"optimizer_samples_number", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Set the number of plan samples"),
NULL,
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&optimizer_samples_number,
1000, 1, INT_MAX,
......@@ -3996,7 +3997,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"optimizer_cte_inlining_bound", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Set the CTE inlining cutoff"),
NULL,
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&optimizer_cte_inlining_bound,
0, 0, INT_MAX,
......@@ -4029,7 +4030,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"optimizer_push_group_by_below_setop_threshold", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Maximum number of children setops have to consider pushing group bys below it"),
NULL,
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&optimizer_push_group_by_below_setop_threshold,
10, 0, INT_MAX,
......@@ -4072,7 +4073,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"optimizer_mdcache_size", PGC_USERSET, RESOURCES_MEM,
gettext_noop("Sets the size of MDCache."),
NULL,
GUC_UNIT_KB | GUC_GPDB_ADDOPT
GUC_UNIT_KB | GUC_GPDB_NEED_SYNC
},
&optimizer_mdcache_size,
16384, 0, INT_MAX,
......@@ -4083,7 +4084,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"memory_profiler_dataset_size", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Set the size in GB"),
NULL,
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&memory_profiler_dataset_size,
0, 0, INT_MAX,
......@@ -4105,7 +4106,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_initial_bad_row_limit", PGC_USERSET, EXTERNAL_TABLES,
gettext_noop("Stops processing when number of the first bad rows exceeding this value"),
NULL,
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&gp_initial_bad_row_limit,
1000, 0, INT_MAX,
......@@ -4116,7 +4117,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_indexcheck_insert", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Validate that a unique index does not already have the new tid during insert."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
(int *) &gp_indexcheck_insert,
INDEX_CHECK_NONE, 0, INDEX_CHECK_ALL,
......@@ -4127,7 +4128,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_indexcheck_vacuum", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Validate index after lazy vacuum."),
NULL,
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
(int *) &gp_indexcheck_vacuum,
INDEX_CHECK_NONE, 0, INDEX_CHECK_ALL,
......@@ -4138,7 +4139,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"dtx_phase2_retry_count", PGC_SUSET, DEVELOPER_OPTIONS,
gettext_noop("Maximum number of retries during two phase commit after which master PANICs."),
NULL,
GUC_SUPERUSER_ONLY | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_SUPERUSER_ONLY | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&dtx_phase2_retry_count,
10, 0, INT_MAX,
......@@ -4161,7 +4162,7 @@ struct config_int ConfigureNamesInt_gp[] =
{"gp_max_slices", PGC_USERSET, PRESET_OPTIONS,
gettext_noop("Maximum slices for a single query"),
NULL,
GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE
},
&gp_max_slices,
0, 0, INT_MAX, NULL, NULL
......@@ -4316,7 +4317,7 @@ struct config_string ConfigureNamesString_gp[] =
{"memory_profiler_run_id", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Set the unique run ID for memory profiling"),
gettext_noop("Any string is acceptable"),
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&memory_profiler_run_id,
"none",
......@@ -4327,7 +4328,7 @@ struct config_string ConfigureNamesString_gp[] =
{"memory_profiler_dataset_id", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Set the dataset ID for memory profiling"),
gettext_noop("Any string is acceptable"),
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&memory_profiler_dataset_id,
"none",
......@@ -4338,7 +4339,7 @@ struct config_string ConfigureNamesString_gp[] =
{"memory_profiler_query_id", PGC_USERSET, DEVELOPER_OPTIONS,
gettext_noop("Set the query ID for memory profiling"),
gettext_noop("Any string is acceptable"),
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&memory_profiler_query_id,
"none",
......@@ -4417,7 +4418,7 @@ struct config_string ConfigureNamesString_gp[] =
{"pljava_vmoptions", PGC_SUSET, CUSTOM_OPTIONS,
gettext_noop("Options sent to the JVM when it is created"),
NULL,
GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY
GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE | GUC_SUPERUSER_ONLY
},
&pljava_vmoptions,
"",
......@@ -4427,7 +4428,7 @@ struct config_string ConfigureNamesString_gp[] =
{"pljava_classpath", PGC_SUSET, CUSTOM_OPTIONS,
gettext_noop("classpath used by the the JVM"),
NULL,
GUC_GPDB_ADDOPT | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NOT_IN_SAMPLE
},
&pljava_classpath,
"",
......@@ -4460,7 +4461,7 @@ struct config_string ConfigureNamesString_gp[] =
{"gp_default_storage_options", PGC_USERSET, APPENDONLY_TABLES,
gettext_noop("default options for appendonly storage."),
NULL,
GUC_NOT_IN_SAMPLE | GUC_GPDB_ADDOPT
GUC_NOT_IN_SAMPLE | GUC_GPDB_NEED_SYNC
},
&gp_default_storage_options, "",
check_gp_default_storage_options, assign_gp_default_storage_options, NULL
......@@ -4493,7 +4494,7 @@ struct config_enum ConfigureNamesEnum_gp[] =
"DEBUG1, LOG, NOTICE, WARNING, and ERROR. Each level includes all the "
"levels that follow it. The later the level, the fewer messages are "
"sent."),
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&gp_workfile_caching_loglevel,
DEBUG1, server_message_level_options,
......@@ -4507,7 +4508,7 @@ struct config_enum ConfigureNamesEnum_gp[] =
"DEBUG1, LOG, NOTICE, WARNING, and ERROR. Each level includes all the "
"levels that follow it. The later the level, the fewer messages are "
"sent."),
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&gp_sessionstate_loglevel,
DEBUG1, server_message_level_options,
......@@ -4582,7 +4583,7 @@ struct config_enum ConfigureNamesEnum_gp[] =
{"explain_memory_verbosity", PGC_USERSET, RESOURCES_MEM,
gettext_noop("Experimental feature: show memory account usage in EXPLAIN ANALYZE."),
gettext_noop("Valid values are SUPPRESS, SUMMARY, DETAIL, and DEBUG."),
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&explain_memory_verbosity,
EXPLAIN_MEMORY_VERBOSITY_SUPPRESS, explain_memory_verbosity_options,
......@@ -4635,7 +4636,7 @@ struct config_enum ConfigureNamesEnum_gp[] =
{"gp_interconnect_fc_method", PGC_USERSET, GP_ARRAY_TUNING,
gettext_noop("Sets the flow control method used for UDP interconnect."),
gettext_noop("Valid values are \"capacity\" and \"loss\"."),
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_fc_method,
INTERCONNECT_FC_METHOD_LOSS, gp_interconnect_fc_methods,
......@@ -4646,7 +4647,7 @@ struct config_enum ConfigureNamesEnum_gp[] =
{"gp_interconnect_type", PGC_BACKEND, GP_ARRAY_TUNING,
gettext_noop("Sets the protocol used for inter-node communication."),
gettext_noop("Valid values are \"tcp\" and \"udpifc\"."),
GUC_GPDB_ADDOPT
GUC_GPDB_NEED_SYNC
},
&Gp_interconnect_type,
INTERCONNECT_TYPE_UDPIFC, gp_interconnect_types,
......@@ -4679,7 +4680,7 @@ struct config_enum ConfigureNamesEnum_gp[] =
{"gp_log_interconnect", PGC_USERSET, LOGGING_WHAT,
gettext_noop("Sets the verbosity of logged messages pertaining to connections between worker processes."),
gettext_noop("Valid values are \"off\", \"terse\", \"verbose\" and \"debug\"."),
GUC_GPDB_ADDOPT | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
GUC_GPDB_NEED_SYNC | GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE
},
&gp_log_interconnect,
GPVARS_VERBOSITY_TERSE, gp_log_verbosity,
......@@ -4732,6 +4733,90 @@ struct config_enum ConfigureNamesEnum_gp[] =
}
};
/*
* For system defined GUC must assign a tag either GUC_GPDB_NEED_SYNC
* or GUC_GPDB_NO_SYNC. We deprecated direct define in guc.c, instead,
* add into sync_guc_names_array or unsync_guc_names_array.
*/
static const char *sync_guc_names_array[] =
{
#include "utils/sync_guc_name.h"
};
static const char *unsync_guc_names_array[] =
{
#include "utils/unsync_guc_name.h"
};
int sync_guc_num = 0;
int unsync_guc_num = 0;
static int guc_array_compare(const void *a, const void *b)
{
const char *namea = *(const char **)a;
const char *nameb = *(const char **)b;
return guc_name_compare(namea, nameb);
}
void gpdb_assign_sync_flag(struct config_generic **guc_variables, int size, bool predefine)
{
static bool init = false;
/* ordering guc_name_array alphabets */
if (!init) {
sync_guc_num = sizeof(sync_guc_names_array) / sizeof(char *);
qsort((void *) sync_guc_names_array, sync_guc_num,
sizeof(char *), guc_array_compare);
unsync_guc_num = sizeof(unsync_guc_names_array) / sizeof(char *);
qsort((void *) unsync_guc_names_array, unsync_guc_num,
sizeof(char *), guc_array_compare);
init = true;
}
for (int i = 0; i < size; i ++)
{
struct config_generic *var = guc_variables[i];
/* if the sync flags is defined in guc variable, skip it */
if (var->flags & (GUC_GPDB_NEED_SYNC | GUC_GPDB_NO_SYNC))
continue;
char *res = (char *) bsearch((void *) &var->name,
(void *) sync_guc_names_array,
sync_guc_num,
sizeof(char *),
guc_array_compare);
if (!res)
{
char *res = (char *) bsearch((void *) &var->name,
(void *) unsync_guc_names_array,
unsync_guc_num,
sizeof(char *),
guc_array_compare);
/* for predefined guc, we force its name in one array.
* for the third-part libraries gucs introduced by customer
* we assign unsync flags as default.
*/
if (!res && predefine)
{
ereport(ERROR,
(errcode(ERRCODE_INTERNAL_ERROR),
errmsg("predefined guc name: %s contain neither "
"sync_guc_names_array nor unsync_guc_names_array", var->name)));
}
var->flags |= GUC_GPDB_NO_SYNC;
}
else
{
var->flags |= GUC_GPDB_NEED_SYNC;
}
}
}
static bool
check_pljava_classpath_insecure(bool *newval, void **extra, GucSource source)
{
......
......@@ -220,8 +220,9 @@ typedef enum
#define GUC_DISALLOW_IN_AUTO_FILE 0x00010000 /* can't set in PG_AUTOCONF_FILENAME */
/* GPDB speific */
#define GUC_GPDB_ADDOPT 0x00020000 /* Send by cdbgang */
#define GUC_DISALLOW_USER_SET 0x00040000 /* Do not allow this GUC to be set by the user */
#define GUC_GPDB_NEED_SYNC 0x00020000 /* guc value is synced between master and primary */
#define GUC_GPDB_NO_SYNC 0x00040000 /* guc value is not synced between master and primary */
#define GUC_DISALLOW_USER_SET 0x00080000 /* Do not allow this GUC to be set by the user */
/* GUC lists for gp_guc_list_show(). (List of struct config_generic) */
extern List *gp_guc_list_for_explain;
......@@ -767,5 +768,6 @@ extern const char *gpvars_show_gp_resqueue_memory_policy(void);
extern bool gpvars_check_statement_mem(int *newval, void **extra, GucSource source);
extern bool gpvars_check_gp_enable_gpperfmon(bool *newval, void **extra, GucSource source);
extern bool gpvars_check_gp_gpperfmon_send_interval(int *newval, void **extra, GucSource source);
extern int guc_name_compare(const char *namea, const char *nameb);
#endif /* GUC_H */
......@@ -321,4 +321,6 @@ extern struct config_real ConfigureNamesReal_gp[];
extern struct config_string ConfigureNamesString_gp[];
extern struct config_enum ConfigureNamesEnum_gp[];
extern void gpdb_assign_sync_flag(struct config_generic **guc_variables, int size, bool predefine);
#endif /* GUC_TABLES_H */
"client_min_messages",
"commit_delay",
"commit_siblings",
"coredump_on_memerror",
"DateStyle",
"default_tablespace",
"dml_ignore_target_partition_check",
"dtx_phase2_retry_count",
"execute_pruned_plan",
"explain_memory_verbosity",
"gin_fuzzy_search_limit",
"gp_blockdirectory_entry_min_range",
"gp_blockdirectory_minipage_size",
"gp_debug_linger",
"gp_default_storage_options",
"gp_disable_tuple_hints",
"gp_enable_mk_sort",
"gp_enable_motion_mk_sort",
"gp_enable_segment_copy_checking",
"gp_external_enable_filter_pushdown",
"gp_gpperfmon_send_interval",
"gp_hashagg_default_nbatches",
"gp_hashagg_groups_per_bucket",
"gp_hashjoin_tuples_per_bucket",
"gp_ignore_error_table",
"gp_indexcheck_insert",
"gp_indexcheck_vacuum",
"gp_initial_bad_row_limit",
"gp_interconnect_debug_retry_interval",
"gp_interconnect_default_rtt",
"gp_interconnect_fc_method",
"gp_interconnect_full_crc",
"gp_interconnect_log_stats",
"gp_interconnect_min_retries_before_timeout",
"gp_interconnect_min_rto",
"gp_interconnect_queue_depth",
"gp_interconnect_setup_timeout",
"gp_interconnect_snd_queue_depth",
"gp_interconnect_tcp_listener_backlog",
"gp_interconnect_timer_checking_period",
"gp_interconnect_timer_period",
"gp_interconnect_transmit_timeout",
"gp_interconnect_type",
"gp_log_interconnect",
"gp_log_resgroup_memory",
"gp_log_resqueue_memory",
"gp_log_stack_trace_lines",
"gp_max_packet_size",
"gp_max_partition_level",
"gp_max_slices",
"gp_mk_sort_check",
"gp_motion_slice_noop",
"gp_partitioning_dynamic_selection_log",
"gp_perfmon_print_packet_info",
"gp_resgroup_memory_policy_auto_fixed_mem",
"gp_resgroup_print_operator_memory_limits",
"gp_resqueue_memory_policy_auto_fixed_mem",
"gp_resqueue_print_operator_memory_limits",
"gp_select_invisible",
"gp_sessionstate_loglevel",
"gp_snapshotadd_timeout",
"gp_udp_bufsize_k",
"gp_udpic_dropacks_percent",
"gp_udpic_dropseg",
"gp_udpic_dropxmit_percent",
"gp_udpic_fault_inject_bitmap",
"gp_udpic_fault_inject_percent",
"gp_udpic_network_disable_ipv6",
"gp_vmem_idle_resource_timeout",
"gp_workfile_caching_loglevel",
"gp_workfile_compression",
"gp_workfile_limit_files_per_query",
"gp_workfile_limit_per_query",
"IntervalStyle",
"lc_numeric",
"log_dispatch_stats",
"log_duration",
"log_error_verbosity",
"log_executor_stats",
"log_min_duration_statement",
"log_min_error_statement",
"log_min_messages",
"log_statement_stats",
"maintenance_work_mem",
"max_statement_mem",
"memory_profiler_dataset_id",
"memory_profiler_dataset_size",
"memory_profiler_query_id",
"memory_profiler_run_id",
"optimizer_cte_inlining_bound",
"optimizer_mdcache_size",
"optimizer_partition_selection_log",
"optimizer_plan_id",
"optimizer_push_group_by_below_setop_threshold",
"optimizer_samples_number",
"planner_work_mem",
"pljava_classpath",
"pljava_release_lingering_savepoints",
"pljava_statement_cache_size",
"pljava_vmoptions",
"search_path",
"statement_mem",
"statement_timeout",
"temp_buffers",
"TimeZone",
"verify_gpfdists_cert",
"vmem_process_interrupt",
"work_mem",
"temp_tablespaces",
"allow_segment_DML",
"allow_system_table_mods",
"application_name",
"archive_command",
"archive_mode",
"archive_timeout",
"array_nulls",
"authentication_timeout",
"autocommit",
"autovacuum",
"autovacuum_analyze_scale_factor",
"autovacuum_analyze_threshold",
"autovacuum_freeze_max_age",
"autovacuum_max_workers",
"autovacuum_max_workers",
"autovacuum_multixact_freeze_max_age",
"autovacuum_naptime",
"autovacuum_vacuum_cost_delay",
"autovacuum_vacuum_cost_limit",
"autovacuum_vacuum_scale_factor",
"autovacuum_vacuum_threshold",
"autovacuum_work_mem",
"backslash_quote",
"bgwriter_delay",
"bgwriter_lru_maxpages",
"bgwriter_lru_multiplier",
"block_size",
"bonjour",
"bonjour_name",
"bytea_output",
"check_function_bodies",
"checkpoint_completion_target",
"checkpoint_segments",
"checkpoint_timeout",
"checkpoint_warning",
"client_encoding",
"config_file",
"constraint_exclusion",
"cpu_index_tuple_cost",
"cpu_operator_cost",
"cpu_tuple_cost",
"create_restartpoint_on_ckpt_record_replay",
"cursor_tuple_fraction",
"cursor_tuple_fraction",
"data_checksums",
"data_directory",
"db_user_namespace",
"deadlock_timeout",
"debug_abort_after_distributed_prepared",
"Debug_appendonly_print_append_block",
"debug_appendonly_print_blockdirectory",
"debug_appendonly_print_compaction",
"debug_appendonly_print_datumstream",
"debug_appendonly_print_delete",
"debug_appendonly_print_insert",
"debug_appendonly_print_insert_tuple",
"Debug_appendonly_print_read_block",
"debug_appendonly_print_scan",
"debug_appendonly_print_scan_tuple",
"debug_appendonly_print_segfile_choice",
"debug_appendonly_print_storage_headers",
"debug_appendonly_print_verify_write_block",
"debug_appendonly_print_visimap",
"debug_appendonly_use_no_toast",
"debug_assertions",
"debug_basebackup",
"debug_bitmap_print_insert",
"debug_burn_xids",
"debug_cancel_print",
"debug_datumstream_block_read_check_integrity",
"debug_datumstream_block_write_check_integrity",
"debug_datumstream_read_check_large_varlena_integrity",
"debug_datumstream_read_print_varlena_info",
"debug_datumstream_write_print_large_varlena_info",
"debug_datumstream_write_print_small_varlena_info",
"debug_datumstream_write_use_small_initial_buffers",
"debug_disable_distributed_snapshot",
"debug_dtm_action",
"debug_dtm_action_nestinglevel",
"debug_dtm_action_primary",
"debug_dtm_action_protocol",
"debug_dtm_action_segment",
"debug_dtm_action_sql_command_tag",
"debug_dtm_action_target",
"debug_latch",
"debug_pretty_print",
"debug_print_full_dtm",
"debug_print_parse",
"debug_print_plan",
"debug_print_prelim_plan",
"debug_print_rewritten",
"debug_print_slice_table",
"debug_print_snapshot_dtm",
"debug_resource_group",
"debug_walrepl_rcv",
"debug_walrepl_snd",
"debug_walrepl_syncrep",
"debug_xlog_record_read",
"default_statistics_target",
"default_text_search_config",
"default_transaction_deferrable",
"default_transaction_isolation",
"default_transaction_read_only",
"default_with_oids",
"dynamic_library_path",
"dynamic_shared_memory_type",
"effective_cache_size",
"effective_io_concurrency",
"enable_bitmapscan",
"enable_groupagg",
"enable_hashagg",
"enable_hashjoin",
"enable_indexonlyscan",
"enable_indexscan",
"enable_material",
"enable_mergejoin",
"enable_nestloop",
"enable_seqscan",
"enable_sort",
"enable_tidscan",
"escape_string_warning",
"event_source",
"exit_on_error",
"external_pid_file",
"external_pid_file",
"extra_float_digits",
"from_collapse_limit",
"fsync",
"full_page_writes",
"geqo",
"geqo_effort",
"geqo_generations",
"geqo_pool_size",
"geqo_seed",
"geqo_selection_bias",
"geqo_threshold",
"gp_adjust_selectivity_for_outerjoins",
"gp_allow_non_uniform_partitioning_ddl",
"gp_allow_rename_relation_without_lock",
"gp_appendonly_compaction",
"gp_appendonly_compaction_threshold",
"gp_appendonly_verify_block_checksums",
"gp_appendonly_verify_write_block",
"gp_auth_time_override",
"gp_autostats_mode",
"gp_autostats_mode_in_functions",
"gp_autostats_on_change_threshold",
"gp_cached_segworkers_threshold",
"gp_command_count",
"gp_connection_send_timeout",
"gp_contentid",
"gp_cost_hashjoin_chainwalk",
"gp_create_table_random_default_distribution",
"gp_cte_sharing",
"gp_dbid",
"gp_debug_pgproc",
"gp_debug_resqueue_priority",
"gp_distinct_grouping_sets_threshold",
"gp_dynamic_partition_pruning",
"gp_eager_agg_distinct_pruning",
"gp_eager_one_phase_agg",
"gp_eager_preunique",
"gp_eager_two_phase_agg",
"gp_enable_agg_distinct",
"gp_enable_agg_distinct_pruning",
"gp_enable_direct_dispatch",
"gp_enable_exchange_default_partition",
"gp_enable_explain_allstat",
"gp_enable_fast_sri",
"gp_enable_global_deadlock_detector",
"gp_enable_gpperfmon",
"gp_enable_groupext_distinct_gather",
"gp_enable_groupext_distinct_pruning",
"gp_enable_hashjoin_size_heuristic",
"gp_enable_interconnect_aggressive_retry",
"gp_enable_minmax_optimization",
"gp_enable_minmax_optimization",
"gp_enable_motion_deadlock_sanity",
"gp_enable_multiphase_agg",
"gp_enable_predicate_propagation",
"gp_enable_preunique",
"gp_enable_query_metrics",
"gp_enable_relsize_collection",
"gp_enable_slow_writer_testmode",
"gp_enable_sort_distinct",
"gp_enable_sort_limit",
"gp_encoding_check_locale_compatibility",
"gp_external_enable_exec",
"gp_external_max_segs",
"gp_fts_mark_mirror_down_grace_period",
"gp_fts_probe_interval",
"gp_fts_probe_retries",
"gp_fts_probe_timeout",
"gp_gang_creation_retry_count",
"gp_gang_creation_retry_timer",
"gp_global_deadlock_detector_period",
"gp_hashagg_streambottom",
"gp_heap_require_relhasoids_match",
"gp_ignore_window_exclude",
"gp_instrument_shmem_size",
"gp_interconnect_cache_future_packets",
"gp_is_writer",
"gp_keep_all_xlog",
"gp_local_distributed_cache_stats",
"gp_log_dynamic_partition_pruning",
"gp_log_format",
"gp_log_fts",
"gp_log_gang",
"gp_log_optimization_time",
"gp_maintenance_conn",
"gp_max_local_distributed_cache",
"gp_max_plan_size",
"gp_motion_cost_per_row",
"gp_perfmon_segment_interval",
"gp_qd_hostname",
"gp_qd_port",
"gp_recursive_cte",
"gp_recursive_cte_prototype",
"gp_reject_internal_tcp_connection",
"gp_reject_percent_threshold",
"gp_reraise_signal",
"gp_resgroup_memory_policy",
"gp_resource_group_bypass",
"gp_resource_group_cpu_limit",
"gp_resource_group_cpu_priority",
"gp_resource_group_memory_limit",
"gp_resource_manager",
"gp_resqueue_memory_policy",
"gp_resqueue_priority",
"gp_resqueue_priority_cpucores_per_segment",
"gp_resqueue_priority_default_value",
"gp_resqueue_priority_grouping_timeout",
"gp_resqueue_priority_inactivity_timeout",
"gp_resqueue_priority_local_interval",
"gp_resqueue_priority_sweeper_interval",
"gp_role",
"gp_safefswritesize",
"gp_segment_connect_timeout",
"gp_segments_for_planner",
"gp_segworker_relative_priority",
"gp_selectivity_damping_factor",
"gp_selectivity_damping_for_joins",
"gp_selectivity_damping_for_scans",
"gp_selectivity_damping_sigsort",
"gp_server_version",
"gp_server_version_num",
"gp_session_id",
"gp_session_role",
"gp_set_proc_affinity",
"gp_sort_flags",
"gp_sort_max_distinct",
"gp_statistics_pullup_from_child_partition",
"gp_statistics_use_fkeys",
"gp_subtrans_warn_limit",
"gp_use_legacy_hashops",
"gp_vmem_limit_per_query",
"gp_vmem_protect_limit",
"gp_vmem_protect_segworker_cache_limit",
"gp_workfile_limit_per_segment",
"gp_workfile_max_entries",
"gp_write_shared_snapshot",
"gpperfmon_log_alert_level",
"gpperfmon_port",
"hba_file",
"hot_standby",
"hot_standby_feedback",
"huge_pages",
"ident_file",
"ignore_checksum_failure",
"ignore_system_indexes",
"integer_datetimes",
"IntervalStyle",
"is_superuser",
"join_collapse_limit",
"krb_caseins_users",
"krb_server_keyfile",
"lc_collate",
"lc_ctype",
"lc_messages",
"lc_monetary",
"lc_time",
"listen_addresses",
"lo_compat_privileges",
"local_preload_libraries",
"lock_timeout",
"log_autostats",
"log_autovacuum_min_duration",
"log_checkpoints",
"log_connections",
"log_destination",
"log_directory",
"log_disconnections",
"log_file_mode",
"log_filename",
"log_hostname",
"log_line_prefix",
"log_lock_waits",
"log_parser_stats",
"log_planner_stats",
"log_rotation_age",
"log_rotation_size",
"log_statement",
"log_temp_files",
"log_timezone",
"log_truncate_on_rotation",
"logging_collector",
"maintenance_mode",
"max_appendonly_tables",
"max_connections",
"max_files_per_process",
"max_function_args",
"max_identifier_length",
"max_index_keys",
"max_locks_per_transaction",
"max_pred_locks_per_transaction",
"max_prepared_transactions",
"max_replication_slots",
"max_resource_portals_per_transaction",
"max_resource_queues",
"max_stack_depth",
"max_standby_archive_delay",
"max_standby_streaming_delay",
"max_wal_senders",
"max_worker_processes",
"memory_spill_ratio",
"optimizer",
"optimizer_analyze_midlevel_partition",
"optimizer_analyze_root_partition",
"optimizer_apply_left_outer_to_union_all_disregarding_stats",
"optimizer_array_constraints",
"optimizer_array_expansion_threshold",
"optimizer_control",
"optimizer_cost_model",
"optimizer_cost_threshold",
"optimizer_cte_inlining",
"optimizer_damping_factor_filter",
"optimizer_damping_factor_groupby",
"optimizer_damping_factor_join",
"optimizer_dpe_stats",
"optimizer_enable_assert_maxonerow",
"optimizer_enable_associativity",
"optimizer_enable_bitmapscan",
"optimizer_enable_broadcast_nestloop_outer_child",
"optimizer_enable_constant_expression_evaluation",
"optimizer_enable_ctas",
"optimizer_enable_derive_stats_all_groups",
"optimizer_enable_direct_dispatch",
"optimizer_enable_dml",
"optimizer_enable_dml_constraints",
"optimizer_enable_dml_triggers",
"optimizer_enable_dynamictablescan",
"optimizer_enable_eageragg",
"optimizer_enable_gather_on_segment_for_dml",
"optimizer_enable_groupagg",
"optimizer_enable_hashagg",
"optimizer_enable_hashjoin",
"optimizer_enable_hashjoin_redistribute_broadcast_children",
"optimizer_enable_indexjoin",
"optimizer_enable_indexscan",
"optimizer_enable_master_only_queries",
"optimizer_enable_materialize",
"optimizer_enable_mergejoin",
"optimizer_enable_motion_broadcast",
"optimizer_enable_motion_gather",
"optimizer_enable_motion_redistribute",
"optimizer_enable_motions",
"optimizer_enable_motions_masteronly_queries",
"optimizer_enable_multiple_distinct_aggs",
"optimizer_enable_outerjoin_rewrite",
"optimizer_enable_outerjoin_to_unionall_rewrite",
"optimizer_enable_partial_index",
"optimizer_enable_partition_propagation",
"optimizer_enable_partition_selection",
"optimizer_enable_sort",
"optimizer_enable_space_pruning",
"optimizer_enable_streaming_material",
"optimizer_enable_tablescan",
"optimizer_enforce_subplans",
"optimizer_enumerate_plans",
"optimizer_expand_fulljoin",
"optimizer_extract_dxl_stats",
"optimizer_extract_dxl_stats_all_nodes",
"optimizer_force_agg_skew_avoidance",
"optimizer_force_expanded_distinct_aggs",
"optimizer_force_multistage_agg",
"optimizer_force_three_stage_scalar_dqa",
"optimizer_join_arity_for_associativity_commutativity",
"optimizer_join_order",
"optimizer_join_order_threshold",
"optimizer_log",
"optimizer_log_failure",
"optimizer_metadata_caching",
"optimizer_minidump",
"optimizer_multilevel_partitioning",
"optimizer_nestloop_factor",
"optimizer_parallel_union",
"optimizer_penalize_broadcast_threshold",
"optimizer_print_expression_properties",
"optimizer_print_group_properties",
"optimizer_print_job_scheduler",
"optimizer_print_memo_after_exploration",
"optimizer_print_memo_after_implementation",
"optimizer_print_memo_after_optimization",
"optimizer_print_missing_stats",
"optimizer_print_optimization_context",
"optimizer_print_optimization_stats",
"optimizer_print_plan",
"optimizer_print_query",
"optimizer_print_xform",
"optimizer_print_xform_results",
"optimizer_prune_computed_columns",
"optimizer_push_requirements_from_consumer_to_producer",
"optimizer_remove_order_below_dml",
"optimizer_replicated_table_insert",
"optimizer_sample_plans",
"optimizer_search_strategy_path",
"optimizer_segments",
"optimizer_sort_factor",
"optimizer_trace_fallback",
"optimizer_use_external_constant_expression_evaluation_for_ints",
"optimizer_use_gpdb_allocators",
"password_encryption",
"password_hash_algorithm",
"pljava_classpath_insecure",
"pljava_debug",
"port",
"post_auth_delay",
"pre_auth_delay",
"quote_all_identifiers",
"random_page_cost",
"readable_external_table_timeout",
"repl_catchup_within_range",
"resource_cleanup_gangs_on_wait",
"resource_scheduler",
"resource_select_only",
"restart_after_crash",
"role",
"runaway_detector_activation_percent",
"seed",
"segment_size",
"seq_page_cost",
"server_encoding",
"server_version",
"server_version_num",
"session_authorization",
"session_preload_libraries",
"session_replication_role",
"shared_buffers",
"shared_preload_libraries",
"sql_inheritance",
"ssl",
"ssl_ca_file",
"ssl_cert_file",
"ssl_ciphers",
"ssl_crl_file",
"ssl_ecdh_curve",
"ssl_key_file",
"ssl_prefer_server_ciphers",
"standard_conforming_strings",
"stats_queue_level",
"stats_temp_directory",
"superuser_reserved_connections",
"synchronize_seqscans",
"synchronous_commit",
"synchronous_standby_names",
"syslog_facility",
"syslog_ident",
"tcp_keepalives_count",
"tcp_keepalives_idle",
"tcp_keepalives_interval",
"temp_file_limit",
"test_AppendOnlyHash_eviction_vs_just_marking_not_inuse",
"test_print_direct_dispatch_info",
"timezone_abbreviations",
"trace_notify",
"trace_recovery_messages",
"trace_sort",
"track_activities",
"track_activity_query_size",
"track_counts",
"track_functions",
"track_io_timing",
"transaction_deferrable",
"transaction_isolation",
"transaction_read_only",
"transform_null_equals",
"unix_socket_directories",
"unix_socket_group",
"unix_socket_permissions",
"update_process_title",
"vacuum_cost_delay",
"vacuum_cost_limit",
"vacuum_cost_page_dirty",
"vacuum_cost_page_hit",
"vacuum_cost_page_miss",
"vacuum_defer_cleanup_age",
"vacuum_freeze_min_age",
"vacuum_freeze_table_age",
"vacuum_multixact_freeze_min_age",
"vacuum_multixact_freeze_table_age",
"wal_block_size",
"wal_buffers",
"wal_keep_segments",
"wal_level",
"wal_log_hints",
"wal_receiver_status_interval",
"wal_receiver_timeout",
"wal_segment_size",
"wal_sender_timeout",
"wal_sync_method",
"wal_writer_delay",
"writable_external_table_bufsize",
"xid_stop_limit",
"xid_warn_limit",
"xmlbinary",
"xmloption",
"zero_damaged_pages"
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册