Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【データベース】統計情報の収集【第2回】

シノラー
September 14, 2024

 【データベース】統計情報の収集【第2回】

シノラー

September 14, 2024
Tweet

More Decks by シノラー

Other Decks in Programming

Transcript

  1. 1.統計情報とは • データの量や分布に関するメタ情報(ヒストグラム) ◦ 最大値 ◦ 最小値 ◦ NULLの数 ◦

    重複の値とその数 ◦ 等 • 統計情報が最新であれば効率よくクエリを実行できる • 古くなるとパフォーマンスに悪影響を与える  ⇨以降のスライドでは統計情報を収集する方法を解説
  2. 2.サンプリング vs 完全スキャンの特性 • サンプリング ◦ 特徴 ▪ データの一部だけを収集し、低コストかつ高速に統計情報を生成可能。 ▪

    精度が完全スキャンに比べて低くなる ことがある。 ▪ ヒストグラム(重複度や最大最小値等)に依存するため継続した検証が必要 。 ◦ 適した状況 ▪ 大規模なデータベースや、リアルタイム性が求められるシステム。 ▪ 頻繁に統計情報を更新 する必要がある場合に有効。 • 完全スキャン ◦ 特徴 ▪ データ全体をスキャンして統計情報を収集するため非常に正確。 ▪ 処理負荷が大きく、大規模なデータベースでは時間がかかる。 ◦ 適した状況 ▪ 中小規模のデータベースや、クエリのパフォーマンスが非常に重要なシステム。 ▪ 正確な統計情報が必要 な場合に適している。
  3. 3.サンプリングと完全スキャンの選択基準 • データ量 ◦ サンプリング ▪ データが非常に大規模で、全体をスキャンするのが非効率な場合。 ◦ 完全スキャン ▪

    データ量が少ない場合や、中規模データベースで正確さが重視される場合。 • データの変動頻度 ◦ サンプリング ▪ データが頻繁に更新されるシステム。 ◦ 完全スキャン ▪ データの更新があまり頻繁でない場合や、構造が安定している場合。
  4. 3.サンプリングと完全スキャンの選択基準 • クエリパフォーマンスの重要度 ◦ サンプリング ▪ すべてのクエリで極端に高いパフォーマンスが求められない場合。 ◦ 完全スキャン ▪

    特定のクエリや業務で非常に高いパフォーマンスが求められる場合。 • データの分布 ◦ サンプリング ▪ データの分布が均一である場合は、サンプリングでも統計情報が十分に正確になる。 ◦ 完全スキャン ▪ データに偏りがある場合 (各カラムの一意性が高い場合等 )は完全スキャンが必要。
  5. 3.サンプリングと完全スキャンの選択基準 • サンプリングを選ぶケース ◦ リアルタイム性が求められる ▪ 例: eコマース、SNSフィード ▪ 理由:

    頻繁なデータ更新で統計情報の迅速な更新が必要。 ◦ 大規模データベース ▪ 例: ビッグデータ分析、データウェアハウス ▪ 理由: データ量が膨大な場合、完全スキャンが非現実的。 • 完全スキャンを選ぶケース ◦ クエリパフォーマンスが非常に重要 ▪ 例: 金融取引システム ▪ 理由: 統計情報の正確さがパフォーマンスに直結。 ◦ 中小規模データベース ▪ 例: 社内システム、小規模業務アプリケーション ▪ 理由: データ量が少なく、完全スキャンの負荷が軽い。
  6. 5.統計情報が不適切な場合のリスク • 確認内容(処理時間を主に確認) ◦ サンプリング ▪ 観点:サンプリング率何%で試験実施前の処理時間に近づくか • 試験実施前(統計情報が最新) •

    全データの12.5%更新後 ◦ 10%サンプリングし実行計画を取得 • 全データの12.5%更新後 ◦ 15%サンプリングし実行計画を取得 • 全データの12.5%更新後 ◦ 20%サンプリングし実行計画を取得 ◦ 完全スキャン ▪ 観点:更新後完全スキャンで試験実施前の処理時間に近づくか • 試験実施前(統計情報が最新) • 全データの12.5%更新し実行計画を取得 • 完全スキャンを実施し実行計画を取得
  7. 5.統計情報が不適切な場合のリスク • 環境 ◦ データベース Postgresql ◦ テーブル名 PEOPLE ◦ データ数 400万件 ◦

    index ▪ index名:Idx_people_duplication_forty_type ▪ 指定カラム: duplication_forty_type ◦ カラム ▪ duplication_forty_type(INTEGER型)(重複のあるデータ) • 値は0~39の40種類 • 1種類あたり10万件(全体の2.5%) ◦ 検証対象のクエリ ▪ Select * from people where duplication_forty_type = 1;
  8. 5.統計情報が不適切な場合のリスク • サンプリング ◦ 全データの12.5%更新後 UPDATE public.people SET duplication_forty_type =

    duplication_forty_type + 100 WHERE duplication_forty_type IN(5, 6, 7, 8, 9); 実行計画を生成 するまでの時間 実行計画に基づい てクエリが実行され る時間
  9. 6.各製品ごとに統計情報が古いとされる基準 • Oracle ◦ テーブルのデータが10%以上更新されると、統計情報が古いと見なされる。 • SQL Server ◦ 500行

    + 総行数の20%が更新されると古いと見なされる。 • PostgreSQL ◦ 20%のデータが更新されると、統計情報が古いと見なされる。 • MySQL/MariaDB ◦ 統計情報は自動で更新され、通常は 10%程度の更新が基準。