- 浏览: 1003154 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
1.行预取
在应用程序从数据库读取数据的时候,它可以一条一条地读取,也可以更好一点,一次读取多条记录。一次读取多条记录被称为行预取.
1.1运行机制
每次应用程序请求驱动从数据库返回1条记录的时候,会预取多条记录并将它们存储在客户端的内存中。这样,多个后续的请求就不需要执行数据库调用来读取数据。可以直接从客户端内存中得到它们。结果,到数据库的往返次数随预取记录数量的增加呈比例地降低。因此,检索包含大量记录的结果集的开销会显著降低。
必须明白的是,在没有行预取的情况下,检索性能之所以差并不是数据库引擎造成的。而是应用程序导致了低性能,返回来又被低性能拖累。
尽管行预取功能对客户端来讲更加重要,数据库也能从中得到好处。事实上,行预取功能显著地降低了逻辑读的次数。
下面演示在PL/SQL、JDBC以及ODP.NET环境下有效地使用行预取功能。
1。PL/SQL
如果在编译的时候动态初始化参数plsql_optimize_level被设置成2或者2以上,就会针对基于游标的FOR循环使用行预取功能。
ALTER SESSION SET plsql_optimize_level = 2;
BEGIN
FOR c IN (SELECT * FROM t)
LOOP
-- process data
NULL;
END LOOP;
END;
必须强调的是,行预取功能只能自动地应用到基于游标的FOR循环中。要对其他类型的游标使用行预取功能,必须使用BULK COLLECT 子句。下面是一个使用它来操作隐式游标的例子。
DECLARE
TYPE t_t IS TABLE OF t%ROWTYPE;
l_t t_t;
BEGIN
SELECT * BULK COLLECT INTO l_t
FROM t;
FOR i IN l_t.FIRST..l_t.LAST
LOOP
-- process data
NULL;
END LOOP;
END;
在前面的PL/SQL匿名块中,结果集中的所有记录都是在一次读取中返回的。如果记录数量很大,会需要使用大量的内存来保存它。因此,在实际操作中,要么知道要返回的记录数是有限的,要么需要使用LIMIT子句为每次读取设置一个范围。示例如下:
DECLARE
CURSOR c IS SELECT * FROM t;
TYPE t_t IS TABLE OF t%ROWTYPE;
l_t t_t;
BEGIN
OPEN c;
LOOP
FETCH c BULK COLLECT INTO l_t LIMIT 100;
EXIT WHEN l_t.COUNT = 0;
FOR i IN l_t.FIRST..l_t.LAST
LOOP
-- process data
NULL;
END LOOP;
END LOOP;
CLOSE c;
END;
包dbms_sql、本地动态SQL和RETURNING子句都支持行预取功能。
2.JDBC
Oracle JDBC驱动默认启用了行预取功能。可以用两种方式来改变默认的预取记录的数量。第一种是在使用类OracleDataSource或OracleDriver创建数据库的连接时指定属性defaultRowPrefetch。示例如下:
connectionProperties = new Properties();
connectionProperties.put("user",user);
connectionProperties.put("password",password);
connectionProperties.put("defaultRowPrefetch","100");
dataSource.setConnectionProperties(connectionProperties );
第二种方法是在Staement类中使用方法setFetchSize来覆盖连接级别的默认值。示例如下:
sql = "SELECT id, pad FROM t";
statement = connection.prepareStatement(sql);
statement.setFetchSize(100);
resultset = statement.executeQuery();
while (resultset.next())
{
id = resultset.getLong("id");
pad = resultset.getString("pad");
// process data
}
resultset.close();
statement.close();
3.ODP.NET
ODP.NET定义的默认读取大小(65536)是字节数而不是记录数。可以通过类OracleCommand和OrcleDataReader提供的属性FetchSize来改变它的大小。示例如下:
String sql;
OracleCommand command;
OracleDataReader reader;
Decimal id;
String pad;
sql = "SELECT id, pad FROM t";
command = new OracleCommand(sql, connection);
command.AddToStatementCache = false;
reader = command.ExecuteReader();
reader.FetchSize = command.RowSize * fetchSize;
while (reader.Read())
{
id = reader.GetDecimal(0);
pad = reader.GetString(1);
// process data
// Console.WriteLine(id + " , " + pad);
}
reader.Close();
发表评论
-
sqlldr总结参数介绍
2012-06-28 14:29 22713有效的关键字: userid -- ORACLE use ... -
11gR2新特性:STANDBY_MAX_DATA_DELAY
2011-12-27 11:18 1160Active Data Guard 是 Oracle 11g ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2869首先,去oracle官网下载C ... -
Oracle Mutex实现机制
2011-05-18 23:43 1036我们都知道Latch是Oracle ... -
local_listener参数作用
2011-05-10 17:19 1875pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3495整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9251. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1232参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1272大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1773利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 962往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1007当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1154在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1723步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 797Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1510接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
oracle执行DML(事物过程)的深入研究(一)
2010-12-14 10:26 2777用户所执行 DML (即执行事务)操作在 Oracle 内部按 ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1442数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11401.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 752本文讨论的是关于oracle ...
相关推荐
动态二进制翻译中数据预取优化研究,罗琼程,吴强,动态优化是动态二进制翻译研究中一个十分重要的课题,数据预取优化能提高现代处理器体系结构应用程序性能。基于超级块(SuperBlock)的
Java虚拟机在Intel众核架构下的动态数据预取研究与优化
数据挖掘技术在Web预取中的应用研究.pdf
针对专题型应用中普遍存在的大数据查询的频繁性和模式固定性特点,提出一种基于模板的数据预取和缓存算法,用于加快数据查询响应速度并减轻服务器端负载压力。通过构建数据查询模板,在触发器被激发时调用模板以构建...
动态优化是动态二进制翻译研究中一个十分重要的课题,数据预取优化能提高现代处理器体系结构应用程序性能。基于超级块(Superblock)的动态数据预取优化采用软件插桩方式收集应用程序的load访存延迟信息并构造...
预执行帮助线程在预取过程中需要进行动态预取调节,而传统静态枚举控制参数值的控制方法在预取执行过程中保持固定不变,从而使得该方法不能够有效地为主线程提供预取质量保证(quality of service,QoS)。...
在深入分析GCC4.9循环级数组预取的基本实现机制,以及剖析基于预取收益和分析时间的三种不予预取的代价模型的基础上,得出影响循环数组预取效果的几个因素,并针对典型测试用例测试了GCC编译器循环数组预取的效果。...
针对命名数据网络(named data networking,NDN)移动性增强支持不足的问题,基于城区移动场景提出了一种基于移动预测的内容预取方法(mobility-aware prediction approach for content prefetching,MAP-CP)及扩展...
提出了一种新的用于关系数据库查询缓冲和预取的方法。首先将数据查询语句抽象成由四元组组成的查询模板,同时保存了查询语句的实际参数。基于这些模板和参数,提出了两种智能预取算法以适应两类不同的数据查询需求。...
多核处理器预取策略的研究.pdf
Web预取是减少用户访问延时、提高网络服务质量的关键技术之一,近年来已成为国内外的研究热点.通过利用WWW访问的空间局部性,Web预取使缓存机制从时间局部性向空间局部性扩展.归纳了Web预取技术的分类,概括和比较了...
基于云端的Web数据挖掘预取技术研究.pdf
Linux预取算法分析与研究.pdf
面向多应用的自适应预取策略研究,郑长安,陈俭喜,多应用情况下,各种I/O混合,顺序I/O和随机I/O夹杂在一起,从而影响了传统Cache调度算法的性能。本文在RAID系统中设计了一种自适应预取
通过对面向链式结构的线程预取性能分析,研究链式数据结构程序热点循环的计算任务量与访存任务量比例特征对线程预取性能的影响。结合多核处理器平台特点,实现了一种适用于链式数据结构的帮助线程间隔预取方法。实验...
面向移动内容分发网络环境的移动视频预取技术研究进展.docx
针对以上问题,结合数据预取理念提出一种基于资源预取的作业调度算法。通过估算节点上正在运行任务的剩余执行时间,并与传输一个数据块所需时间进行比较,预选出待预取的候选节点;并从当前正在运行作业的未分配任务...
web数据挖掘一篇很好的文章,希望想了解数据挖掘的人仔细研究,推荐!
通过为每个对象自定义一个预取属性页,对用户访问对象存储设备的规律进行智能的自我学习,从而实现一种高效的、自适应的动态预取算法,可以提高对象存储设备的预取命中率,从而提高对象存储设备的性能。