DB2: not logged initially & append on

来源:互联网 发布:王乐平1368单词淘宝 编辑:程序博客网 时间:2024/06/08 04:00
not logged initially

如果我们需要经常对一个表进行批量插入、更新和 删除操作,可以考虑在创建表的时候使用not logged initially特性。在实际生活中,这样做对于一些临时表、stage表非常好,可以提高批量插入、更新和删除的性能。否则,如果表中数据量很大,那么批量删除、插入和更新数据时会报SQL0964C错误,而且也比较慢。

例5-6  使用not logged initially创建表。

db2 => create table nolog_tab(id int, name char(20)) not logged initially

DB20000I SQL命令成功完成。

db2 => delete from nolog_tab ---------表中有3千万记录

DB21034E  该命令被当作SQL语句来处理,因为它不是有效的“命令行处理器”命令.

在SQL处理期间,它返回:

SQL0964C 数据库的事务日志已满。 SQLSTATE=57011


对于创建表时设定了not logged initially的表而言,在命令行中,可以在交易中使用alter table ... activate not logged initially指定不记录日志;

也可以考虑使用activate not logged initially清空表而不产生日志:

db2 => alter  table nolog_tab activate not logged initially with empty table

DB20000I SQL命令成功完成。

db2 => commit

DB20000I SQL命令成功完成。

当激活这个特性后,我们就可以以不记日志的方式删除表中的数据;这样不但提高了速度,也减少了日志的生成,并且减少了锁资源的使用;

我们在使用这个特性时要注意,对于一些非常重要的表,以及需要写日志的表而言,我们不建议使用该特性.


append on

在数据库中,当表中数据被删除时,空间并不会释 放,而是在该行原来的位置做个“DELETED”的标志,表示该空间可以被重用;

当DB2执行INSERT操作时,会扫描整个表的空闲空间并将新行置入空槽;而如果我们启用了append on特性,那么当插入新行时,DB2就不必搜索空槽再插入而是直接插入到表的最后;

例如:

CREATE TABLE appen_on_tab LIKE RECEIPTS IN SLOW_DISK_TBSP

可以通过将该表改变成APPEND ON来通知DB2在执行INSERT时不必搜索空槽:

ALTER TABLE appen_on_tab APPEND ON

这将使INSERT更快。这适合用于大批量追加 插入一些历史表。

如果启用这种特性,考虑定期reorg表。

0 0
原创粉丝点击