Qiita Conference 2025

鹿野壮 (@tonkotsuboy_com)

アウトプットは最強の自己投資 〜発信が人生とキャリアを変えた話〜

1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLでクエリの処理が遅い時にまずやってみること

Last updated at Posted at 2025-04-08

はじめに

PostgreSQLで実行したクエリが遅い場合に、まず実施してみる対応をまとめます。

利用場面

  • SQLの実行が遅い
  • データベースの作成・参照処理が遅い

環境

  • PostgreSQL: 15.8
    ※ この先コマンドが変わったりする可能性もあるため、バージョンも記載します。

作業内容

1. バキューム

DB全体のバキューム

VACUUM FULL VERBOSE;

VERBOSE を付けることで進捗状況を確認可能。省略可。

テーブル単位のバキューム

VACUUM table テーブル名;

説明

  • 不要タプルの領域回収 → テーブルの最適化
  • デッドタプルの影響防止 → パフォーマンス改善
  • 注意: FULL を実行するとディスク使用量の約2倍の空き容量が必要

2. インデックス再構築

DB全体でインデックス再構築

REINDEX INDEX インデックス名 VERBOSE;

VERBOSE を付けることで進捗状況を確認可能。省略可。

テーブル単位でインデックス再構築

REINDEX TABLE テーブル名;

説明

  • インデックスの断片化解消 → 検索パフォーマンス向上
  • REINDEX により最適な状態に再構築がされる

3. 統計情報更新

DB全体の統計情報更新

ANALYZE VERBOSE;

VERBOSE を付けることで進捗状況を確認可能。省略可。

テーブル単位の統計情報更新

ANALYZE テーブル名;

説明

  • 統計情報更新 → オプティマイザが正確な統計情報を基に実行計画 を作成できるようになる
  • データの追加、更新、削除が多いテーブル は定期的な ANALYZE を実施

4. 実行計画の確認

ココまでで改善できない場合は、クエリの 実行計画 を確認し、ボトルネックを特定しクエリの最適化を計る

実行計画の取得

EXPLAIN ANALYZE VERBOSE "SQL文";

VERBOSE を付けることで更に詳細な情報を出力することが可能。省略可。

説明

  • EXPLAIN ANALYZE を使うと 実際の実行時間 を取得できる
  • Index ScanSequential Scan などインデックスを活用できているか、また、結合方式などを分析することが出来る
  • 遅い部分を把握したうえで、インデックスの追加クエリの最適化 を検討を行う

5. まとめ

PostgreSQLは、バージョンが変更されると オプティマイザーの動作 が大きく変わることがあります。 そのため、これまで遅延なく動作していたクエリが バージョンアップ後に遅延 するケースが発生することがあります。

このような場合は、以下の順序で対応すると効果があることあるため、まずはやってみても良いかもしれないです。
バキューム (VACUUM FULL)
インデックス再構築 (REINDEX)
統計情報更新 (ANALYZE)
実行計画確認 (EXPLAIN ANALYZE)

もし、SQL文がわからない場合でも、実行計画(EXPLAIN ANALYZE) の結果を有識者へ展開することで何かのヒントを得ることはでき、今後のアクションなども見えてくるかと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?