Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【データベース】統計情報の収集【第2回】
Search
Shin
September 14, 2024
Programming
54
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【データベース】統計情報の収集【第2回】
使用したデータは以下
https://www.notion.so/85c3816ea99840249be0b9104f15ab04
Shin
September 14, 2024
More Decks by Shin
See All by Shin
【DWH】Snowflakeのクラスタリングキーについて
sk8er_boi_shin
0
21
【DWH】Snowflakeで等価条件なのにコストが変わる理由
sk8er_boi_shin
0
19
【DWH】 PostgreSQLとSnowFlake_設計思想とデータ管理の違い
sk8er_boi_shin
0
29
【PostgreSQL】メンテナンス系コマンドの種類
sk8er_boi_shin
0
30
【データベース】統計情報と物理順序
sk8er_boi_shin
0
74
【データベース】RedisとPostgreSQL
sk8er_boi_shin
0
170
【データベース】統計情報と単一カラムのヒストグラム
sk8er_boi_shin
0
34
【データベース】制約の種類と速度検証
sk8er_boi_shin
0
39
【データベース】インデックスの種類と役割
sk8er_boi_shin
0
24
Other Decks in Programming
See All in Programming
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
バグを直したら useEffect が消えた
colorful12
3
840
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.9k
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
140
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
Deep dive into the select statement (GopherCon UK)
jespino
0
170
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
220
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
430
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
230
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
210
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
830
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
YesSQL, Process and Tooling at Scale
rocio
174
15k
We Are The Robots
honzajavorek
0
340
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Typedesign – Prime Four
hannesfritz
42
3.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
30 Presentation Tips
portentint
PRO
1
390
Odyssey Design
rkendrick25
PRO
2
800
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Transcript
【データベース】 統計情報の収集
目次 1. 統計情報とは 2. サンプリングと完全スキャンの特性 3. サンプリングと完全スキャンの選択基準 4. サンプリング又は完全スキャンを使用しているサービス 5.
【検証】統計情報が不適切な場合のリスク 6. 各製品ごとに統計情報が古いとされる基準 7. まとめ
1.統計情報とは • データの量や分布に関するメタ情報(ヒストグラム) ◦ 最大値 ◦ 最小値 ◦ NULLの数 ◦
重複の値とその数 ◦ 等 • 統計情報が最新であれば効率よくクエリを実行できる • 古くなるとパフォーマンスに悪影響を与える ⇨以降のスライドでは統計情報を収集する方法を解説
2.サンプリング vs 完全スキャンの特性 • サンプリング ◦ 特徴 ▪ データの一部だけを収集し、低コストかつ高速に統計情報を生成可能。 ▪
精度が完全スキャンに比べて低くなる ことがある。 ▪ ヒストグラム(重複度や最大最小値等)に依存するため継続した検証が必要 。 ◦ 適した状況 ▪ 大規模なデータベースや、リアルタイム性が求められるシステム。 ▪ 頻繁に統計情報を更新 する必要がある場合に有効。 • 完全スキャン ◦ 特徴 ▪ データ全体をスキャンして統計情報を収集するため非常に正確。 ▪ 処理負荷が大きく、大規模なデータベースでは時間がかかる。 ◦ 適した状況 ▪ 中小規模のデータベースや、クエリのパフォーマンスが非常に重要なシステム。 ▪ 正確な統計情報が必要 な場合に適している。
3.サンプリングと完全スキャンの選択基準 • データ量 ◦ サンプリング ▪ データが非常に大規模で、全体をスキャンするのが非効率な場合。 ◦ 完全スキャン ▪
データ量が少ない場合や、中規模データベースで正確さが重視される場合。 • データの変動頻度 ◦ サンプリング ▪ データが頻繁に更新されるシステム。 ◦ 完全スキャン ▪ データの更新があまり頻繁でない場合や、構造が安定している場合。
3.サンプリングと完全スキャンの選択基準 • クエリパフォーマンスの重要度 ◦ サンプリング ▪ すべてのクエリで極端に高いパフォーマンスが求められない場合。 ◦ 完全スキャン ▪
特定のクエリや業務で非常に高いパフォーマンスが求められる場合。 • データの分布 ◦ サンプリング ▪ データの分布が均一である場合は、サンプリングでも統計情報が十分に正確になる。 ◦ 完全スキャン ▪ データに偏りがある場合 (各カラムの一意性が高い場合等 )は完全スキャンが必要。
3.サンプリングと完全スキャンの選択基準 • サンプリングを選ぶケース ◦ リアルタイム性が求められる ▪ 例: eコマース、SNSフィード ▪ 理由:
頻繁なデータ更新で統計情報の迅速な更新が必要。 ◦ 大規模データベース ▪ 例: ビッグデータ分析、データウェアハウス ▪ 理由: データ量が膨大な場合、完全スキャンが非現実的。 • 完全スキャンを選ぶケース ◦ クエリパフォーマンスが非常に重要 ▪ 例: 金融取引システム ▪ 理由: 統計情報の正確さがパフォーマンスに直結。 ◦ 中小規模データベース ▪ 例: 社内システム、小規模業務アプリケーション ▪ 理由: データ量が少なく、完全スキャンの負荷が軽い。
3.サンプリングと完全スキャンの選択基準 • そもそもサンプリングを多用するべきか? ◦ 頻繁にサンプリングが必要ならRDS以外も検討 ▪ 理由: RDSは自動化が便利だが、統計情報の管理には制限がある。 ◦ 他の選択肢
▪ オンプレミスDB: より柔軟なチューニングが可能。 ▪ NoSQL: 統計情報管理が不要な場合もあり。
4.サンプリング又は完全スキャンを使用しているサービス • サンプリングを活用している可能性のある代表的なサービス ◦ Facebook ◦ Twitter (X) ◦ Instagram
• 完全スキャンを活用している可能性のある代表的なサービス ◦ Amazon ◦ Netflix ◦ Salesforce
5.統計情報が不適切な場合のリスク • 確認内容(処理時間を主に確認) ◦ サンプリング ▪ 観点:サンプリング率何%で試験実施前の処理時間に近づくか • 試験実施前(統計情報が最新) •
全データの12.5%更新後 ◦ 10%サンプリングし実行計画を取得 • 全データの12.5%更新後 ◦ 15%サンプリングし実行計画を取得 • 全データの12.5%更新後 ◦ 20%サンプリングし実行計画を取得 ◦ 完全スキャン ▪ 観点:更新後完全スキャンで試験実施前の処理時間に近づくか • 試験実施前(統計情報が最新) • 全データの12.5%更新し実行計画を取得 • 完全スキャンを実施し実行計画を取得
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;
5.統計情報が不適切な場合のリスク • サンプリング ◦ 試験実施前(統計情報が最新) サンプリングを実施し、 この処理時間に近づ けたい。
5.統計情報が不適切な場合のリスク • サンプリング ◦ 全データの12.5%更新後 UPDATE public.people SET duplication_forty_type =
duplication_forty_type + 100 WHERE duplication_forty_type IN(5, 6, 7, 8, 9); 実行計画を生成 するまでの時間 実行計画に基づい てクエリが実行され る時間
5.統計情報が不適切な場合のリスク • サンプリング ◦ 10%サンプリングし実行計画を取得 SET default_statistics_target = 10; ANALYZE
public.people; サンプリング率が不適切なため、処理時間が 増加している。
5.統計情報が不適切な場合のリスク • サンプリング ◦ 15%サンプリングし実行計画を取得 SET default_statistics_target = 15; ANALYZE
public.people; サンプリング率が不適切なため、処理時間が 大幅に増加している。
5.統計情報が不適切な場合のリスク • サンプリング ◦ 20%サンプリングし実行計画を取得 SET default_statistics_target = 20; ANALYZE
public.people; サンプリング率が適切なため、処理時間が 改善している。
5.統計情報が不適切な場合のリスク • 完全スキャン ◦ 試験実施前(統計情報が最新) 完全スキャンを実施 し、この処理時間に近 づけたい。
5.統計情報が不適切な場合のリスク • 完全スキャン ◦ 全データの12.5%更新後 UPDATE public.people SET duplication_forty_type =
duplication_forty_type + 100 WHERE duplication_forty_type IN(5, 6, 7, 8, 9);
5.統計情報が不適切な場合のリスク • 完全スキャン ◦ 完全スキャン後 SET default_statistics_target = 100; ANALYZE
public.people; 処理時間が改善している。
5.統計情報が不適切な場合のリスク • 処理時間の変化(実行計画のEXCLUSIVEを使用)
6.各製品ごとに統計情報が古いとされる基準 • Oracle ◦ テーブルのデータが10%以上更新されると、統計情報が古いと見なされる。 • SQL Server ◦ 500行
+ 総行数の20%が更新されると古いと見なされる。 • PostgreSQL ◦ 20%のデータが更新されると、統計情報が古いと見なされる。 • MySQL/MariaDB ◦ 統計情報は自動で更新され、通常は 10%程度の更新が基準。
7.まとめ • 統計情報の重要性 クエリパフォーマンス最適化には、統計情報の定期的な更新が不可欠。 • サンプリング vs 完全スキャン システム規模や要件に応じて、適切な方法を選択することが重要。