Heim  >  Artikel  >  Datenbank  >  测试SQLPLUS的ARRAYSIZE对性能的影响

测试SQLPLUS的ARRAYSIZE对性能的影响

WBOY
WBOYOriginal
2016-06-07 17:32:521122Durchsuche

consistent gets,这个是从undo里读的数量,Oracle 为了保证数据的一致性,当一个查询很长,在查询之后,数据块被修改,还未提交

arraysize定义了一次返回到SQLPLUS客户端的行数,当扫描了arraysize 行后,停止扫描,返回数据,然后继续扫描。 

这个过程就是统计信息中的SQL*Net roundtrips to/from client。

因为arraysize 默认是15行,那么就有一个问题,所以如果按照15行扫描一次,那么每次扫描要多扫描一个数据块,一个数据块也可能就会重复扫描多次。

重复的扫描会增加consistent gets 和 physical reads。 增加physical reads,这个很好理解,扫描的越多,物理读的可能性就越大。

consistent gets,这个是从undo里读的数量,Oracle 为了保证数据的一致性,当一个查询很长,在查询之后,数据块被修改,还未提交,再次查询时候,Oracle根据Undo 来构建CR块,这个CR块,可以理解成数据块在之前某个时间的状态。 这样通过查询出来的数据就是一致的。

那么如果重复扫描的块越多,需要构建的CR块就会越多,这样读Undo 的机会就会越多,consistent gets 就会越多。

如果数据每次传到客户端有中断,那么这些数据会重新扫描,这样也就增加逻辑读,所以调整arraysize可以减少传的次数,,减少逻辑读。

所以通过上面的说明,arraysize 参数如果过低,会影响如physical reads,consistent gets 还有SQL*Net roundtrips to/from client次数。 ---本段引自DAVE博客。

实验结论:实验用表是由dba_objects;创建。通过设置arraysize为1、15、200,可以通过最后的汇总表格得出将arraysize设置为200,可以得到更好的查询性能。

具体表现在:SQL语句执行时间大幅减少,通过Oracle Net从客户端收到的字节总数大幅减少,SQL * Net发送和从客户端接收的字节总数大幅减少--减幅比例接近arraysize尺寸的比例。

所以在使用SQLPLUS客户端查取大数据、SPOOL输出时,可以考虑将arraysize设置的大一点,提高性能。永久设置此参数可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中写入set arraysize 15 这样。

1,使用SQLPLUS的ARRAYSIZE默认值15来进行测试

BYS@bys1>create tabele test2 as select * from dba_objects;
BYS@bys1>alter system flush shared_pool;
System altered.
BYS@bys1>alter system flush buffer_cache;
System altered.

BYS@bys1>set arraysize 15 因为我已经更改过,所以手动再改为默认的15

此设置只在当前SESSION中有用,如果需要永久设置,可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中写入set arraysize 15 这样。

BYS@bys1>set autotrace traceonly stat
BYS@bys1>select * from test2;

72465 rows selected.

Elapsed: 00:00:02.12

Statistics
----------------------------------------------------------
606 recursive calls
0 db block gets
5882 consistent gets
1052 physical reads
0 redo size
8036433 bytes sent via SQL*Net to client
53549 bytes received via SQL*Net from client
4832 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
72465 rows processed

汇总:执行时间:02.12秒,606次递归调用,5882 一致读,1052 物理读,8036433 bytes发送,53549 bytes接收,4832次往返

更多详情见请继续阅读下一页的精彩内容

相关阅读:

rlwrap - 解决Linux下SQLPLUS退格、上翻键乱码问题

SQLPLUS spool 到动态日志文件名

Oracle SQLPLUS提示符设置

通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

Oracle arraysize 和 fetch size 参数与性能优化说明

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn