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

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

 2007-05-20 16:20:09 来源:WEB开发网   
核心提示: 运行 ALTER TABLE LOCKSIZE TABLE,这将导致 DB2 为随后使用该表的所有 SQL 语句使用一个表锁,DB2数据库中提高INSERT性能详解(8),直到 locksize 参数改回到 ROW,运行 LOCK TABLE IN EXCLUSIVE MODE,如果要迁移

运行 ALTER TABLE LOCKSIZE TABLE。这将导致 DB2 为随后使用该表的所有 SQL 语句使用一个表锁,直到 locksize 参数改回到 ROW。

运行 LOCK TABLE IN EXCLUSIVE MODE。这将导致表上立即上了一个 X 锁。注意,在下一次提交(或回滚)的时候,这个表将被释放,因此,如果您要运行一个测试,测试中每 N 行提交一次,那么就需要在每次提交之后重复执行 LOCK TABLE。

使用缺省锁,但是让 LOCKLIST 和 MAXLOCKS 数据库配置参数的值比较小。当获得少量的行锁时,行锁就会自动地逐渐升级为表锁。

当然,所有这些的缺点就在于并发的影响:如果表上有一个 X 锁,那么其他应用程序除非使用了隔离级别 UR(未提交的读),否则都不能访问该表。如果知道独占访问不会导致问题,那么就应该尽量使用表锁。但是,即使您坚持使用行锁,也应记住,在批量插入期间,表中可能存在数千个有 X 锁的新行,所以就可能与其他使用该表的应用程序产生冲突。通过一些方法可以将这些冲突减至最少:

确保锁的升级不会无故发生。您可能需要加大 LOCKLIST 和/或 MAXLOCKS 的值,以允许插入应用程序有足够的锁。对于其他的应用程序,使用隔离级别 UR。

对于 V8 FixPak 4,或许也可以通过 DB2_EVALUNCOMMITTED 注册表变量来减少锁冲突:如果将该变量设置为 YES,那么在很多情况下,只能获得那些符合某个谓词的行上的锁,而并不是获得被检查的所有行上的锁。

发出一个 COMMIT 命令以释放锁,因此如果更频繁地提交的话就足以减轻锁冲突的负担。

注意

在 V7 中,存在涉及 insert 和键锁的并发问题,但是在 V8 中,由于提供了 type-2 索引,这些问题实际上已经不见了。如果要迁移到 V8 中来,那么应该确保使用带 CONVERT 关键字的 REORG INDEXES 命令,以便将索引从 type-1 转换为 type-2。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:DB 数据库 提高

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