PREPARATION
受験対策

Silverの例題解説
「S2.5 基本的な運用管理作業(VACUUM、ANALYZEの目的と使い方)」

今回は、Silverの「S2 運用管理 - S2.5 基本的な運用管理作業(VACUUM、ANALYZEの目的と使い方)」からの出題です。

例題

2.108

VACUUM と VACUUM FULLの違いの説明として適切なものを2つ選びなさい。

  1. VACUUM FULLはデータベース内の全テーブルが対象になるが、VACUUMは指定した特定のテーブルのみを対象とする。
  2. VACUUM FULLはテーブルのANALYZEも実行するが、VACUUMはANALYZEを実行しない。
  3. VACUUM FULLは処理対象のテーブルの排他的ロックを取得するため、通常のテーブルの読み書きの処理と競合が発生する。VACUUMは排他的ロックを取得しない。

  4. VACUUM FULLを実行すると通常はテーブルを構成するファイルのサイズが小さくなるが、VACUUMを実行しても通常はテーブルを構成するファイルのサイズは変わらない。

  5. OSのコマンドラインから vacuumdb コマンドを発行することで VACUUM を実行できるが、VACUUM FULL はコマンドラインからは実行できない。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2020年9月2日

解答と解説

PostgreSQLでは、テーブルの行を更新あるいは削除したとき、その行が占めていた領域を物理的には削除せず、代わりに削除済みのフラグをセットします。これはマルチバージョニングの機能を実現するための鍵となる仕組みなのですが、テーブルの更新が繰り返されると、削除済みの領域が増大し、テーブルを構成するファイルの物理的サイズが大きくなる、という問題があります。


これに対処するための機能がVACUUMで、削除済みの領域を回収し、再利用可能にします。つまり、そのテーブルに次にINSERTやUPDATEが実行されたときに、回収された領域にデータが入るため、テーブルを構成するファイルのサイズの増大を回避できます。
通常のVACUUMは削除済みの領域を回収するだけなのでファイルの物理的サイズは小さくなりませんが、VACUUM FULLを実行すると、データの詰め直しをして使用中のデータだけで構成されるデータファイルを作成するため、処理後のデータファイルのサイズは小さくなります。ただし、この処理の実行中はテーブルの排他的ロックを取得するため、テーブルに対する読み書きの処理はブロックされます。


VACUUM、VACUUM FULLのいずれも、データベース内の特定のテーブルのみを対象とすることも、全テーブルを対象とすることもできます。ANALYZEオプションを付けて実行すると、VACUUM の終了後に ANALYZE の処理を行いますが、オプションを指定しなければ VACUUM の処理だけを行います。通常は VACUUM ANALYZE のセットで実行するのが望ましいでしょう。


OSのコマンドラインから vacuumdb コマンドを発行することでも VACUUM を実行できます。-f オプションを指定すれば、VACUUM FULL を実行できます。


したがって正解は C と D です。


VACUUMはPostgreSQLの運用管理において極めて重要なコマンドです。autovacuumの機能により自動的に実行されるため、手作業でVACUUMを実行することは現在ではほとんどないかもしれませんが、その原理については把握しておきましょう。

例題解説についてのご質問やご意見は以下からご連絡ください。

※本例題および解説は、例題作成者から提供されたものです。実際の試験問題とは異なります。
※実際の試験問題に関するお問い合わせについてはご回答いたしかねます。あからじめご了承ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

OSS-DBの受験対策

受験の学習をサポートする情報や対策に役立つ情報をご紹介

例題解説

例題のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関ご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

OSS-DBやPostgreSQLの知識、技術を得るために役立つ情報の紹介やコラムを公開しています。