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.软件在操作系统上运作时的对用户的显示,此时采用操作系统 ...
随机推荐
- JVM垃圾收集器-Parallel Scavenge收集器
今天我给大家讲讲JVM垃圾收集器-Parallel Scavenge收集器 Parallel Scavenge收集器 Parallel Scavenge收集器也是一个新生代收集器,它也是使用复制算法的 ...
- python 内置函数 进制转换
4.内置函数 自定义函数 内置函数 len Open id() type() range() 输入输出 print() input() 强制转换 int() float() list() tuple( ...
- 简述at和crontab命令
at 在指定时间执行相关命令 用法:at [option] TIME 常用选项: -l:查询等待运行作业的队列 -d:删除作业,加作业号 -q QUEVE: -c :查看具体作业任务: -f /pat ...
- javascript第一个作业之网页计算器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 例:三位老师对某次数学竞赛进行了预测,他们的预测如下: 甲:学生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;/ ...
- web爬虫,BeautifulSoup
BeautifulSoup 该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单. 1 2 3 ...
- 慢慢啃css
上个礼拜清明放假了,所有忘记更新了,但是每天的学习没有落下,嘿嘿嘿~ 可是这两天就很头疼了,因为发烧了,呜呜呜~昨天在床上睡了一天,四肢无力,头晕眼花,严重的发烧,想靠自己的免疫力扛过去,缺没有. 今 ...
- node环境下express路由,
1.基本路由概念 路由是指确定应用程序如何响应对特定端点的客户端请求,该请求是URI(或路径)和特定HTTP请求方法(GET,POST等). 每个路由都可以有一个或多个处理函数,这些函数在路由匹配时执 ...
- Mac使用
安装you-get: 用到mac下安装软件的工具:brew 百度搜brew到官网首页照说明在终端执行一段指令 安装方法:命令行输入 /usr/bin/ruby -e "$(curl -fsS ...
- source-insight 常用操作
[Ctrl + ] 跳转到函数.宏.变量 等定义处. [Alt > ] 跳转到最近光标停留位置. [Alt < ] 跳转到上次近光标停留位置. [Ctrl Shift [ ] 块位置开 ...