Oracle参数Arraysize设置对于逻辑读的影响分析
说明:
当执行一条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设置对于逻辑读的影响分析的更多相关文章
- 【Oracle】arraysize的研究(存在疑问)
arraysize的研究(存在疑问) SYS@proc> create table aaa (id1 int,id2 int,id3 int,id4 int); Table created. S ...
- [Oracle] 参数修改小结
v$parameter Oracle参数的修改比较复杂,有些参数是可以在session级别修改,有些则必须在system级别修改,有些参数修改后马上生效(不需要重启),有些参数则必须重启才能生效,那么 ...
- Oracle逻辑读详解
1.物理读(physical read) 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子: 1.1 第一次 ...
- ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析
在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果 ...
- oracle学习----逻辑读
1.物理读 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 清空数据缓冲区 SQL> alter session se ...
- Oracle参数设置之set与reset的实际案例
Oracle参数设置之set与reset的实际案例 环境:Oracle 10.2.0.5 RAC 需求:节点1的aq_tm_processes要求恢复默认,节点2设置要求保持不变 1.构建测试环境 2 ...
- [Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误
[Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误 在Data Gaurd 的 Standby (或 CDB 是 Read Only ...
- 转:Oracle客户端NLS_LANG参数的设置详解
原文:http://database.51cto.com/art/201107/279361.htm 我们知道,Oracle客户端语言支持可以通过NLS_LANG参数的设置来完成,不同的系统平台上NL ...
- oracle的字符集设置与乱码
oracle的字符集设置与乱码 字符集问题一直叫人头疼,究其原因还是不能完全明白其运作原理. 在整个运行环节中,字符集在3个环节中发挥作用: 1.软件在操作系统上运作时的对用户的显示,此时采用操作系统 ...
随机推荐
- linux配置服务器
梳理一下这次配置服务器的思路. 1,挂载磁盘 Java和neigx上传到根目录下,tomcat放在data目录下,数据库新建文件夹也在data下, 2,配置环境变量 3,nginx修改域名 4,数据库 ...
- 爬虫基础之urllib库
urllib库的基本使用 urlopen() # 导入urllib库 import urllib # 往指定url发送请求,返回一个响应对象 response = urllib.request.url ...
- CNN试验记录
CIFAR-10 图像处理:(预处理还是很重要的) 数据随机裁剪,填充0 依概率p水平翻转 1.VGG16 SGD lr=0.01 momentum 0.9 weight_decay=0.0001 e ...
- nodejs-- vuex中mapActions
mapActions() 返回的是一个对象, 用了 ... 扩展符后,才可以放进一个对象里,和其他组件内定义的 method 在同一个 methods 对象. { methods: mapAction ...
- python-算法基础
1.时间复杂度和空间复杂度 2.查找算法 2.1 二分查询法 2.1.1 非递归代码 def erfen(data,target): low = 0 high = len(data) - 1 whil ...
- 使用iSCSI服务部署网络存储
- sql注入-推断是否存在SQL注入-and大法和or大法
来自:https://www.cnblogs.com/ichunqiu/p/5749347.html 页面不返回任何错误信息,我们就可以借助本方法来推断了,首先我们在参数后面加上 and 1=1和an ...
- 全志A33开发板的安卓控制LED-2-JNI基础
虽然您可以完全使用Java编写应用程序,但有些情况下Java本身并不能满足您的应用程序的需求.当应用程序不能完全用Java编写时,程序员使用JNI编写Java本机方法来处理这些情况. 以下示例说明何时 ...
- [SQL Server] sysobjects的介紹
sysobjects表 數據庫中所創建的每個對象(約束.默認值.日誌.規則.存儲過程等)都各以一行資訊呈現於表中. 而臨時對象只有在tempdb內,才在該表中各佔一行. sysobjects 表結構: ...
- PHP数组和XML相互转换的函数
//数组转xml function ArrToXml($arr) { if(!is_array($arr) || count($arr) == 0) return ''; $xml = "& ...