未验证 提交 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)
{
/*
......
此差异已折叠。
......@@ -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.
先完成此消息的编辑!
想要评论请 注册