Oracle参数Arraysize设置对于逻辑读的影响分析

说明:

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

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

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

分析:

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

-- 查看当前的Arraysize
SQL> show arraysize
arraysize 15
SQL> select * from dba_objects;
rows selected.

Statistics
----------------------------------------------------------
 recursive calls
 db block gets
 consistent gets
 physical reads
 redo size
 bytes sent via SQL*Net to client
 bytes received via SQL*Net from client
 SQL*Net roundtrips to/from client
 sorts (memory)
 sorts (disk)
 rows processed

-- 设置Arraysize为50
SQL> set arraysize 50
SQL> select * from dba_objects;
rows selected.

Statistics
----------------------------------------------------------
 recursive calls
 db block gets
 consistent gets
 physical reads
 redo size
 bytes sent via SQL*Net to client
 bytes received via SQL*Net from client
 SQL*Net roundtrips to/from client
 sorts (memory)
 sorts (disk)
 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)来实现。

原文地址:https://blog.51cto.com/ssunandmoon/2383903

时间: 2024-10-24 20:44:25

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

Oracle逻辑读详解

1.物理读(physical read) 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子: 1.1  第一次读取: C:"Documents and Settings"Paul Yi>sqlplus "/as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Thu Feb 28 09:32:04 2008 Copy

转自go_with_wind的博客Oracle逻辑读详解

原文地址:http://blog.sina.com.cn/s/blog_6ceed3280100x0om.html 1.物理读(physical read) 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子: 1.1  第一次读取: C:"Documents and Settings"Paul Yi>sqlplus "/as sysdba" SQL*Plus: Relea

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

在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果不理解或混淆这些概念的话,对你深入理解一些知识无疑是一个障碍,但是这些概念确实挺让让人犯晕的.下面我们总结.学习一下这方面的知识点.捋一捋他们的关系和特点,希望对你有所帮助. 物理读(Physical Reads) 从磁盘读取数据块到内存的操作叫物理读,当SGA里的高速缓存(Cache Buffer

oracle学习----逻辑读

1.物理读 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 清空数据缓冲区 SQL> alter session set events 'immediate trace name flush_cache'; 会话已更改. SQL> select * from dept; 执行计划----------------------------------------------------------Plan hash val

总结Oracle系统内核参数优化设置

Oracle系统内核参数设置优化 : Oracle内核参数配置文件在 /etc/sysctl.conf路径下: vi /etc/sysctl.conf # System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file # # For mo

oracle 参数调优

一.升级到11gR2之后 oracle数据库升级助手(DBUA)配置工具包括一个自动扩展系统文件的命令选项,能够从oracle express(XE或免费版)升级到其 他版本. 升级前脚本检查以下各项: 1.无效用户或角色 2.无效数据类型或对象 3.不支持的字符集 4.统计信息的收集 5.足够的资源(undo/rollback段,表空间和空闲磁盘空间) 6.缺失的升级需要的脚本 7.运行的监听器 8.oracle数据库软件已连接到database vault选件 如果在安装过程中指定ORACL

Oracle sqlplus 常用设置

Oracle sqlplus 常用设置 §2.5 SQLPLUS常用设置 使用过程中大都需要进行必要的环境设置才能完成我们所需要的输出. 所有环境的设置由SET命令加相应的环境变量来完成.下面是常用的环境设置: §2.5.1   ARRAYSIZE(取回的行数)SET ARRAY[SIZE]{integer} 一次可以提取(Fetch)的行的数目,1->5000,当有较长字段时应设小些. §2.5.2   AUTOCOMMIT(自动提交)SET AUTO [COMMIT] { [ OFF | O

Oracle字符集的查看查询和Oracle字符集的设置修改

本文主要讨论以下几个部分:如何查看查询oracle字符集. 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题. 一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响Oracle数据库字符集最重要的参数是NLS_LANG参数.

通过案例学调优之--Oracle参数(db_file_multiblock_read_count)

通过案例学调优之--Oracle参数(db_file_multiblock_read_count) 应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2   Oracle DB_FILE_MULTIBLOCK_READ_COUNT是Oracle比较重要的一个全局性参数,可以影响系统级别及sessioin级别.主要是用于设置最小化表扫描时Oracle一次按顺序能够读取的数据块数.通常情况下,我们看到top events中的等待事件db file scatte