広告です。クリックいただけると励みになります。

人気記事(昨日)

    2025年06月17日

    DBのVACUUMとはなんですか

    buddy-photo-pd61clsCVnY-unsplash.jpg

    質問

    DBのVACUUMとはなんですか


    解答

    「VACUUM(バキューム)」とは、主にPostgreSQLなどのデータベース管理システムにおいて、不要なデータを掃除してデータベースを最適化する処理です。
    簡単に言えば、**「DBの掃除機」**のようなものです。


    ◆ なぜVACUUMが必要なのか?

    PostgreSQLなどでは、データの削除や更新をしても、物理的にすぐには消さないという特性があります。

    * UPDATE は実際には「古い行に無効フラグを立て、新しい行を追加」する仕組み。
    * DELETE も「無効フラグを立てる」だけ。
    このため、使われなくなった「不要な行(dead tuples)」が蓄積していきます。


    ◆ VACUUMの役割

    処理内容説明
    不要なデータの回収無効化された行(dead tuples)を物理的に削除する
    テーブルサイズの肥大化を防止ディスク容量を節約できる
    クエリ性能の維持無駄な行が減ることでスキャン効率が上がる
    トランザクションIDの管理トランザクションIDの周回(wraparound)による障害を防ぐ


    ◆ VACUUMの種類(PostgreSQL)

    1. `VACUUM`

    * 基本的な掃除。
    不要データを回収するが、空いたスペースはテーブルサイズには反映されない(ディスクは解放されない)。


    2. `VACUUM FULL`

    * より強力。
    不要なデータを回収しつつ、物理的にテーブルを再構築し、ディスクサイズを縮小する。
    * ただしロックを伴い、実行中は該当テーブルにアクセスできない。


    3. 自動バキューム(autovacuum)

    * PostgreSQLは自動的にVACUUMを実行してくれる機能がある(設定次第)。


    ◆ 実行例(PostgreSQL)

    ```sql

    -- 通常のバキューム

    VACUUM my_table; -- フルバキューム(テーブルロックあり・サイズ縮小)
    VACUUM FULL my_table; -- 統計情報も更新(ANALYZE付き)
    VACUUM ANALYZE my_table;

    ```

    ◆ VACUUMが必要になる例

    * 更新・削除の多いテーブル
    * 長期間運用しているDB
    * クエリが急に遅くなったとき
    * ディスク使用量が増え続けているとき


    ◆ 補足:MySQLの場合は?

    MySQL(InnoDBエンジン)ではVACUUMという名前では存在しませんが、**自動的にガベージ回収(行の再利用)**が行われます。
    ただし、`OPTIMIZE TABLE` コマンドを使うと、MySQLでも類似の処理(空き領域の再整理)が行われます。


    ◆ まとめ

    項目内容
    名前VACUUM(バキューム)
    主な目的不要な行を削除し、性能・容量を改善する
    主に使われるDBPostgreSQL、(MySQLではOPTIMIZEが近い)
    注意点`VACUUM FULL`はロックが発生するので使用タイミングに注意





    PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで [ 近藤 雄太 ]

    価格:3608円
    (2025/6/10 09:43時点)
    感想(1件)


    データベースシステム(改訂2版) [ 北川 博之 ]

    価格:3520円
    (2025/5/18 14:40時点)
    感想(0件)


     



    ブログランキング・にほんブログ村へ
    【下記、広告です。クリックいただけると励みになります。】
    posted by モニー at 11:00| Comment(0) | データベース | このブログの読者になる | 更新情報をチェックする
    この記事へのコメント
    コメントを書く
    コチラをクリックしてください