Postgresql:default_statistics_targetの値は実際に何を意味するのですか?


11

default_statistics_targetの値を増やすと、特に分析後にデータベースを高速化できます。

この記事を読むと、https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained

(...)簡単に言えば、このパラメータは、統計の収集方法を制御します。値1は、最も低い推定/正確な統計であり、値1000は、最も正確な統計です。明らかに、時間/リソースを消費します。 (CPU、メモリ等)/スペース。通常、デフォルト値は正確な計画を得るのに十分ですが、複雑なデータ分布がある場合や、列がクエリで頻繁に参照される場合、高い値を設定すると、テーブルのより良い統計を取得するのに役立つ可能性があります。オプティマイザを実行するためのより良い計画。

これは良い説明ですが、たとえばdefault_statistics_target = 1000を設定した場合、1000は実際には何を意味しますか?1000キロバイトの統計が生成されていますか?または多分それは分析されたテーブルの1000行ですか?多分それは1000列ですか?またはおそらく分析ごとに1000秒...

だから私の質問は、この数が分析やクエリプランナーに本当に影響しているのですか?default_statistics_target = 1000は分析を実行するために100より多くの時間を取得し、1000はより良い統計を生成することを理解しています...

回答:


16

300 * default_statistics_target各テーブルから行をサンプリングします。そのサンプルを使用してdefault_statistics_target、その配列に格納する最も一般的な値まで、およびその配列default_statistics_targetに格納するヒストグラム境界までを決定します。さらに、個別の値の数など、他のいくつかのスカラー統計。

いくつかの統計理論では、サンプリングしたヒストグラムの境界に許容可能なレベルの不確実性を持たせるために、計算する各ヒストグラムの境界ごとにサンプリングする必要がある数を示しているため、乗数300が選択されました。

最も一般的な値リストは、プランナーがなどの等式の選択性を予測するのに役立ちますwhere state='CA'。ヒストグラムの境界は、次のようにプランナーが不等式または範囲式の選択性を予測するのに役立ちますwhere income between 55000 and 64000


6
興味のある方のために、この300のマジック番号はpostgresのソースコード説明されおり、そこで参照されているリサーチペーパーはこちら
maahl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.