WEB开发网
开发学院数据库DB2 DB2数据库中提高INSERT性能详解 阅读

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

 2007-05-20 16:20:09 来源:WEB开发网   
核心提示: 如果有一条语句失败,那么这个表将被标记为不可访问的,DB2数据库中提高INSERT性能详解(10),并且需要被删除掉,这与其他恢复问题(请参阅 SQL Reference 关于 Create Table 的讨论)一起使得 NLI 在很多情况下不能成为可行的方法,因此,如果要执行的关键任务是

如果有一条语句失败,那么这个表将被标记为不可访问的,并且需要被删除掉。这与其他恢复问题(请参阅 SQL Reference 关于 Create Table 的讨论)一起使得 NLI 在很多情况下不能成为可行的方法。

在工作单元最后进行的提交,必须等到在此工作单元内涉及的所有脏页都被写到磁盘之后才能完成。这意味着这种提交要占用大量的时间。如果没有积极地进行页清除,那么在使用 NLI 的情况下,Insert 加上提交所耗费的总时间要更长一些。将 NLI 与积极的页清除一起使用的时候,可以大大减少耗时。如果使用 NLI,就要瞪大眼睛盯紧提交操作所耗费的时间。

至于提高日志写的速度,有下面一些可能性:

将日志与新行所要插入到的表分别放在不同的磁盘上。

在操作系统层将日志分放到多个磁盘。

考虑为日志使用原始设备(raw device),但是要注意,这样管理起来要更困难些。

避免使用 RAID 5,因为它不适合于写密集型(write-intensive)活动。

7. 提交

提交迫使将日志记录写到磁盘上,以保证提交的插入肯定会存在于数据库中,并且释放新行上的锁。这些都是有价值的活动,但是因为 Commit 总是要牵涉到同步 I/O(对于日志),而 insert 则不会,所以 Commit 的开销很容易高于 insert 的开销。因此,在进行批量插入时,每一行都提交一次的做法对于性能来说是很糟糕的,所以应确保不使用自动提交(对于 CLI 和 CLP 来说缺省情况正是如此)。建议大约每 1000 行提交一次:当每 1000 行而不是一两行提交一次时,性能可以提高大概 10 倍。不过,一次提交多于 1000 行只能节省少量的时间,但是一旦出现失败,恢复起来所花的时间要更多。

对上述方法的一种修正:如果 MINCOMMIT 数据库配置参数的值大于 1 (缺省值),则 DB2 就不必对每次 commit 都进行一次同步 I/O,而是等待,并试图与一组事件一起共享日志 I/O。对于某些环境来讲,这样做是有好处,但是对于批量插入常常没有作用,甚至有负作用,因此,如果要执行的关键任务是批量插入,就应该让 MINCOMMIT 的值保持为 1。

上一页  5 6 7 8 9 10 

Tags:DB 数据库 提高

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接