検索
連載

ODP.NETのデータアクセス・チューニングODP.NETファーストステップ(3)(2/4 ページ)

Windowsプラットフォームにおけるアプリケーション開発は、.NETが主流となりつつある。本連載はVisual Basicから.NETへの移行を考えているOracleアプリケーション開発者に向けて、「Oracle Data Provider for .NET」を使うメリットや独自機能、新しいプログラミング・スタイルなどを解説する。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

OracleDataReader使用時のパフォーマンス・チューニング

 アプリケーションのパフォーマンスは、アプリケーションがフェッチする必要のある行数と、それらの取得に必要なデータベース・ラウンドトリップの数によって決まります。OracleDataReaderオブジェクトを使用して、Oracleデータベースからデータを取得する際に、データベース・ラウンドトリップを減らす方法として、FetchSizeプロパティを調整する方法があります。

 FetchSizeプロパティは、1回のデータベース・ラウンドトリップでフェッチされたデータをキャッシュするために、ODP.NETで割り当てられるメモリの合計サイズをbyteで表します。FetchSizeプロパティは、状況に応じてOracleCommandまたはOracleDataReaderのどちらにも設定できます。FetchSizeプロパティの値が小さいと、データベース・ラウンドトリップが必要以上に発生して、アプリケーションのパフォーマンスが落ちてしまいます(図1)。

図1 FetchSizeプロパティの値が小さい場合
図1 FetchSizeプロパティの値が小さい場合

 FetchSizeプロパティの値を適切に設定することにより、データベース・ラウンドドリップを最小限に抑え、アプリケーションのパフォーマンスを向上させることが可能です(図2)。

図2 FetchSizeプロパティの値を適切に設定してある場合
図2 FetchSizeプロパティの値を適切に設定してある場合

 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.

ページトップに戻る