当前位置:首页>网络学院>数据库开发教程>DB2教程>文章内容

DB2数据库中提高INSERT性能详解

[ 来源: | 作者: | 时间:2007-07-21 | 收藏 | 推荐 ] 【

#e#

  INSERT 处理过程概述

  首先让我们快速地看看插入一行时的处理步骤。这些步骤中的每一步都有优化的潜力,对此我们在后面会一一讨论。

www.it55.com

  在客户机准备 语句。对于动态 SQL,在语句执行前就要做这一步,此处的性能是很重要的;对于静态 SQL,这一步的性能实际上关系不大,因为语句的准备是事先完成的。 在客户机,将要插入的行的各个 列值组装起来,发送到 DB2 服务器。 DB2 服务器确定将这一行插入到哪一页中。DB2 在 用于该页的缓冲池中预留一个位置。如果 DB2 选定的是一个已有的页,那么就需要读磁盘;如果使用一个新页,则要在表空间(如果是SMS,也就是系统管理存储的表空间)中为该页物理地分配空间。插入了新行的每一页最后都要从缓冲池写入到磁盘。在目标页中对该行进行格式化,并获得该行上的一个X(exclusive,独占的) 行锁。将反映该 insert 的一条记录写入到日志缓冲区中。 vd;k;l www.it55.com rdfg

  最后提交包含该 insert 的事务,如果这时日志缓冲区中的记录还没有被写入日志文件的话,则将这些记录写到日志文件中。此外,还可能发生很多类型的附加处理,这取决于数据库配置,例如,索引或触发器的存在。这种额外的处理对于性能来说也是意义重大的,我们在后面会讨论到。 it55.com

  INSERT 的替代方案 vd;k;l www.it55.com rdfg

  在详细讨论 insert 的优化之前,让我们先考虑一下 insert 的两种替代方案:load 和 import。import 实用程序实际上是 SQL INSERT 的一个前端,但它的某些功能对于您来说也是有用的。load 也有一些有用的额外功能,但是我们使用 load 而不使用 insert 的主要原因是可以提高性能。

vd;k;l www.it55.com rdfg

  load 直接格式化数据页,而避免了由于插入导致的对每一行进行处理的大部分开销(例如,日志记录在这里实际上是消除了)。而且,load 可以更好地利用多处理器机器上的并行性。在 V8 load 中有两个新功能,它们对于 load 成为 insert 的替代方案有着特别的功效,这两个功能是:从游标装载和从调用层接口(CLI)应用程序装载。 免费资源www.it55.com

  从游标装载

vd;k;l www.it55.com rdfg

  这种方法可用于应用程序的程序代码(通过 db2Load API),或用于 DB2 脚本。下面是后一种情况的一个例子: 45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn

declare staffcursor cursor forselect * from staff;
load from staffcursor of cursor insert into myschema.new_staff;

www.it55.com

  这两行可以用下面一行替代: 免费资源www.it55.com

insert into myschema.new_staff select * from staff www.it55.com

  同等效的 INSERT ... SELECT 语句相比,从游标装载几乎可以提高 20% 的性能。

45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn

(编辑:IT资讯之家 www.it55.com

返回顶部
共10页: 上一页 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]