在前一篇文章中,http://blog.csdn.net/post_yuan/article/details/74375294, 我们已经介绍过如何使用一个单独的样例表来更新统计信息。使用样例表进一步可以做增量数据统计信息的更新。在新的版本中,Trafodion有一套增量更新统计信息的策略,避免用户自己单独创建样例表+CQD的方式来做增量更新统计信息。关于增量更新统计信息介绍,可参考Trafodion官网:http://trafodion.incubator.apache.org/docs/sql_reference/index.html#update_statistics_incremental_update_statistics
本文在此通过实际案例介绍如何实现增量更新统计信息,主要步骤分为两步,
1 第一次更新统计信息时,选择一个适合的比例决定在多少随机数据集上面更新统计信息
备注:x的值依据目标表的数量而定,一般依据是样例数据不少于1百万,假如目标表为10亿,那么x的值可以设置为0.1,因为10亿*0.1 %=1百万
update statistics for table table_name on every column sample random <x> percent persistent;
2 之后每一次更新统计信息时,根据增量字段使用以下语法做增量更新
备注:比如表address只会在state = ‘CA’有数据更新,where后面可以添加这个条件
update statistics for table table_name on existing/necessary columns incremental where <predicate>;
下面是一个实际的测试场景,
SQL>update statistics for table eboxdata_30m on every column sample random 1 percent persistent;
--- SQL operation complete.
Start Time 2017/07/06 16:16:25.171142
End Time 2017/07/06 16:17:24.848758
Elapsed Time 00:00:59.677616
Compile Time 00:00:00.001832
Execution Time 00:00:59.675606
SQL>update statistics for table eboxdata_30m on existing column incremental where eid > 30000000;
--- SQL operation complete.
Start Time 2017/07/06 16:21:36.036327
End Time 2017/07/06 16:23:34.924664
Elapsed Time 00:01:58.888337
Compile Time 00:00:00.001772
Execution Time 00:01:58.886391
注:update statistics …persistent对一个特定的表只在第一个更新统计信息的时候做,不可重复做,因为带persistent时会创建一个样例表,如果需要重复执行persistent,需要先删除样例表,
SQL>update statistics for table eboxdata_30m on every column sample random 1 percent persistent;
*** ERROR[9251] A persistent sample table already exists. Use UPDATE STATISTICS ... REMOVE SAMPLE to drop it first if desired. [2017-07-06 16:15:30]
SQL>update statistics for table eboxdata_30m remove sample;
--- SQL operation complete.