1 つの記事で統計情報モデルを理解できます

1. はじめに

データベースの「統計」とは、データベース内のテーブルと列の情報を説明するデータの集合です。オプティマイザーのコスト モデルは、クエリに含まれるテーブル、列、述語、その他のオブジェクトの統計情報に依存してプランを選択します。オプティマイザーは統計情報を使用してプランの選択を最適化できるため、コスト モデルで統計情報が選択されます。計画を最適に実行するための鍵となります。

統計情報には、テーブルの統計情報(Table Level Statistics)とカラムの統計情報(Column Level Statistics)の2種類があります。各データベースは、以下に挙げる統計情報をすべて収集しているわけではなく、各社の実情に応じて収集します。

1. テーブルレベルの統計

  • テーブルの基本情報

  • テーブルの統計情報の種類 (情報レベルは GLOBAL、PARTITION、SUBPARTITION に分かれています)

  • テーブル内の行数

  • 表所占用的宏块

  • テーブルが占有するマイクロブロックの数

  • テーブルの平均行長

  • テーブルの統計を収集する時間

  • テーブルの統計がロックされているかどうか

2. 列レベルの統計

  • カラムの基本情報 (tenant_id、table_id、partition_id、column_id を含む)

  • 列の統計情報の種類 (情報レベルは GLOBAL、PARTITION、SUBPARTITION に分かれています)

  • 個別値の数 NDV(個別値の数)

  • 列内の NULL 値の数

  • 列の最大値と最小値

  • 列のサンプリングされたデータ サイズ

  • 列のヒストグラムの密度

  • 列のヒストグラム バケットの数

  • ヒストグラムの種類(頻度ヒストグラム/輪郭ヒストグラム/TopKヒストグラム/混合ヒストグラム)

通常の統計情報では、CBO  は、ターゲット列データがその最小値と最大値の間で均等に分布していると仮定します。これは、次のことに基づいています。推定された条件選択率と結果セットのカーディナリティに基づいて実行計画を選択します。しかし実際には、一部のデータが均等に分散されていないことは明らかで、いわゆる「データ スキュー」が発生します。この時点で生成される実行計画は最適ではない可能性が高く、不適切な実行計画が生成される可能性もあります。

ヒストグラムの導入は、データの偏りの問題を解決するために行われます。ヒストグラムは、列内のデータの分布を詳細に示す特別なタイプの列統計です。ヒストグラムによって情報が収集されると、CBO は列が均等に分散されているとは考えなくなり、実際の状況に基づいて条件付き選択率と結果セットのカーディナリティを推定し、正しい実行計画を選択できるようになります。

2. 共通統計情報ヒストグラムモデル

1. 頻度ヒストグラム

列に含まれる個別の値の数、データ ディクショナリに保存されるレコードの数。エンドポイント値はこれらの個別の値を記録し、エンドポイント番号はこの個別の値までのレコードの合計数を記録します。このとき、エンドポイント番号は累積値となるため、あるレコードのエンドポイント番号から前のレコードのエンドポイント番号を引くことで、このレコードのエンドポイント値に相当するレコード数を求めることができます。頻度ヒストグラムは一般に、個別の値が比較的少ないテーブルに適しています。ヒストグラム バケットの数 >= NDV (個別値の数)、つまり、ヒストグラム内のバケットの数が個別の値の数以上です。コラムに。

2. 輪郭ヒストグラム

このタイプのヒストグラムの場合、Oracle はまずターゲット表内のすべてのレコードをターゲット列に従って小さいものから大きいものにソートし、次にレコードの総数を使用するバケットの数で割って、ソートする必要があるレコードを決定します。各Bucket.番号に記載してください。このとき、エンドポイント番号には、0 から N までのバケット番号が記録されます。バケットNo.0に対応するエンドポイント値は対象カラムの最小値を記録し、他のバケットに対応するエンドポイント値はこのバケットまでの対象カラムの最大値を記録します。

スペースを節約するために、Oracle はエンドポイント番号のみが異なり、同じエンドポイント値を持つ隣接するレコードをデータ ディクショナリにマージして保存します。エンドポイント番号=2、3のバケットの対応するエンドポイント値が両方ともPの場合、エンドポイント番号=3、エンドポイント値=Pのみがデータディクショナリに記録されます。そのため、Height Balanced タイプのヒストグラム データ ディクショナリのエンドポイント番号が不連続になる可能性があります。

この組み合わせは、データ ディクショナリのエンドポイント値に記録されます。Oracle ではこれをポピュラー値と呼びます。明らかに、人気のある値レコードのエンドポイント番号値と前のレコードのエンドポイント番号値の差が大きいほど、ターゲット列内の人気のある値の割合が大きくなり、対応するカーディナリティも大きくなります。人気の価値の理由です。

3. Top-k ヒストグラム

頻度ヒストグラムの変形で、k 個のヒストグラムでカバーされるデータの割合が特定のしきい値を超える状況を対象とします。まれに発生する個別の値はヒストグラムでは無視されます。

4. 混合ヒストグラム

ハイブリッド ヒストグラムは、高さベースのヒストグラムと頻度ヒストグラムの特性を組み合わせたものですが、頻度ヒストグラムや Top-k ヒストグラムとの違いは、バケットに複数の異なる値が含まれる場合があり、収集されたデータ ボリュームが次のようにセグメント化されることです。バケットの数に応じて、各セグメント内のすべてのデータが対応するバケットに配置されるため、より少ないバケットを使用して、より大量のデータのデータ分散を記述することができます。バケット内の最大値が使用されます。 endpoint_value として、endpoint_value の頻度を記録する endpoint_repeat_cnt がもう 1 つあります。この方法により、オプティマイザは特定の状況においてより適切な選択性推定値を取得できるようになります。

