ODP.NETのデータアクセス・チューニング:ODP.NETファーストステップ(3)(2/4 ページ)
Windowsプラットフォームにおけるアプリケーション開発は、.NETが主流となりつつある。本連載はVisual Basicから.NETへの移行を考えているOracleアプリケーション開発者に向けて、「Oracle Data Provider for .NET」を使うメリットや独自機能、新しいプログラミング・スタイルなどを解説する。(編集局)
OracleDataReader使用時のパフォーマンス・チューニング
アプリケーションのパフォーマンスは、アプリケーションがフェッチする必要のある行数と、それらの取得に必要なデータベース・ラウンドトリップの数によって決まります。OracleDataReaderオブジェクトを使用して、Oracleデータベースからデータを取得する際に、データベース・ラウンドトリップを減らす方法として、FetchSizeプロパティを調整する方法があります。
FetchSizeプロパティは、1回のデータベース・ラウンドトリップでフェッチされたデータをキャッシュするために、ODP.NETで割り当てられるメモリの合計サイズをbyteで表します。FetchSizeプロパティは、状況に応じてOracleCommandまたはOracleDataReaderのどちらにも設定できます。FetchSizeプロパティの値が小さいと、データベース・ラウンドトリップが必要以上に発生して、アプリケーションのパフォーマンスが落ちてしまいます(図1)。
FetchSizeプロパティの値を適切に設定することにより、データベース・ラウンドドリップを最小限に抑え、アプリケーションのパフォーマンスを向上させることが可能です(図2)。
FetchSizeプロパティがOracleCommandに設定されている場合、新しく作成されるOracleDataReaderにはOracleCommandのFetchSizeプロパティが継承されます。継承されたFetchSizeはそのままにすることも、変更してオーバーライドすることもできます。FetchSizeはデフォルトで65,536bytesです。OracleDataReaderのFetchSizeプロパティを指定するコードは以下になります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
OracleCommandオブジェクトのRowSizeプロパティには、SELECT文の実行後に行サイズ(byte)が移入されます。OracleCommandオブジェクト、もしくはOracleDataReaderのFetchSizeプロパティは、このRowSizeプロパティに各サーバ・ラウンドトリップでフェッチする行数を掛けた値に設定できます。例えば、FetchSizeをRowSize×10に設定すると、OracleDataReaderは各サーバ・ラウンドトリップごとに10行をフェッチします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ODP.NETからPL/SQLを利用
ODP.NETからOracleデータベースに格納されたストアドプロシージャ/ストアドファンクションを呼び出す方法と、PL/SQL配列(PL/SQL表)を使用してサーバ・ラウンドトリップを減らし、パフォーマンスを向上させる方法を説明します。
ストアドプロシージャの呼び出し方法
まず初めに、ストアドプロシージャの呼び出し方法を説明します。
手順1
「scott」ユーザーの「emp」表にアクセスするテスト用のストアドプロシージャを作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
手順2
上記のストアドプロシージャをコールするコードは以下になります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ストアドプロシージャを呼び出す際には、OracleCommandオブジェクトのCommandTypeプロパティをStoredProcedureとします。ストアドプロシージャへのパラメータの入出力の設定は、OracleParameterオブジェクトのDirectionプロパティで指定を行います。指定可能な値は、「Input」「InputOutput」「Output」「ReturnValue」です。
ストアドファンクションから戻り値を取得する方法
ReturnValueを指定して、ストアドファンクションから戻り値を取得する方法を説明します。
手順1
テスト用のストアドファンクションを作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
手順2
上記のストアドファンクションをコールするコードは以下になります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.