通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度
2011-06-21 22:47
609 查看
有时候你可能会用SQLPLUS spool 表的数据,那么怎么加快spool速度呢?SQLPLUS中有个行预取的选项
SQLPLUS中 arraysize默认为15
SQL> show arraysize
arraysize 15
它表示从Oracle服务器端一次只传递15行记录到客户端(SQLPLUS),当然了JDBC,WEBLOGIC也有行预取,具体自己Google
举个例子:
SQL> select * from test where owner='ADWU_OPTIMA_AP11';
773 rows selected.
Elapsed: 00:00:30.95
Execution Plan
----------------------------------------------------------
Plan hash value: 217508114
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 593 | 134K| 882 (3)| 00:00:03 |
|* 1 | TABLE ACCESS FULL| TEST | 593 | 134K| 882 (3)| 00:00:03 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OWNER"='ADWU_OPTIMA_AP11')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2976 consistent gets
0 physical reads
0 redo size
50484 bytes sent via SQL*Net to client
597 bytes received via SQL*Net from client
53 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
773 rows processed
SQL> set arraysize 5000
SQL> select * from test where owner='ADWU_OPTIMA_AP11';
773 rows selected.
Elapsed: 00:00:16.06
Execution Plan
----------------------------------------------------------
Plan hash value: 217508114
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 593 | 134K| 882 (3)| 00:00:03 |
|* 1 | TABLE ACCESS FULL| TEST | 593 | 134K| 882 (3)| 00:00:03 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OWNER"='ADWU_OPTIMA_AP11')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2927 consistent gets
0 physical reads
0 redo size
47800 bytes sent via SQL*Net to client
241 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
773 rows processed
当设置 arraysize 之后,SQLPLUS 客户端与数据库Server端交互次数明显减少,这就是为什么返回773行数据第二次比第一次快1倍了,同时也可以看到,第二次逻辑读比第一次低了,那说明设置行预取会影响逻辑读。
SQLPLUS中 arraysize默认为15
SQL> show arraysize
arraysize 15
它表示从Oracle服务器端一次只传递15行记录到客户端(SQLPLUS),当然了JDBC,WEBLOGIC也有行预取,具体自己Google
举个例子:
SQL> select * from test where owner='ADWU_OPTIMA_AP11';
773 rows selected.
Elapsed: 00:00:30.95
Execution Plan
----------------------------------------------------------
Plan hash value: 217508114
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 593 | 134K| 882 (3)| 00:00:03 |
|* 1 | TABLE ACCESS FULL| TEST | 593 | 134K| 882 (3)| 00:00:03 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OWNER"='ADWU_OPTIMA_AP11')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2976 consistent gets
0 physical reads
0 redo size
50484 bytes sent via SQL*Net to client
597 bytes received via SQL*Net from client
53 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
773 rows processed
SQL> set arraysize 5000
SQL> select * from test where owner='ADWU_OPTIMA_AP11';
773 rows selected.
Elapsed: 00:00:16.06
Execution Plan
----------------------------------------------------------
Plan hash value: 217508114
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 593 | 134K| 882 (3)| 00:00:03 |
|* 1 | TABLE ACCESS FULL| TEST | 593 | 134K| 882 (3)| 00:00:03 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OWNER"='ADWU_OPTIMA_AP11')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2927 consistent gets
0 physical reads
0 redo size
47800 bytes sent via SQL*Net to client
241 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
773 rows processed
当设置 arraysize 之后,SQLPLUS 客户端与数据库Server端交互次数明显减少,这就是为什么返回773行数据第二次比第一次快1倍了,同时也可以看到,第二次逻辑读比第一次低了,那说明设置行预取会影响逻辑读。
相关文章推荐
- 通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度
- oracle sqlplus 中的arraysize设置
- SQL*Plus 系统变量之2 - ARRAY[SIZE]
- [转]解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题
- 解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题
- 【Oracle学习】之 在sqlplus设置格式 和 case...when 和 decode
- 如何加快sql的查询速度
- hibernate通过sql查询返回一个key value对应的map对象型集合
- ASP中用Join和Array,可以加快字符连接速度
- Hibernate查询之SQL查询,查询结果用new新对象的方式接受,hql查询,通过SQL查询的结果返回到一个实体中,查询不同表中内容,并将查到的不同表中的内容放到List中
- 设置sqlplus中的Edit编辑模式
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 本机未安装ORACLE数据库情况下通过PL\SQL连接远程数据库设置
- 通过sqlplus执行*.sql文件时常见的问题总结
- sqlplus edit 方式设置成vi
- 通过bat来处理oracle的sqlplus命令
- NHibernate-通过SQL-Query返回DataSet
- 通过sql语句,根据时间值返回相应状态
- Oracle--sqlplus如何设置SQLPlus结果显示的宽度,ORACLE sqlplus提示符设置