Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

opt: add settings to enable usage of histograms and multi-column stats #48105

Merged
merged 1 commit into from
Apr 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions pkg/sql/exec_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,30 @@ var optDrivenFKCascadesClusterMode = settings.RegisterBoolSetting(
false,
)

// optUseHistogramsClusterMode controls the cluster default for whether
// histograms are used by the optimizer for cardinality estimation.
// Note that it does not control histogram collection; regardless of the
// value of this setting, the optimizer cannot use histograms if they
// haven't been collected. Collection of histograms is controlled by the
// cluster setting sql.stats.histogram_collection.enabled.
var optUseHistogramsClusterMode = settings.RegisterBoolSetting(
"sql.defaults.optimizer_use_histograms.enabled",
"default value for optimizer_use_histograms session setting; enables usage of histograms in the optimizer by default",
true,
)

// optUseMultiColStatsClusterMode controls the cluster default for whether
// multi-column stats are used by the optimizer for cardinality estimation.
// Note that it does not control collection of multi-column stats; regardless
// of the value of this setting, the optimizer cannot use multi-column stats
// if they haven't been collected. Collection of multi-column stats is
// controlled by the cluster setting sql.stats.multi_column_collection.enabled.
var optUseMultiColStatsClusterMode = settings.RegisterBoolSetting(
"sql.defaults.optimizer_use_multicol_stats.enabled",
"default value for optimizer_use_multicol_stats session setting; enables usage of multi-column stats in the optimizer by default",
true,
)

var implicitSelectForUpdateClusterMode = settings.RegisterBoolSetting(
"sql.defaults.implicit_select_for_update.enabled",
"default value for enable_implicit_select_for_update session setting; enables FOR UPDATE locking during the row-fetch phase of mutation statements",
Expand Down Expand Up @@ -1935,6 +1959,14 @@ func (m *sessionDataMutator) SetOptimizerFKCascades(val bool) {
m.data.OptimizerFKCascades = val
}

func (m *sessionDataMutator) SetOptimizerUseHistograms(val bool) {
m.data.OptimizerUseHistograms = val
}

func (m *sessionDataMutator) SetOptimizerUseMultiColStats(val bool) {
m.data.OptimizerUseMultiColStats = val
}

func (m *sessionDataMutator) SetImplicitSelectForUpdate(val bool) {
m.data.ImplicitSelectForUpdate = val
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/sql/explain_bundle.go
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,8 @@ func (c *stmtEnvCollector) PrintSettings(w io.Writer) error {
{sessionSetting: "enable_zigzag_join", clusterSetting: zigzagJoinClusterMode},
{sessionSetting: "optimizer_foreign_keys", clusterSetting: optDrivenFKChecksClusterMode},
{sessionSetting: "experimental_optimizer_foreign_key_cascades", clusterSetting: optDrivenFKCascadesClusterMode},
{sessionSetting: "optimizer_use_histograms", clusterSetting: optUseHistogramsClusterMode},
{sessionSetting: "optimizer_use_multicol_stats", clusterSetting: optUseMultiColStatsClusterMode},
}

for _, s := range relevantSettings {
Expand Down
6 changes: 6 additions & 0 deletions pkg/sql/logictest/testdata/logic_test/pg_catalog
Original file line number Diff line number Diff line change
Expand Up @@ -1687,6 +1687,8 @@ max_identifier_length 128 NULL NULL
max_index_keys 32 NULL NULL NULL string
node_id 1 NULL NULL NULL string
optimizer_foreign_keys on NULL NULL NULL string
optimizer_use_histograms on NULL NULL NULL string
optimizer_use_multicol_stats on NULL NULL NULL string
reorder_joins_limit 4 NULL NULL NULL string
require_explicit_primary_keys off NULL NULL NULL string
results_buffer_size 16384 NULL NULL NULL string
Expand Down Expand Up @@ -1748,6 +1750,8 @@ max_identifier_length 128 NULL user
max_index_keys 32 NULL user NULL 32 32
node_id 1 NULL user NULL 1 1
optimizer_foreign_keys on NULL user NULL on on
optimizer_use_histograms on NULL user NULL on on
optimizer_use_multicol_stats on NULL user NULL on on
reorder_joins_limit 4 NULL user NULL 4 4
require_explicit_primary_keys off NULL user NULL off off
results_buffer_size 16384 NULL user NULL 16384 16384
Expand Down Expand Up @@ -1806,6 +1810,8 @@ max_index_keys NULL NULL NULL NULL
node_id NULL NULL NULL NULL NULL
optimizer NULL NULL NULL NULL NULL
optimizer_foreign_keys NULL NULL NULL NULL NULL
optimizer_use_histograms NULL NULL NULL NULL NULL
optimizer_use_multicol_stats NULL NULL NULL NULL NULL
reorder_joins_limit NULL NULL NULL NULL NULL
require_explicit_primary_keys NULL NULL NULL NULL NULL
results_buffer_size NULL NULL NULL NULL NULL
Expand Down
2 changes: 2 additions & 0 deletions pkg/sql/logictest/testdata/logic_test/show_source
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ max_identifier_length 128
max_index_keys 32
node_id 1
optimizer_foreign_keys on
optimizer_use_histograms on
optimizer_use_multicol_stats on
reorder_joins_limit 4
require_explicit_primary_keys off
results_buffer_size 16384
Expand Down
Loading