Light Append 从字面上理解为轻量的追加。Light append 是一种可绕过缓冲池开销的大
数据量的以块的方式快速追加到表中的方式。如图 9.15 所示,当发生 light append 时,与
light scan 类似,不会使用 buffer pool 作为数据缓存,而会在虚拟内存段分片独立的内存区
域。同时,从图 9.15 可以看出,light append 以一种成块的方式追加到表的尾部(高水位),
即使表的前部存在可用的空间以供使用,light append 会忽略高水位之前的空间,而直接找
到表的高水位,直接开辟新的空间。如果使用不当,则总是以 light append 方式新增空间,
而 delete 释放的空间得不到使用时将会出现空间浪费的情况。
自动使用 light append 的条件如下。
与 light scan 不同的是,我们没有办法强制启用 light append,只能在同时满足如下 2
个特定条件的情况下,数据库优化器自动启用。
1. Raw table
即对表的操作取消日志,通过 create raw table…或者 alter table tabname type(raw);
创建或者修改为 raw table。对临时表 with no log 的情况也有效。
2. No Index
表没有任何索引。
Light append 典型应用场景如下。
1. 临时表
创建临时表时,我们采用 with no log 如 select * from tabname into temp tmp_t with no log;。
2. 大批量数据导入
我们使用外部表 external table 和 HPL 进行数据导入时,通过 light append 方式可以大大提高数据导入的性能。
可以通过 onstat -g lap 命令来监控当前启用 light append 的情况。