【問題】
ストアドプロシージャの利点はどれか。
【選択肢】
ア アプリケーションプログラムからネットワークを介してDBMSにアクセスする場合、
両者間の通信料を減少させる。
イ アプリケーションプログラムからの一連の要求を一括して処理することによって、
DBMS内の実行計画の数を減少させる。
ウ アプリケーションプログラムからの一連の要求を一括して処理することによって、
DBMS内の必要バッファ数を減少させる。
エ データが格納されているディスク装置へのI/Oを減少させる。
2024年度(令和6年度)春期 高度試験午前Ⅰより引用
・・
・・
・・
・・
・・
【答え】
「ア アプリケーションプログラムからネットワークを介してDBMSにアクセスする場合、
両者間の通信料を減少させる。」
【解説】
データベース分野のストアドプロシージャについての問題です。
ストアドプロシージャとは、データベースに関する一連の処理をまとめたもので、データベースサーバー側でDBMS(データベース管理ソフト)で一括実行される処理のことです。代表的なものに、OracleのPL/SQLや、MicrosoftのTransact-SQLがあります。あらかじめデータベース内に処理内容を登録しておき、必要なタイミングで実行を指示すると、処理結果を取得できます。
アプリケーションから都度データベースサーバーにSQLの実行等の指令を行い、処理結果を受け取る処理と比較して、下記のような利点があります。
1.SQLのエラー解析処理の時間を省略できる
SQLを実行する際、アプリケーションから実行指示を行うとSQLに問題がないかエラーチェックを行いますが、ストアドプロシージャについては登録するときにチェックを行う為、実行時にはチェック処理が省略でき、処理時間を短縮できます。
2.送受信にかかる時間を省略できる
アプリケーション側から複数のSQLの実行を指示する場合、1つ目のSQLを送信、結果を受信、2つ目のSQLを送信、結果を受信などと、送受信の処理の時間、送受信の時間などがかかってきます。ストアドプロシージャは、実行指示は1回、結果受領も1回で済むので、送受信にかかわる時間を短縮できます。
また、通信の回数が減ると、通信を管理する労力も少なくて済みます(断線して1つ目の返答が返ってこない場合どうする、のようなことを考えなくてよくなる)し、通信中に情報が漏洩してしまったり、セッションを乗っ取られてしまうといった攻撃を受けるリスクも低減できます。
各選択肢を検討します。
「ア アプリケーションプログラムからネットワークを介してDBMSにアクセスする場合、
両者間の通信料を減少させる。」
→ SQL文を送信する必要がなくなりますし、データの送受信の確認に必要な送受信も不要、データの送受信の回数が減るのでパケット上にあるヘッダ分のデータ量も節約できます。
「イ アプリケーションプログラムからの一連の要求を一括して処理することによって、
DBMS内の実行計画の数を減少させる。」
→ 実行計画とは、DBMSがSQLを受け取った後に、どのような順番で処理を行うかの計画のことです。SQLを受け取った後の話になりますので、アプリケーションからの直接指示であるか、ストアドプロシージャによる処理かは関係ありません。
「ウ アプリケーションプログラムからの一連の要求を一括して処理することによって、
DBMS内の必要バッファ数を減少させる。」
→ ここでいう「バッファ」とは、「データベースバッファ」のことです。すなわち、DBMSがデータベースサーバー上にSQLを実行するために確保するメモリ領域(=バッファ)のことです。こちらも、SQLを受け取った後の話になりますので、アプリケーションからの直接指示であるか、ストアドプロシージャによる処理かは関係ありません。
「エ データが格納されているディスク装置へのI/Oを減少させる。」
→ データベースサーバー上で、データは基本的にメモリに展開されており、基本的にはメモリ上での書き込み処理を行ってから、メモリ内のデータをディスクに書き込みます。よって、こちらも、SQLを受け取った後、さらにSQL実行した後の話になりますので、アプリケーションからの直接指示であるか、ストアドプロシージャによる処理かは関係ありません。
よって、
「ア アプリケーションプログラムからネットワークを介してDBMSにアクセスする場合、
両者間の通信料を減少させる。」
が正解です。
