对于数据库容量很大的库,一般采取什么策略来进行清理?是定期删除,还是使用分区表?不同的方案对日志需求,备份恢复策略有什么影响?
定期删除使用load还是delete的区别?
数据清理的策略和业务直接相关,不一定按业务时间分区,清理时做分区detach就可以,在数据仓库和分析领域,历史数据归档通常却是可以采用分区detach方式的。
删除(delete)通常消耗大量的日志,而分区detach则不会。另外一个可选的方案是MDC fast rollout, 通过设置db2set DB2_MDC_ROLLOUT=DEFERRED实现,当delete 语句的where条件中只有MDC字段限定时,可以实现快速删除并且只记很少的日志。
对于联机系统,如果一次性删除大量数据可能导致锁升级,影响交易的并发性,建议多次小批量删除,通常的方法是多次执行:delete from (select * from <table name> where ... fetch first 10000 rows only);
detele不影响备份恢复策略;detach 是DDL操作,影响了表的定义,也就影响了表空间的MRT(Minimum Recovery Time),PIT恢复时必须恢复到detach操作时间点以后。
表清空可以采用load/import (load/import from /dev/null of del replace into <table name>) ,或是truncate (truncate table <table name> immediate), 或是关闭日志的操作(alter table <table name> activate not logged with empty table),也可以是是带任何条件的delete。除了delete需要记录大量的日志外,别的操作记录的日志很少或不记日志。
收起数据生命周期的管理是数据仓库(容量很大的库)的管理重点之一。
1.要有严格的建表审查机制,在表建立的时候就应对表的数据增长有预期,选择合适的表属性
2.对于大容量表,分区表是最合适的,卸载分区和重新挂载分区都很方便
3.很少有表会全部清空,所以如果不是分区表一般都在做delete
4.备份一般都是增量的,花的时间比删除还多