说明:

当执行一条SQL查询的时候,为了获得满足的数据,查询在这个过程中完成解析,绑定,执行和提取数据等一系列步骤,这些步骤都是单独执行的,满足条件的数据行必须由数据库返回给应用;对于任何大小的结果集,需要返回的数据行很可能不是在一次往返调用过程中传递给应用的!

每次调用过程中,数据库与客户端之间的往返回路数将一定层次上影响总的响应时间,其中除了提取数据(FETCH)步骤,其余步骤(解析,绑定,执行)都只执行一次,这也是必要的,Oracle需要获得满足查询条件的所有数据结果从而执行多次提取操作。

关于提取操作的机制,一次FETCH调用将会访问缓冲区缓存中的一个或多个数据块,每次访问一个数据块的时候,Oracle会在该块中取出数据行然后在一次回路中返回给客户端,这里对于一次返回的行数便是Arraysize(列大小),Arraysize表明了一次提取操作在网络回路中传输的可能的数据行数。

分析:

Arraysize的机制我们可以得知Arraysize对于逻辑读的一个基本的影响,如果在应用中相应的提高Arraysize的大小,相比之前的设置,每次从数据块中获取的行数将对应得到提高,相同行数情况下,访问数据块的次数自然减小,逻辑读也就相应的降低;实际情况也是如此。

-- 查看当前的Arraysize
SQL> show arraysize
arraysize 15
SQL> select * from dba_objects;
99150 rows selected. Statistics
----------------------------------------------------------
15 recursive calls
0 db block gets
8659 consistent gets
289 physical reads
0 redo size
5230720 bytes sent via SQL*Net to client
73219 bytes received via SQL*Net from client
6611 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
99150 rows processed -- 设置Arraysize为50
SQL> set arraysize 50
SQL> select * from dba_objects;
99150 rows selected. Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
4092 consistent gets
1 physical reads
0 redo size
4383979 bytes sent via SQL*Net to client
22322 bytes received via SQL*Net from client
1984 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
99150 rows processed
SQL>

上面的测试我以SQL*Plus为例,选取了对dba_objects表访问的查询,SQL查询的结果集是相同的,这时将Arraysize的值从默认的15提高至50,就看到了非常明显的变化:

1.逻辑读次数大幅减小,由8659减至4092。
2.网络往返次数由之前的6611次下降到只需要1984次。

需要注意的是这些改变都是与SQL语句本身无关的,Arraysize大小需要通过编程实现,本例中使用SQL*Plus环境中的SET ARRAYSIZE命令,如果是Java应用,可以通过设置Connection.SetdefaultRowPrefetch(n)来实现。

Oracle参数Arraysize设置对于逻辑读的影响分析的更多相关文章

  1. 【Oracle】arraysize的研究(存在疑问)

    arraysize的研究(存在疑问) SYS@proc> create table aaa (id1 int,id2 int,id3 int,id4 int); Table created. S ...

  2. [Oracle] 参数修改小结

    v$parameter Oracle参数的修改比较复杂,有些参数是可以在session级别修改,有些则必须在system级别修改,有些参数修改后马上生效(不需要重启),有些参数则必须重启才能生效,那么 ...

  3. Oracle逻辑读详解

    1.物理读(physical read) 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子: 1.1  第一次 ...

  4. ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析

    在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果 ...

  5. oracle学习----逻辑读

    1.物理读 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 清空数据缓冲区 SQL> alter session se ...

  6. Oracle参数设置之set与reset的实际案例

    Oracle参数设置之set与reset的实际案例 环境:Oracle 10.2.0.5 RAC 需求:节点1的aq_tm_processes要求恢复默认,节点2设置要求保持不变 1.构建测试环境 2 ...

  7. [Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误

    [Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误 在Data Gaurd 的 Standby (或 CDB 是 Read Only ...

  8. 转:Oracle客户端NLS_LANG参数的设置详解

    原文:http://database.51cto.com/art/201107/279361.htm 我们知道,Oracle客户端语言支持可以通过NLS_LANG参数的设置来完成,不同的系统平台上NL ...

  9. oracle的字符集设置与乱码

    oracle的字符集设置与乱码 字符集问题一直叫人头疼,究其原因还是不能完全明白其运作原理. 在整个运行环节中,字符集在3个环节中发挥作用: 1.软件在操作系统上运作时的对用户的显示,此时采用操作系统 ...

随机推荐

  1. Mechanism:Limited Direct Execution

    虚拟化机制的几大挑战:1.性能.在实现虚拟化的同时不增加系统过多开销.2.控制.高效运行程序的同时对CPU保持控制(对资源的管理). Limited direct execution:直接在CPU中运 ...

  2. Matlab rgb2hsv

    >> im = imread('lake.jpg');>> imshow(im)>> hsv_im = rgb2hsv(im);>> imshow(hs ...

  3. Error: no override found for 'vtkRenderWindow'

    VSK7.1+QT5.10环境下报该错误,应该在mainwindow.cpp中添加如下语句 记住,是在mainwindow.cpp中添加,不是在main.cpp中添加:

  4. antd-vue按需加载插件babel-plugin-import报错

    报错.bezierEasingMixin().百度了一下是Less版本太高的原因,我都迷了,还有太新的过... 解决方法:将less版本降到3.0以下 因为我是用的npm生成的vue项目.所以cmd命 ...

  5. Mysql主外键

    主键  primary   key 创建表时直接加上主键: create table student1(id int primary key, name varchar(20), age int, g ...

  6. jsp(待改)

    ##JSP 1.指令 作用:用于配置JSP页面,导入资源文件 *书写格式 <%@ 指令名称 属性1=值1,属性2=值2  ...%> *分类: *page :配置JSP页面的 #属性: c ...

  7. 例:三位老师对某次数学竞赛进行了预测,他们的预测如下:   甲:学生A得了第一名,学生B得第三名。   乙:学生C得了第一名,学生D得第四名。   丙:学生D得了第二名,学生A得第三名。 结果表明,他们都说对了一半,说错了一半,并且无并列名次,输出A、B、C和D各自的名次。

    public class demo { public static void main(String[] args) { int a,b,c,d;//代表四个学生 boolean x1,x2,x3;/ ...

  8. (转)Unity_什么是Draw Call? 什么是Batch?

    開發遊戲時,一定被時時提醒要減少 Draw Call,當然UNITY也不例外,打開Game Window裡的 Stats,可以看到 Draw Call 與 Batched 的數字.但到底甚麼是 Dra ...

  9. python3 多线程爆破ftp、mysql、ssh

    当然 也支持ip 为 127.0.0.1-255 这样的 字典放到 dict 目录里 链接: https://pan.baidu.com/s/1htchOyN5hK9nmZlWfTiFzA 密码: v ...

  10. C#利用首尾時間計算中間時間差

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...