- 浏览: 1025810 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 22843有效的关键字: userid -- ORACLE use ... -
11gR2新特性:STANDBY_MAX_DATA_DELAY
2011-12-27 11:18 1230Active Data Guard 是 Oracle 11g ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2913首先,去oracle官网下载C ... -
Oracle Mutex实现机制
2011-05-18 23:43 1076我们都知道Latch是Oracle ... -
local_listener参数作用
2011-05-10 17:19 1939pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3547整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9571. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1277参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1304大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1830利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 994往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1037当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1194在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1764步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 839Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1546接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
oracle执行DML(事物过程)的深入研究(一)
2010-12-14 10:26 2813用户所执行 DML (即执行事务)操作在 Oracle 内部按 ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1478数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11801.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 789本文讨论的是关于oracle ...
相关推荐
"嵌入式Flash读取加速技术研究" 嵌入式Flash读取加速技术是微控制器单元(MCU)中的一种关键技术。由于嵌入式Flash的读取速度和微控制器的工作频率存在较大的差距,对嵌入式Flash的读取速度进行优化变得非常重要。...
- 结构化数据:通常采用行存储或列存储方式,行存储以记录为主,列存储则针对数据列进行优化。 2. 多源异构数据的分离: - 非结构化数据分离:转化为元数据和二进制数据形式。二进制数据存储在磁盘文件中,通过...
在这篇文章中,我们提出了一种基于压缩稀疏行(Compressed Sparse Row,CSR)图表示的混合内存立方体(Hybrid Memory Cube,HMC)上的图加速器,我们称之为CGAcc。 CGAcc将内存预取和处理整合到基于Micron的HMC的三...
通过深入研究这些源码,我们可以了解L3 Cache是如何在硬件层面实现高速数据交换的,同时也能学习到如何针对特定应用场景进行优化。例如,在大数据处理、并行计算或者游戏开发等领域,合理利用和优化L3 Cache能显著...
此外,作者还根据指令延迟和缓存行大小确定了数据预取的数量。数据预取是预先加载即将需要的数据到高速缓存中,以减少等待内存数据的时间,提高性能。 为了进一步提升性能,文章采用C++语言重新编写了优化的子程序...
总的来说,这篇论文深入研究了龙芯3B处理器的架构特点,并针对性地进行了Linpack的优化,包括矩阵乘法的分块策略、cache锁定机制、预取算法以及热点函数的优化。这些工作对于提升基于龙芯3B处理器的高性能计算系统的...
5.8章节可能讨论的是如何通过预取技术减少访存延迟,预取是预测和加载未来可能会需要的数据,以此来隐藏内存访问的延迟,提高系统的整体性能。 在【部分内容】中,提到了多个与虚拟存储和并行计算相关的文献和主题...
深入研究这份源码,不仅可以了解DDR SDRAM的基本工作原理,还可以学习到如何在实际应用中设计和优化内存控制器。这对于硬件工程师、嵌入式系统开发者以及对计算机系统底层感兴趣的程序员来说,都是极好的学习材料。...
4. **数据缓冲和预取**:由于DDR SDRAM的数据传输特性,控制器通常需要一个预取机制,以便在时钟周期内处理多个数据位。数据缓冲器用于暂时存储数据,直到它们可以在合适的时间点被读取或写入。 5. **刷新管理**:...
- **缓存预取**:通过预测未来可能需要的数据,提前将其加载到缓存中,降低延迟。 - **数据局部性**:利用程序运行时的数据访问模式,优化代码布局,使热点数据更可能留在缓存中。 - **缓存分配策略**:针对不同...
在电子技术领域,存储器是不可或缺的组成部分,它负责存储数据和指令,使得计算机能够运行程序和处理信息。本文将详细解析存储器的读取电路、存储装置...因此,深入研究这些知识点对于任何IT专业人士来说都至关重要。
MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集计算机(RISC)架构,广泛应用于嵌入式系统、网络设备以及学术研究。在MIPS架构中,AXI(Advanced eXtensible Interface)是一种高性能...
2. **地址和命令控制**:DDR2内存的读写操作需要发送特定的地址和命令,例如RAS(行地址选通)、CAS(列地址选通)和WE(写使能)。 3. **数据路径**:包括数据输入/输出缓冲(DQ)和数据选择线(DQS),它们需要...
4. **预取技术**:DDR3支持8位或16位的预取机制,意味着数据在实际被访问之前就已经被读取并暂存,从而降低了延迟,提高了数据传输的速度。 5. **命令与地址总线**:DDR3内存使用了更复杂的命令与地址总线,能够...
计算机组成原理是计算机科学与技术专业的一门核心课程,它主要研究计算机系统的基本组成和工作原理。在这个课程设计中,我们将重点关注存储器的设计,这是计算机系统中不可或缺的一部分。存储器承担着数据和指令的...
SandyBridge是英特尔的一个微处理器架构,其引入了多种新技术,在缓存设计和管理上有着显著的改进,包括了高级预取技术、新的缓存一致性协议等。通过这样的案例研究,可以具体了解到如何在实际的硬件产品中应用缓存...
- **动态预取**:对于常规索引访问,DB2 9引入了动态预取(dynamic prefetch)机制,可以在执行SQL调用时提前加载数据,从而加快响应速度。 - **全局查询优化**:利用更高级的统计信息和优化技术,全局查询优化能更...
1. 内存对齐:确保数据在内存中的位置对齐到缓存行边界,减少因跨缓存行读取带来的额外开销。 2. 预取:预测未来需要的数据并提前加载到缓存,减少等待时间。 3. 数据局部性:尽可能保持连续的内存访问,利用局部性...