基本情報技術者 2019年 春期 午前(科目A) 問15
問題文
アプリケーションの変更をしていないにもかかわらず、サーバのデータベース応答性能が悪化してきたので、表のような想定原因と、特定するための調査項目を検討した。調査項目cとして、適切なものはどれか。

選択肢
ア:遅い処理の特定
イ:外的要因の変化の確認
ウ:キャッシュメモリのヒット率の調査
エ:データの格納状況の確認(正解)
🔒 解説は解答すると表示されます
データ格納状況の確認【午前解説】
正解の理由
フラグメンテーションによるディスク I/O の増加が想定原因であれば、物理的・論理的な「データの格納状況」を確認することが直接的かつ有効です。ファイルやデータベース内のレコードやページが不連続に配置されていると、読み書き時にシークや追加の I/O が発生し、応答性能が悪化します。したがって、選択肢のうち実際に格納の断片化(フラグメンテーション)を検出・評価できるもの、つまり エ が適切です。
解法ステップ
- まず想定原因(フラグメンテーション)を論点化する:断片化は「連続領域の欠如」による追加 I/O を引き起こす。
- OS・ストレージ・DBそれぞれで格納状態を調査する項目を洗い出す。
- ファイルシステムレベル:ファイルの断片化(extent 分割状況)や空き領域の分散。
- ブロック/デバイスレベル:パーティションの配置、RAID/ボリュームの断片化、LVM の断片化。
- DBレベル:テーブル/インデックスのページ散在、内部フリースペースの増加。
- 実測で影響を確認する:I/O 指標(例:await と avgqu-sz は意味が異なるため両方を確認)やアクセスパターンを併せて評価する。
- 必要なら整理(デフラグ、テーブルの再構成、再割付け、パーティショニング)を実施し、性能改善を検証する。
選択肢別の誤答解説
-
ア(遅い処理の特定)
遅い SQL 文や非定型検索が原因のときに有効です。実際の想定原因がフラグメンテーションであれば、処理そのものの特定ではなく、格納レイアウトの確認が優先されます。よって c に対しては不適切。 -
イ(外的要因の変化の確認)
他システムの共存や接続クライアント数の増加など「外的要因」を調べる項目であり、表の1行目に対応します。フラグメンテーションの検証とは目的が異なります。 -
ウ(キャッシュメモリのヒット率の調査)
データベースバッファの不足やキャッシュ効率の問題を疑うときに用いる項目です(バッファ不足により I/O が増えるケースに該当)。フラグメンテーションそのものの有無や配置の偏りは直接は分からないため、c の想定原因には不十分です。 -
エ(データの格納状況の確認)
ファイル/ブロック/テーブルの断片化を直接検出できるため、フラグメンテーションによるディスク I/O 増加を特定するために最も適切です。
よくある誤解
- SSD ではフラグメンテーションを無視してよいと思い込む
- SSD はシーク遅延が小さいため影響が HDD より小さいことが多いが、ファイルシステムのメタデータ肥大やガーベジコレクション、書込 amplification により性能影響を受けることがある。無条件に無視して良いわけではありません。
- I/O 指標を一つだけ見れば十分と考える
- 例えば iostat の await は平均 I/O 待ち時間、avgqu-sz は平均キュー長であり意味が異なります。両者やスループット、CPU待ち、コンテキストスイッチ等を総合的に見る必要があります。
補足コラム
- 代表的な確認ツール例(Linux)
- ファイル断片化確認:
filefrag -v /path/to/file - ブロックデバイス状況:
lsblk; blkid; hdparm -I /dev/sdX - I/O 指標:
iostat -x 1 3 # await, avgqu-sz などを確認 sar -d 1 3 vmstat 1 3 - データベース側:
- MySQL: SHOW TABLE STATUS、OPTIMIZE TABLE、InnoDB のフラグメント(innodb_file_per_table の有無)
- PostgreSQL: pgstattuple、VACUUM (FULL) や REINDEX
- ファイル断片化確認:
- 対策の考え方
- 最小侵襲で効果がある順に試す:インデックス再構築→テーブル再編成→ファイルシステムのデフラグ/再配置。運用影響(停止時間)を考慮して段階実施すること。
FAQ
Q. HDD と SSD で調査手順は同じですか?
A. 基本的な「格納状況の確認」は共通ですが、HDD は連続性(シーク回数)を重視し、SSD は書込パターンやガーベジコレクション、TRIM の有無に着目します。SSD では論理的な断片化よりも DB 側のフリースペース管理や write amplification を優先して確認します。
A. 基本的な「格納状況の確認」は共通ですが、HDD は連続性(シーク回数)を重視し、SSD は書込パターンやガーベジコレクション、TRIM の有無に着目します。SSD では論理的な断片化よりも DB 側のフリースペース管理や write amplification を優先して確認します。
Q. iostat のどの値を優先して見るべきですか?
A. 平均待ち時間としては await(ミリ秒)を確認し、デバイスの混雑度は avgqu-sz(平均キュー長)で把握します。両者を合わせ、tps/MB_s(スループット)や CPU 使用率と併せて判断してください。
A. 平均待ち時間としては await(ミリ秒)を確認し、デバイスの混雑度は avgqu-sz(平均キュー長)で把握します。両者を合わせ、tps/MB_s(スループット)や CPU 使用率と併せて判断してください。
Q. デフラグ作業はすぐ実行すべきですか?
A. 影響範囲とメンテナンス時間を評価してから実施します。DB の場合はオンラインでできる手法(インデックスのオンライン再構築など)を優先検討してください。
A. 影響範囲とメンテナンス時間を評価してから実施します。DB の場合はオンラインでできる手法(インデックスのオンライン再構築など)を優先検討してください。
関連キーワード: ディスクフラグメンテーション、ファイル断片化、ファイルシステム、I/O待ち時間、await、avgqu-sz、iostat、filefrag、VACUUM、OPTIMIZE TABLE

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

