Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【データベース】統計情報の更新【第3回】
Search
Shin
January 13, 2025
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【データベース】統計情報の更新【第3回】
Shin
January 13, 2025
More Decks by Shin
See All by Shin
【DWH】Snowflakeのクラスタリングキーについて
sk8er_boi_shin
0
24
【DWH】Snowflakeで等価条件なのにコストが変わる理由
sk8er_boi_shin
0
27
【DWH】 PostgreSQLとSnowFlake_設計思想とデータ管理の違い
sk8er_boi_shin
0
34
【PostgreSQL】メンテナンス系コマンドの種類
sk8er_boi_shin
0
38
【データベース】統計情報と物理順序
sk8er_boi_shin
0
82
【データベース】RedisとPostgreSQL
sk8er_boi_shin
0
210
【データベース】統計情報と単一カラムのヒストグラム
sk8er_boi_shin
0
38
【データベース】制約の種類と速度検証
sk8er_boi_shin
0
42
【データベース】インデックスの種類と役割
sk8er_boi_shin
0
28
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
Statistics for Hackers
jakevdp
799
230k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The SEO Collaboration Effect
kristinabergwall1
1
590
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Believing is Seeing
oripsolob
1
250
Transcript
【データベース】 統計情報の更新方法
目次 1. クエリが実行される流れ 2. 更新のタイミングとトリガー 3. 手動 vs 自動の決定 4.
更新頻度の最適化 5. 更新失敗時のトラブルシューティング 6. 各製品のメンテナンスツール(コマンド) 7. まとめ
1.クエリが実行される流れ SELECT * FROM 購入明細 WHERE CUSTOMER_ID = ‘C’ パーサ
(構文解析) リライタ (書換) プランナ (オプティマイザ) エグゼ キュータ 実行結果 きゃ 実行 計画 統計 情報 適切な実行計画がない場合 統計情報を使用し 実行計画を作成 テーブル 実行計画に従い データアクセス 適切な 実行計画を取得 しに行く
1.クエリが実行される流れ • 実行計画とは ◦ DBMSがクエリを最適に実行するための手順書 ▪ どのインデックスを使用するか ▪ どのテーブルをどの順番で結合するか ▪
テーブルスキャンorインデックススキャン ▪ 等
1.クエリが実行される流れ • 統計情報とは ◦ 実行計画を作成するための材料 ◦ データの量や分布に関するメタ情報(ヒストグラム) ▪ 最大値 ▪
最小値 ▪ NULLの数 ▪ 重複の値とその数 ▪ 等 ◦ 統計情報が最新なら正確な実行計画を作成できる ◦ 古くなるとパフォーマンスに悪影響を与える
2.更新のタイミングとトリガー • 更新のタイミング ◦ 定期的な更新 ▪ 夜間バッチ処理後やメンテナンスウィンドウ中に実施。 ◦ 大量データの変更後 ▪
データの大幅な変更があった場合に更新。 ◦ オンデマンド更新 ▪ パフォーマンス問題が発生した際に即時更新。 • トリガー(更新のきっかけ) ◦ データ変更割合 ▪ テーブルの10%以上が変更されたときに自動更新。 ◦ イベント発生後 ▪ バッチ処理やデータ移行後に手動で更新。 ◦ パフォーマンス低下時 ▪ クエリパフォーマンスが低下した際に手動で更新。
3.手動 vs 自動の決定 • 自動更新 ◦ メリット ▪ 定期的に自動更新、管理の手間が少ない ◦
選択基準 ▪ データ変更が少なく、システム全体を自動管理したい場合 • 手動更新 ◦ メリット ▪ 柔軟なタイミングで更新、特定テーブルの優先対応が可能 ◦ 選択基準 ▪ バッチ処理後や業務中の即応対応が必要な場合 • 手動と自動の併用 ◦ 通常は自動更新、重要な場面では手動更新でパフォーマンス最適化
3.手動 vs 自動の決定 • 各RDSの自動更新の有無と発動条件 ◦ Amazon RDS for Oracle
▪ 自動更新あり ▪ デフォルトで10%以上のデータ変更、夜間に自動更新 データの追加 ・更新 夜間にトリ ガー条件 確認 トリガー条件 10% 10%以上変更が あるか? リソース使 用状況確 認 負荷が高すぎない か? 自動更新 開始 統計情報更新中 最新の統計情報 利用可能 更新完了 パフォーマン ス改善 SUCCESS
3.手動 vs 自動の決定 • 各RDSの自動更新の有無と発動条件 ◦ Amazon RDS for PostgreSQL
▪ 自動更新あり ▪ テーブルの20%以上変更で自動更新 ◦ Amazon RDS for MySQL/MariaDB ▪ 自動更新あり ▪ テーブル操作時に統計情報を自動更新 ◦ Amazon RDS for SQL Server ▪ 自動更新あり ▪ 20% + 500行以上変更で自動更新 ◦ Azure SQL Database ▪ 自動更新あり ▪ SQL Server同様、20% + 500行変更で自動更新 ◦ PostgreSQL ▪ 自動更新あり ▪ 発動条件: テーブルの20%以上の行が変更されたときに自動更新
4.更新頻度の最適化 統計情報の更新タイミングと頻度を最適化することでシステムパフォーマンスを維持。 リソース消費を抑えながらクエリパフォーマンスを向上させ、システムの安定性を確保。 • 頻繁なデータ更新が行われる場合 ◦ 統計情報の更新頻度を高め、クエリパフォーマンスの低下を防ぐ。 • 少ないデータ更新が行われる場合 ◦
統計情報の更新頻度を下げてリソース消費を抑える。 • リソース負荷を考慮する ◦ バッチ処理後やシステムに余裕がある時間に統計情報を更新。 ◦ 他の業務に影響を与えないようにする。 • パフォーマンスモニタリングを監視し任意のタイミングで最適化 ◦ クエリ実行計画やモニタリングツールを使用し、統計情報の更新が適切に行われている か確認。必要に応じて更新頻度を調整する。
5.更新失敗時のトラブルシューティング 統計情報の更新が失敗すると、 システムパフォーマンスの低下や非効率なクエリ実行が発生する可能性がある。 • エラーログの確認 ◦ エラー内容を特定し、問題を把握。 • リソース確認 ◦
CPU、メモリ、ディスク容量不足の確認。 • ロック確認 ◦ テーブルロックが原因であれば解除。 • ディスクスペース確認 ◦ 必要な容量が確保されているか確認。 • 手動で再実行 ◦ 自動更新が失敗した場合、手動で更新。 • 通知設定 ◦ 更新失敗時の通知を設定し、早期対応。
6.各製品のメンテナンスツール(コマンド)AmazonRDS • PostgreSQL ◦ ANALYZE ▪ 例:ANALYZE; -- 全テーブルの統計情報を更新 ▪
例:ANALYZE my_table; -- 特定のテーブルを更新 • MySQL / MariaDB ◦ ANALYZE TABLE ▪ 例:ANALYZE TABLE my_table; -- 特定のテーブルの統計情報を更新 • Oracle ◦ DBMS_STATS ▪ 例:BEGIN DBMS_STATS.GATHER_TABLE_STATS('my_schema', 'my_table'); END; ▪ ※OracleのANALYZEは9iから非推奨。 • SQL Server / Azure SQL Database ◦ UPDATE STATISTICS ▪ 例:UPDATE STATISTICS my_table; -- 特定のテーブルの統計情報を更新
7.まとめ • 統計情報の更新は、クエリパフォーマンスとシステム安定性の 維持に重要。 • 自動更新と手動更新を使い分けることで、柔軟で効率的な運 用が可能。 • 実務での自動化タスクにより、SQL遅延が大幅に改善。 •
今後も業務に応じた最適な運用方法を検討していく。