現在、単純な等高ヒストグラムがデータベースで使用されることはほとんどありません。多くの最適化ソリューションは等高ヒストグラムに基づいており、ホール (特定のしきい値を超える非連続値の区間はホールとみなされます)、高頻度の値、およびホールを追加しています。 2 番目に高い頻度値は、各値が 1 つの間隔にのみ現れることを保証する、ほぼ同じ高さのヒストグラムで表されます。

さまざまなシナリオでの頻度ヒストグラム、Top-k ヒストグラム、および混合ヒストグラムの使用ロジックは次のとおりです。

 

ヒストグラム情報列のデータ分布が偏っている場合、単一テーブルの結果セット サイズの予測では比較的正確な結果が得られますが、関連するクエリを実行するときに、関連する結果セットのサイズを正確に判断できません。

関連クエリの場合、結果セットのサイズを決定する別の方法、Count-Min Sketch があります。これは、等価クエリ、結合サイズの推定などを処理できるデータ構造であり、強力な精度保証を提供できます。 2003 年に「改良されたデータ ストリームの概要: カウントミニ スケッチとそのアプリケーション」で導入されて以来、作成と使用が簡単であるため、広く使用されるようになりました。

Count-Min Sketch は d*w カウント配列を維持します。値ごとに、d 個の独立したハッシュ関数を使用してそれを各行の列にマップし、それに応じてこれらの d 位置のカウント値が変更されます。

このように、値が何回出現するかをクエリする場合でも、各行のマッピングされた位置を見つけるために d ハッシュ関数が使用され、これらの d 値の最小値が推定値として取得されます。

KaiwuDB  によって提供される列レベルの統計情報には、行数、異なる値の数、NULL 値の数などが含まれます。 列のデータが不均一に分布している場合には、ヒストグラム統計も提供できます。 KaiwuDB のヒストグラムも近似等高さヒストグラムです。列のさまざまな値が 200 以下であるシナリオでは、頻度と同様の効果を提供できます。高頻度の値も表すことができますが、現在の HyperLoglog ベースのアルゴリズムは、間隔上の個別の値の数を処理する精度が低くなります。

バケットが 200 以下の場合:

バケットが 200 を超える場合:

1 から 10000 までの 100,000 個のランダムな値を挿入し、重複する値 201、202、203、204、205、206 をすべて 1000 より大きくし、400 と 2000 の間の値を削除して、統計とヒストグラムを作成します。

3. まとめ

コストベースの最適化モデル (CBO) は、現在リレーショナル データベースの最も主流の最適化モデルであり、統計情報が基礎となります。 CBO は、ある程度、統計情報の正確さが、CBO が最適な実行計画を作成できるかどうかの鍵となります。統計情報の収集は主にテーブルレベルの統計情報と列レベルの統計情報に基づいており、列上のデータ分布が不均一な場合には特にヒストグラム情報の精度が重要となり、現在は等高線ヒストグラムや度数などの手法が主流となっている。ヒストグラム、および対応する変形ヒストグラム。

また、最適な実行計画を作成するには統計情報の精度が鍵となりますが、統計情報の計算にもシステムリソースが消費されます。一般に、同じ戦略での計算に関与するデータが増えるほど、統計情報はテーブル上のデータの真の分布をより正確に記述することができますが、その代償として、より多くのリソースが消費され、計算時間が長くなります。

通常、テーブル上のデータをサンプリングして統計情報を収集するか、統計情報の収集効率を向上させるために統計情報を段階的に収集します。計算に含まれるデータが決定されると、データ分布をより効果的に説明できるように、統計情報を収集するためにどの戦略を使用するかを決定するために大まかな推定が使用されます。

データが頻繁に変更されるテーブルの場合、統計情報の有効性が重視されます。統計情報研究では、統計情報の妥当性をいかに効果的に判断するか、データの変更によって統計情報を修正するかが難しい点となります。さらに、一部の統合マルチモード データベース内の一部の特殊なテーブルについては、テーブル自体の特性に基づいて新しい統計情報戦略を試すことができます。たとえば、時系列データ テーブルでは、テーブル上のデータに一定の規則性があり、一部のテーブルにはダウンサンプリング ルールが追加されており、ダウンサンプリング ルールに基づいて新しい戦略で統計情報を生成または置き換えることができます。

つまり、従来のリレーショナル データベースにとって、統計情報の収集は不可欠な部分であり、統計情報の品質は実行計画の品質に直接影響します。統合データベース内の新しいテーブルの場合、統計情報の効果を達成するための新しい戦略に基づいてテーブルのデータ分布を統計的に推定できます。

 

SenseTime 創設者、Tang Xiaoou 氏が 55 歳で死去 2023 年、PHP は停滞 Wi-Fi 7 が完全に利用可能になる2024 年初頭にデビュー、Wi-Fi 6 の 5 倍高速 Hongmeng システムが独立しつつあり、多くの大学が「Hongmeng クラス」を設立 Zhihui Jun の新興企業が借り換え、金額は 6 億元を超え、事前評価額は 35 億元 Quark Browser PC 版が内部テストを開始 AI コード アシスタントは人気があり、プログラミング言語のランキングはすべてです できることは何もありません Mate 60 Pro の 5G モデムと無線周波数技術ははるかに先を行っています MariaDB が SkySQL を分割し、確立されました独立した企業として<​​/span> Xiaomi、Yu Chengdong 氏の Huawei からの「キールピボット」盗作声明に対応
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/5148943/blog/10123199