プライマリ・コンテンツに移動
SQL*Plus®ユーザーズ・ガイドおよびリファレンス
リリース1 (12.1)
B71396-03
目次へ移動
目次
索引へ移動
索引

前
次

SQL*Plusスクリプトのチューニングについて

スクリプトで実行されるSQL問合せをチューニングすることによって、ほとんどの場合、パフォーマンス上の利点が得られます。このチューニングには、SQL*PlusのAUTOTRACEコマンドのようなツールを使用します。Oracle DatabaseのSQLオプティマイザを最大限に活用することには、問合せの再構成も含まれます。SQL文のチューニングについては、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

SQL*Plus固有のコマンドをチューニングすることで得られるパフォーマンスの向上はわずかですが、その向上が重要となるアプリケーションもあります。次のシステム変数およびコマンドは、SQL*Plusのパフォーマンスに影響を与える場合があります。

COLUMN NOPRINT

COLUMN NOPRINTを設定すると、列ヘッダーおよび列で選択されるすべての値の画面表示および印刷は実行されません。

SELECTから必要のない列を削除する方が、その列を表示しないようにCOLUMN NOPRINTを使用するよりも効率的です。問合せから列を削除すると、SQLエンジンによるその列の処理もSQL*Plusへの列データの送信も必要ありません。

SET APPINFO OFF

DBMS_APPLICATION_INFOパッケージを使用して、スクリプトの自動登録を設定します。APPINFO OFFを設定すると、管理者はスクリプトのパフォーマンスおよびリソースの使用率を監視できなくなります。

多数のSQLスクリプトがコールされている場合、APPINFO OFFをチューニングすると、内部SQL*PlusによるデータベースのDBMS_APPLICATION_INFOパッケージへのコールが停止します。

SET ARRAYSIZE

SQL*Plusがデータベースから一度にフェッチする行数を設定します。有効な値は1から5000です。

ARRAYSIZEの設定による効果は、Oracle Databaseによるネットワーク・パケットへの書込み効率、およびネットワークの待機時間とスループットに基づきます。SQL*PlusおよびOracle Databaseの最近のバージョンでは、ARRAYSIZEによる効果はほとんどありません。サイズが非常に大きくなると、より多くのSQL*Plusメモリーが使用され、全体のパフォーマンスが低下する場合があります。

SET DEFINE OFF

SET DEFINE OFFを設定すると、置換変数をそれらの値に置換するコマンドの解析は実行されません。

SET FLUSH OFF

SET FLUSH OFFを設定すると、オペレーティング・システムは出力をバッファに格納できます。ONを設定すると、バッファを使用せず、画面への出力をフラッシュします。FLUSHをONまたはOFFに設定して得られる効果は、オペレーティング・システムおよびデータによって異なります。また、その効果はわずかである場合があります。

ユーザーとの対話が不要で、完了するまで出力結果を確認する必要のないスクリプトを実行する場合のみ、OFFを使用します。

SET LINESIZE

SET LINESIZEでは、SQL*Plusが新しい行を開始する前に、1行に表示する文字の合計数を設定します。

LINESIZEをできるだけ小さくして、余分なメモリー割当ておよびメモリーのコピーを回避します。

ただし、LINESIZEを小さくしすぎると、隣りの列とサイズが合ない列には別の線が表示されます。これによって、パフォーマンスが大幅に低下する場合があります。

SET LONGCHUNKSIZE

SET LONGCHUNKSIZEでは、SQL*PlusがBLOB、BFILE、CLOB、LONG、NCLOBまたはXMLType値を取得するときの増分値のサイズを設定します。

LONGまたはLOBがフェッチされている場合は、別のサイズで試してください。

SET PAGESIZE

各出力ページの行数を設定します。

PAGESIZEを大きくしてヘッダーを頻繁に表示しないようにするか、0に設定してヘッダーを表示しないようにします。

SET SERVEROUTPUT

SET SERVEROUTPUT OFFを設定すると、SQL*Plusのストアド・プロシージャまたはPL/SQLブロックの出力(DBMS_OUTPUT.PUT_LINE)は表示されません。

SERVEROUTPUT OFFを設定すると、内部SQL*Plusによる、ユーザーSQL文の後に実行されたDBMS_OUTPUTパッケージへのコールが停止します。

SET SQLPROMPT

SQL*Plusコマンド・プロンプトを設定します。

デフォルトのプロンプト「SQL>」を使用して、変数の置換がプロンプトの表示ごとに発生するのを停止します。

SET TAB

SQL*Plusが空白をどのように端末に出力するかを指定します。

TAB ONを設定すると、複数の空白が端末の出力で圧縮されます。この設定では、書き込まれているデータが大幅に縮小しないかぎり、得られる効果より必要となる処理の方がわずかに上回ります。

SET TERMOUT

SET TERMOUT OFFを指定すると非表示になるため、スクリプトからの出力を画面に表示せずに、出力をスプールできます。

ファイルへのスプールおよび端末への書込みが両方とも不要な場合は、SQLスクリプトでSET TERMOUT OFFを使用して端末の出力を無効にします。

SET TRIMOUT ON SET TRIMSPOOL ON

SET TRIMOUT ONまたはSET TRIMSPOOL ONを指定すると、表示またはスプールされる各行の末尾で後続の空白を削除します。

これらの変数をONに設定すると、書き込まれるデータ量を減らすことができます。ただし、LINESIZEが最適な場合は、変数をOFFに設定した方がより速い場合があります。問合せがルーチンを処理している間、SQL*Plusの出力行に空白が書き込まれるため、空白の削除には余計な手間がかかります。

UNDEFINE

明示的に(DEFINEコマンドを使用して)定義したか、暗黙的に(STARTコマンドまたはCOLUMN NEW_VAL|OLD_VALへの引数によって)定義した置換変数を削除します。

UNDEFINEを使用すると、不要な置換変数を削除できます。これによって、&変数、new_value変数またはold_value変数を使用する操作に費やす時間を短縮できます。