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.软件在操作系统上运作时的对用户的显示,此时采用操作系统 ...
随机推荐
- Ajaxpro使用的方法
1.下载Ajaxpro.2.dll 程序中引用 2.web.config配置 <?xml version="1.0" encoding="utf-8"?& ...
- ie8的input的placeholder不显示的解决bug
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- TCP建立与断开连接、socket通讯模板
在传输层,有一个重点是TCP传输时建立连接的三次"握手"和四次"挥手",因为socket工作于应用层和传输层之间,故而涉及到建立连接和关闭连接的过程,以下笔记可 ...
- HanLP 自然语言处理 for nodejs
HanLP 自然语言处理 for nodejs ·支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关 ...
- 数据库if判断语句
THEN '青年' ELSE '未成年' END) as age_text from user 更多写法参考:http://www.cnblogs.com/martinzhang/p/3220595. ...
- gerrit中mysql配置
gerrit数据库使用mysql 进入gerrit数据库 mysql -ugerrit -p -h127.0.0.1 -P3307 密码为用户名加pass mysql> select * fro ...
- Mysql在sql中截取时间类型字段的年月日
//显示年月日 select date_format(date ,'%Y-%m-%d' ) from talbe_a //根据年月日分组 select date_format(date ,'%Y-%m ...
- ICE框架双工通讯+MVVM框架测试案例
准备 开发工具 VS2015 ICE框架 https://zeroc.com/ MVVMLight框架 ICE接口文件 #include "./Identity.ice" #inc ...
- springboot项目如何打包成war包
一.修改打包形式 在pom.xml里设置 <packaging>war</packaging> 二.移除嵌入式tomcat插件 在pom.xml里找到spring-boot-s ...
- MySQL Group Replication-MGR集群
简介 MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本. 是MySQL官方 ...