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

【データベース】統計情報の更新【第3回】

Avatar for シノラー シノラー
January 13, 2025
4

 【データベース】統計情報の更新【第3回】

Avatar for シノラー

シノラー

January 13, 2025
Tweet

More Decks by シノラー

Transcript

  1. 目次 1. クエリが実行される流れ 2. 更新のタイミングとトリガー 3. 手動 vs 自動の決定 4.

    更新頻度の最適化 5. 更新失敗時のトラブルシューティング 6. 各製品のメンテナンスツール(コマンド) 7. まとめ
  2. 1.クエリが実行される流れ SELECT * FROM 購入明細 WHERE CUSTOMER_ID = ‘C’ パーサ

    (構文解析) リライタ (書換) プランナ (オプティマイザ) エグゼ キュータ 実行結果 きゃ 実行 計画 統計 情報 適切な実行計画がない場合 統計情報を使用し 実行計画を作成 テーブル 実行計画に従い データアクセス 適切な 実行計画を取得 しに行く
  3. 1.クエリが実行される流れ • 統計情報とは ◦ 実行計画を作成するための材料 ◦ データの量や分布に関するメタ情報(ヒストグラム) ▪ 最大値 ▪

    最小値 ▪ NULLの数 ▪ 重複の値とその数 ▪ 等 ◦ 統計情報が最新なら正確な実行計画を作成できる ◦ 古くなるとパフォーマンスに悪影響を与える
  4. 2.更新のタイミングとトリガー • 更新のタイミング ◦ 定期的な更新 ▪ 夜間バッチ処理後やメンテナンスウィンドウ中に実施。 ◦ 大量データの変更後 ▪

    データの大幅な変更があった場合に更新。 ◦ オンデマンド更新 ▪ パフォーマンス問題が発生した際に即時更新。 • トリガー(更新のきっかけ) ◦ データ変更割合 ▪ テーブルの10%以上が変更されたときに自動更新。 ◦ イベント発生後 ▪ バッチ処理やデータ移行後に手動で更新。 ◦ パフォーマンス低下時 ▪ クエリパフォーマンスが低下した際に手動で更新。
  5. 3.手動 vs 自動の決定 • 自動更新 ◦ メリット ▪ 定期的に自動更新、管理の手間が少ない ◦

    選択基準 ▪ データ変更が少なく、システム全体を自動管理したい場合 • 手動更新 ◦ メリット ▪ 柔軟なタイミングで更新、特定テーブルの優先対応が可能 ◦ 選択基準 ▪ バッチ処理後や業務中の即応対応が必要な場合 • 手動と自動の併用 ◦ 通常は自動更新、重要な場面では手動更新でパフォーマンス最適化
  6. 3.手動 vs 自動の決定 • 各RDSの自動更新の有無と発動条件 ◦ Amazon RDS for Oracle

    ▪ 自動更新あり ▪ デフォルトで10%以上のデータ変更、夜間に自動更新 データの追加 ・更新 夜間にトリ ガー条件 確認 トリガー条件 10% 10%以上変更が あるか? リソース使 用状況確 認 負荷が高すぎない か? 自動更新 開始 統計情報更新中 最新の統計情報 利用可能 更新完了 パフォーマン ス改善 SUCCESS
  7. 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%以上の行が変更されたときに自動更新
  8. 4.更新頻度の最適化 統計情報の更新タイミングと頻度を最適化することでシステムパフォーマンスを維持。 リソース消費を抑えながらクエリパフォーマンスを向上させ、システムの安定性を確保。 • 頻繁なデータ更新が行われる場合 ◦ 統計情報の更新頻度を高め、クエリパフォーマンスの低下を防ぐ。 • 少ないデータ更新が行われる場合 ◦

    統計情報の更新頻度を下げてリソース消費を抑える。 • リソース負荷を考慮する ◦ バッチ処理後やシステムに余裕がある時間に統計情報を更新。 ◦ 他の業務に影響を与えないようにする。 • パフォーマンスモニタリングを監視し任意のタイミングで最適化 ◦ クエリ実行計画やモニタリングツールを使用し、統計情報の更新が適切に行われている か確認。必要に応じて更新頻度を調整する。
  9. 5.更新失敗時のトラブルシューティング 統計情報の更新が失敗すると、 システムパフォーマンスの低下や非効率なクエリ実行が発生する可能性がある。 • エラーログの確認 ◦ エラー内容を特定し、問題を把握。 • リソース確認 ◦

    CPU、メモリ、ディスク容量不足の確認。 • ロック確認 ◦ テーブルロックが原因であれば解除。 • ディスクスペース確認 ◦ 必要な容量が確保されているか確認。 • 手動で再実行 ◦ 自動更新が失敗した場合、手動で更新。 • 通知設定 ◦ 更新失敗時の通知を設定し、早期対応。
  10. 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; -- 特定のテーブルの統計情報を更新