在Trafodion中对表更新统计信息时,对于大一些的表,一般使用sample来加速统计信息的更新。对于以下语句,
UPDATE STATISTICS FOR TABLE table_name ON EVERY COLUMN SAMPLE;
SAMPLE会在更新统计信息时根据表的数据量会有不同的行为方式:
1 当表总行数<=10K时,更新整个表统计信息;
2 当表总行数>10K且<=1M时,随机选择10K行样例数据更新统计信息;
3 当表总行数>1M时,随机选择1%样例数据更新统计信息。
然而,如果对于超大表,如1 Billion级别的表,即使使用SAMPLE的方式(由于SAMPLE方式对于大表是选择1%的样例数据,即1 Billion*1% = 10 M),更新统计信息的过程仍然是漫长的,而且可能会产生超时错误。对于这种情况,我们可能需要使用额外的样例表来做超大表的统计信息更新。
具体步骤及试验如下,
1 创建样例表
SQL>create table sample_eboxdata like eboxdata with partitions;
--- SQL operation complete.
2 向样例表导入数据(UPSERT USING LOAD)
注:对于超大表,需要根据表的记录数来计算percent的比例,最终的样例表的总记录数约为1M。
SQL>upsert using load into sample_eboxdata select * from eboxdata sample random 0.1 percent rows;
--- 29763 row(s) inserted.
3 使用样例表更新大表统计信息(CQD USTAT_SAMPLE_TABLE_NAME)
SQL>cqd ustat_sample_table_name 'TRAFODION.TEST.SAMPLE_EBOXDATA';
--- SQL operation complete.
SQL>update statistics for table eboxdata on every column sample 29763 rows;
--- SQL operation complete.
Start Time 2017/07/05 10:19:40.847298
End Time 2017/07/05 10:20:05.289742
Elapsed Time 00:00:24.442444
Compile Time 00:00:00.001793
Execution Time 00:00:24.440469