原文はこちら。
https://blogs.oracle.com/opal/sqlplus-12201-adds-new-performance-features
# このエントリはLuan Nim (Senior Development Manager, Oracle)によるものです。
SQL*Plus 12.2.0.1 では、パフォーマンスや使い勝手をよくする数多くの機能が導入されました。これらの機能はSETコマンドもしくはコマンドラインから有効化できます。
Oracle SQL*Plus 12.2.0.1の新機能には以下のようなものがあります。
(訳注)
以下のリンクの並びは、SQL*Plus®ユーザーズ・ガイドおよびリファレンス リリース2 (12.2)(日本語)、SQL*Plus® User's Guide and Reference Release 2 (12.2)(英語)の順です。
https://blogs.oracle.com/opal/sqlplus-12201-adds-new-performance-features
# このエントリはLuan Nim (Senior Development Manager, Oracle)によるものです。
SQL*Plus 12.2.0.1 では、パフォーマンスや使い勝手をよくする数多くの機能が導入されました。これらの機能はSETコマンドもしくはコマンドラインから有効化できます。
Oracle SQL*Plus 12.2.0.1の新機能には以下のようなものがあります。
(訳注)
以下のリンクの並びは、SQL*Plus®ユーザーズ・ガイドおよびリファレンス リリース2 (12.2)(日本語)、SQL*Plus® User's Guide and Reference Release 2 (12.2)(英語)の順です。
- SET MARKUP CSV
SET MARK[UP]
このオプションを使うとCSV形式で出力を生成することができます。使用する区切り文字の選択や、データの周りを引用符で囲む・囲まないを指定することもできます。CSV形式を使うメリットは、高速という点にあります。このオプションを使うと、フォーマット済み出力が不要な大量データのクエリのパフォーマンスが向上します。
http://docs.oracle.com/cd/E82638_01/SQPUG/SET-system-variable-summary.htm#GUID-0AA910C4-C22A-4A9E-BE13-AAA059CC7919
SET MARK[UP]
http://docs.oracle.com/database/122/SQPUG/SET-system-variable-summary.htm#SQPUG-GUID-0AA910C4-C22A-4A9E-BE13-AAA059CC7919
構文
例SET MARKUP CSV ON [DELIMI[TER] character] [QUOTE {ON|OFF}]
このオプションはコマンドラインから"-m csv"を引数として渡すことでも利用できます。SQL> set markup csv on
SQL> select * from emp;
"EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO"
7369,"SMITH","CLERK",7902,"17-DEC-80",800,,20
7499,"ALLEN","SALESMAN",7698,"20-FEB-81",1600,300,30
7521,"WARD","SALESMAN",7698,"22-FEB-81",1250,500,30
7566,"JONES","MANAGER",7839,"02-APR-81",2975,,20
7654,"MARTIN","SALESMAN",7698,"28-SEP-81",1250,1400,30
7698,"BLAKE","MANAGER",7839,"01-MAY-81",2850,,30
7782,"CLARK","MANAGER",7839,"09-JUN-81",2450,,10
7788,"SCOTT","ANALYST",7566,"19-APR-87",3000,,20
7839,"KING","PRESIDENT",,"17-NOV-81",5000,,10
7844,"TURNER","SALESMAN",7698,"08-SEP-81",1500,0,30
7876,"ADAMS","CLERK",7788,"23-MAY-87",1100,,20
7900,"JAMES","CLERK",7698,"03-DEC-81",950,,30
7902,"FORD","ANALYST",7566,"03-DEC-81",3000,,20
7934,"MILLER","CLERK",7782,"23-JAN-82",1300,,10
14 rows selected.MARKUPオプション
http://docs.oracle.com/cd/E82638_01/SQPUG/starting-SQL-Plus.htm#GUID-B3B93959-2119-447D-A9D3-2349DDD70435
MARKUP Options
http://docs.oracle.com/database/122/SQPUG/starting-SQL-Plus.htm#GUID-B3B93959-2119-447D-A9D3-2349DDD70435 - SET FEEDBACK ONLY
SET FEED[BACK] {6 | n | ON | OFF | ONLY}
SET FEEDBACK の唯一の新規オプションは、データを表示せずに選択された行数を表示するものです。このオプションは、(実際のデータを表示せずに)データベースからデータを取得する時間計測に関心がある場合に有用です。
http://docs.oracle.com/cd/E82638_01/SQPUG/SET-system-variable-summary.htm#GUID-2C90B73B-A7E0-4357-9382-5EBAF53BF528
http://docs.oracle.com/database/122/SQPUG/SET-system-variable-summary.htm#GUID-2C90B73B-A7E0-4357-9382-5EBAF53BF528
例SQL> set feedback only
SQL> select * from emp;
14 rows selected. - SET STATEMENTCACHE
SET STATEMENTC[ACHE] {0 | n}
このオプションは実行ステートメントを現在のセッションにキャッシュします。この設定のメリットは、同一クエリの不要なパース時間を削減できる点にあります。したがって、セッション中でクエリを連続して実行する場合にパフォーマンスが改善されます。
http://docs.oracle.com/cd/E82638_01/SQPUG/SET-system-variable-summary.htm#SQPUG-GUID-04F43010-45D3-4B11-BC33-C6A87A9E5AE3
http://docs.oracle.com/database/122/SQPUG/SET-system-variable-summary.htm#GUID-04F43010-45D3-4B11-BC33-C6A87A9E5AE3
例SQL> set statementcache 20
SQL> select * from emp;
SQL> select * from emp; - SET LOBPREFETCH
SET LOBPREFETCH {0 | n}
このオプションはLOBデータをプリフェッチし、キャッシュすることで、小さなLOBデータへのアクセスを改善します。この設定のメリットは、LOBデータが定義されたLOBPREFETCHサイズの範囲に入る場合、LOBデータを1回のラウンドトリップで取得できるため、サーバへのネットワーク・ラウンドトリップを減らすことができる点にあります。
http://docs.oracle.com/cd/E82638_01/SQPUG/SET-system-variable-summary.htm#SQPUG-GUID-57823713-2285-4A66-8802-B2A7ADF7E196
http://docs.oracle.com/database/122/SQPUG/SET-system-variable-summary.htm#SQPUG-GUID-57823713-2285-4A66-8802-B2A7ADF7E196
例SQL> set lobprefetch 2000
SQL> select * from lob_tab; - SET ROWPREFETCH
SET ROWPREFETCH {1 | n}
このオプションはクエリでのラウンドトリップを最小化するものです。クエリ実行時にデータを結果セット行にプリフェッチします。プリフェッチ行数をこのSET ROWPREFETCHを使って設定できます。
http://docs.oracle.com/cd/E82638_01/SQPUG/SET-system-variable-summary.htm#GUID-7DC8F932-47B4-471D-80AF-DFE8E4D9A45C
http://docs.oracle.com/database/122/SQPUG/SET-system-variable-summary.htm#GUID-7DC8F932-47B4-471D-80AF-DFE8E4D9A45C
このオプションを使うと、内部OCI実行呼び出しから戻った際にOracle Databaseがクエリ結果を転送できるので、データベースへのもう1回のラウンドトリップを実行する、後続のOCIフェッチ呼び出しの必要性がなくなり、結果としてラウンドトリップを減らすことができます。
例:
例えば、1行のみ戻される想定の場合、 set ROWPREFETCH を 2 に指定すると、Oracle Databaseが効率よく行を取得でき、他の行を取得する必要がないことを確認できます。SQL> set rowprefetch 20
SQL> Select * from emp; - コマンドライン –FAST オプション
SQL*Plus コマンドオプション
このコマンドラインオプションにより、一般パフォーマンスが向上します。このコマンドライン・オプションにより、次のSETオプションの値が以下の値に変更されます。
http://docs.oracle.com/cd/E82638_01/SQPUG/starting-SQL-Plus.htm#SQPUG369
SQL*Plus Command Options
http://docs.oracle.com/database/122/SQPUG/starting-SQL-Plus.htm#SQPUG369- ARRAYSZE 100
- LOBPREFETCH 16384
- PAGESIZE 50000
- ROWPREFETCH 2
- STATEMENTCACHE 20
Syntax:
$ sqlplus –f @emp.sql - ARRAYSZE 100
SQL*Plus®ユーザーズ・ガイドおよびリファレンス リリース2 (12.2)(日本語)SQL、PL/SQL、SQL*Plusについてご質問があれば、適切なOTN Spaceに投稿してください。
http://docs.oracle.com/cd/E82638_01/SQPUG/toc.htm
SQL*Plus® User's Guide and Reference Release 2 (12.2)(英語)
http://docs.oracle.com/database/122/SQPUG/toc.htm
Database Space @ OTN
https://community.oracle.com/community/database