基本情報技術者 2013年 秋期 午前(科目A) 問28
問題文
クライアントサーバシステムにおいて、利用頻度の高い命令群をあらかじめサーバ上のDBMSに用意しておくことによって、データベースアクセスのネットワーク負荷を軽減する仕組みはどれか。
選択肢
ア:2相コミットメント
イ:グループコミットメント
ウ:サーバプロセスのマルチスレッド化
エ:ストアドプロシージャ(正解)
クライアントサーバで命令群をサーバに置いてネットワーク負荷を減らす仕組み【午前2 解説】
要点まとめ
- 結論:サーバ上にあらかじめ命令群を用意し実行する「ストアドプロシージャ」がネットワーク往復を減らし負荷を軽減します。
- 根拠:処理をサーバ側で一括実行するためクライアントとサーバ間のラウンドトリップが大幅に削減され、SQLの送受信回数が減ります。
- 差がつくポイント:プリコンパイルやパラメータ化により実行計画再利用と帯域節約が可能で、スループットや応答性が向上します。
正解の理由
ストアドプロシージャはDBMS上で保管・実行されるプログラム(命令群)です。クライアントが個別に多数のSQLを送る代わりに、複数の処理を1つの呼び出しでサーバ内部で実行できます。これによりクライアントとDBサーバ間の通信回数(ラウンドトリップ)が減少し、ネットワーク帯域と遅延による負荷が軽減されます。さらに多くのDBMSはストアドプロシージャをプリコンパイルし実行計画を再利用するため、処理性能も向上します。以上から正解は エ です。
よくある誤解
- ストアドプロシージャは単に便利な補助機能でしかないと考え、ネットワーク負荷削減効果を見落とす誤解。実際は通信回数削減が最大の利点です。
- 「サーバプロセスのマルチスレッド化=ネットワーク負荷軽減」と考えがちですが、これは同時処理能力を上げる手段であり通信量自体は減りません。
- グループコミットや2相コミットを混同して、トランザクション効率化=ネットワーク負荷削減と短絡する誤り。目的と効果が異なります。
解法ステップ
- 問題文のキーワード「利用頻度の高い命令群をあらかじめサーバ上のDBMSに用意しておく」を確認する。
- 「サーバ上に用意しておく=サーバ内で実行されるプログラム」を想定し、ストアドプロシージャを連想する。
- ネットワーク負荷軽減の観点で、通信回数(ラウンドトリップ)が減る技術を選ぶ。ストアドプロシージャが該当する。
- 他選択肢(2相コミット、グループコミット、マルチスレッド化)はトランザクション整合性や並列処理に関するものであり該当しないと判断する。
選択肢別の誤答解説
- ア: 2相コミットメント
2相コミットは分散トランザクションで全参加ノードの合意を取るプロトコルで整合性確保が目的です。通信はむしろ増える可能性があり、ネットワーク負荷軽減とは逆の性質があります。 - イ: グループコミットメント
グループコミットは複数のトランザクションのディスク書き込みをまとめる手法で、ディスクI/O効率化や書込み回数削減が目的です。ネットワークのラウンドトリップ削減とは直接関係しません。 - ウ: サーバプロセスのマルチスレッド化
マルチスレッド化は同時接続の処理能力を上げサーバの並列性を改善しますが、クライアント—サーバ間の通信量自体は減らないためネットワーク負荷軽減の直接策ではありません。 - エ: ストアドプロシージャ(正解)
ストアドプロシージャはDBサーバ上に保存される命令群で、まとめて呼び出すことでクライアントとサーバ間の往復回数を減らし、ネットワーク負荷を軽減します。
補足コラム
- ストアドプロシージャの利点と留意点
利点はネットワーク負荷削減、実行速度向上、ロジックのサーバ集中管理、セキュリティ制御の集中化です。留意点はDBMS依存性が高く、移植性が低下する点や、複雑なビジネスロジックをDB側に置き過ぎると運用・テストが難しくなる点です。 - 実務での使い分け例
頻繁に実行される集合演算や複数クエリの組合せ処理はストアドプロシージャに向きます。一方、トランザクション調整やログフラッシュはグループコミット、分散整合性は2相コミット、と目的に応じて適切な技術を選択します。
FAQ
Q1: ストアドプロシージャは必ず速くなるのですか?
A1: 多くの場合ネットワーク往復が減るため体感速度は向上しますが、処理内容やデータ量、最適化状況によっては必ずしも速くならない場合があります。プロファイリングが重要です。
A1: 多くの場合ネットワーク往復が減るため体感速度は向上しますが、処理内容やデータ量、最適化状況によっては必ずしも速くならない場合があります。プロファイリングが重要です。
Q2: すべての処理をストアドプロシージャに置くべきですか?
A2: いいえ。メンテナンス性や移植性の観点から、頻繁に呼ばれるデータ集約処理など適切な部分に限定して使うのが現実的です。
A2: いいえ。メンテナンス性や移植性の観点から、頻繁に呼ばれるデータ集約処理など適切な部分に限定して使うのが現実的です。
Q3: ストアドプロシージャはどのDBMSでも同じですか?
A3: 構文や機能がDBMSごとに異なるため、移植性は低いです。ベンダ依存の機能を使う際は注意が必要です。
A3: 構文や機能がDBMSごとに異なるため、移植性は低いです。ベンダ依存の機能を使う際は注意が必要です。
関連キーワード: ストアドプロシージャ、DBMS、ネットワーク負荷、ラウンドトリップ、プリコンパイル、実行計画再利用、トランザクション、2相コミット、グループコミット、マルチスレッド

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

