読み取り専用分析エンジンにおいてSQL実行で最適な結果を得るには、テーブルオブジェクトの基本統計情報収集が必要です。統計情報の収集が完了したテーブルに対して初めて、システムはユーザーが実行するSQLに合理的な実行計画を高精度で推薦できます。
統計情報の概要
統計情報(Statistics)は、データベースオブジェクトのデータ特性と分布に関する情報です。データベースは統計情報を活用することで、より正確なプランコストを算出可能となり、プラン選択の最適化が実現します。統計情報の種類には、テーブルの行数、列の異なる値の数(number of distinct、略称NDV)、列のヒストグラムなどが含まれます。統計情報の収集はデータベースオブジェクトのスキャンと取得を伴い、収集された統計情報はシステムのデータ辞書に格納されます。さらに、システムは統計情報のキャッシュをローカルで維持し、オプティマイザの統計情報アクセス効率を向上させます。同時に、統計情報の収集と利用においては、以下の2点に留意する必要があります:
統計情報の正確性はオプティマイザの意思決定にとって非常に重要です。したがって、統計情報を定期的に更新・保守することは、データベースのパフォーマンスを維持するカギとなります。
統計情報の収集はデータベースのパフォーマンスにある程度の影響を与える可能性があります。これはデータベースオブジェクトのスキャンと分析を伴うためです。したがって、統計情報を収集する際には、パフォーマンスと統計情報の正確性のバランスを考慮する必要があります。
要するに、統計情報はデータベース管理システムにおいて極めて重要な役割を果たしており、データベースオブジェクトに関する重要な情報を提供することで、オプティマイザがより適切な判断を下すことを支援し、クエリ性能およびデータベースシステム全体の効率性向上に貢献します。
説明:
バージョン2.2410.1.0以降ではランダムサンプリング機能がサポートされています。この機能はTableScanオペレータが指定したサンプリング率に基づいてランダムサンプリングを実行可能です。同時にブロック単位のサンプリングをサポートし、設定した割合に基づいた統計情報収集が行えるため、統計情報収集プロセスにおける全表スキャンによるオーバーヘッドを大幅に削減できます。
テーブルの統計情報問い合わせ
SHOW TABLE STATS [ShowLikeOrWhere];
クエリ結果フィールドの説明は以下の通りです:
|
db_name | データベースの名前。 |
table_name | テーブルの名前。 |
partition_name | パーティションの名前。 |
update_time | 収集の更新時間。 |
modify_count | テーブルにおける変更に関わる行数。 |
row_count | テーブルの総行数。 |
sample_size | 基本統計情報収集のサンプリング行数。 |
testデータベース内のt1テーブルの統計情報をクエリ実行する例は以下の通り:
SHOW TABLE STATS WHERE db_name='test' AND table_name='t1';
統計情報収集
現在、読み取り専用分析エンジンでは二つの異なる統計情報収集方式をサポートしています:
自動収集
バージョン2.2410.1.0以降では、読み取り専用分析エンジンのコアが、列ストレージへのデータロード時に動的サンプリングと統計情報の自動収集を行う機能をサポートしています。ユーザーは手動で収集を行わなくても、該当するデータベーステーブルの統計情報を生成することができます。
注意:
デフォルトの自動統計情報収集にはテーブルのヒストグラム情報が含まれません。テーブルのヒストグラム情報を収集する必要がある場合は、手動で収集を行ってください。
手動収集
指定テーブルオブジェクトの最新統計情報を手動で取得する必要がある場合は、MySQLクライアントを使用して読み取り専用分析エンジンインスタンスにログインし、以下の文を実行することで統計情報を収集できます:
ANALYZE TABLE <テーブル名> [ ALL COLUMNS| COLUMNS IdentList [WITH NUM BUCKETS]];
ALL COLUMNSは、すべての列が指定された動作に従って統計情報を収集することを指定します。例えば、すべての列でヒストグラムを収集するよう指定する場合などです。
ALL COLUMNSを指定しない場合、デフォルトの収集戦略が使用されます。つまり、列の基本統計情報を収集しますが、ヒストグラム情報は含まれません。
COLUMNS IdentList は、指定された列の関連統計情報を収集する必要があることを意味します。例:COLUMN c1,c2,c3。
NUM BUCKETSは等高ヒストグラムまたはTOPNを収集するバケット数を指定します。範囲は[1,1024]であり、バケット数を1に指定した場合は等高ヒストグラムまたはTOPNを収集しないことを意味します。
使用例
デフォルト戦略を使用してtestデータベース内のt1の統計情報を収集:
testデータベース内のt1テーブルのすべての列のヒストグラム統計情報を収集するよう指定:
ANALYZE TABLE t1 ALL COLUMNS WITH 256 BUCKETS;
testデータベース内のt1テーブルのc1、c2列の統計情報ヒストグラムを収集するよう指定:
ANALYZE TABLE t1 COLUMNS c1,c2 WITH 256 BUCKETS;
データベースレベルの統計情報収集を手動で指定します。
テーブルの数が多い場合、直接databaseに対して統計情報収集を実行できます。収集戦略の意味はテーブルレベルと同じであり、収集の原則はできる限りdatabase配下の全テーブルを収集することです。たとえ一部のテーブル収集が失敗しても、他のテーブルの収集には影響しません。
ANALYZE DATABASE DBNameList [ ALL COLUMNS| COLUMNS IdentList [WITH NUM BUCKETS]];