Trafodion更新统计信息原理分析

在前面的文章Trafodion 更新统计信息数据收集 中我们介绍了如何查看更新信息统计的详细步骤,今天正好有空对更新统计信息日志做了一些基本的分析,也算是大致了解了更新统计信息的内部原理了吧,以下内容对更新统计信息的步骤做了一些简化,希望没有不小心剔除掉重要的点。

1. Get Detail Update Statistics Log

sqlci
cqd ustat_log ‘ustat_2020.log’; --the log file will be generated under cdl
update statistics log on;
update statistics for table <table_name> on every column sample;
exit

2. Understanding Update Statistics Log

2.1. Set CQDs
CONTROL QUERY DEFAULT QUERY_CACHE ‘0’
CONTROL QUERY DEFAULT CACHE_HISTOGRAMS ‘OFF’
CONTROL QUERY DEFAULT USTAT_MODIFY_DEFAULT_UEC ‘0.05’
CONTROL QUERY DEFAULT OUTPUT_DATE_FORMAT ‘ANSI’
CONTROL QUERY DEFAULT HIST_MISSING_STATS_WARNING_LEVEL ‘0’
CONTROL QUERY DEFAULT USTAT_AUTOMATION_INTERVAL ‘0’
CONTROL QUERY DEFAULT MV_ALLOW_SELECT_SYSTEM_ADDED_COLUMNS ‘ON’
CONTROL QUERY DEFAULT HIST_ON_DEMAND_STATS_SIZE ‘0’
CONTROL QUERY DEFAULT ISOLATION_LEVEL ‘READ COMMITTED’
CONTROL QUERY DEFAULT ALLOW_DML_ON_NONAUDITED_TABLE ‘ON’
CONTROL QUERY DEFAULT MV_ALLOW_SELECT_SYSTEM_ADDED_COLUMNS ‘ON’
CONTROL QUERY DEFAULT ALLOW_NULLABLE_UNIQUE_KEY_CONSTRAINT ‘ON’
CONTROL QUERY DEFAULT CAT_ERROR_ON_NOTNULL_STOREBY ‘OFF’
CONTROL QUERY DEFAULT WMS_CHILD_QUERY_MONITORING ‘OFF’
CONTROL QUERY DEFAULT WMS_QUERY_MONITORING ‘OFF’
CONTROL QUERY DEFAULT TRAF_TINYINT_RETURN_VALUES ‘ON’
CONTROL QUERY DEFAULT TRAF_BOOLEAN_IO ‘ON’
CONTROL QUERY DEFAULT TRAF_LARGEINT_UNSIGNED_IO ‘ON’
CONTROL QUERY DEFAULT TRAF_ALLOW_RESERVED_COLNAMES ‘ON’
CONTROL QUERY DEFAULT TRAF_BLOB_AS_VARCHAR ‘OFF’
CONTROL QUERY DEFAULT TRAF_CLOB_AS_VARCHAR ‘OFF’

2.2. Check If Object Exists

call HSHbaseTableDef::objExists
naTbl_->objectUid() is 3872136939770385698

2.3. Creating histogram tables on demand

2.4. Get Table RowCount

SELECT COUNT(*) FROM TRAFODION.DAAS_GX.E_OT_CASE FOR READ UNCOMMITTED ACCESS
Output:
Total #rows= 78650, sample rows=10000, IntervalCount = 50*

2.5. Memory Estimates

Column S_EXT_DATATIME requires 80000 bytes of memory for internal sort.
Column S_EXT_FROMNODE requires 340000 bytes of memory for internal sort.

2.6. Create/populate sample table

CREATE TABLE TRAFODION.DAAS_GX.TRAF_SAMPLE_03872136939770385698_1533649412_993975 LIKE TRAFODION.DAAS_GX.E_OT_CASE WITHOUT LOB COLUMNS WITH PARTITIONS LIMIT COLUMN LENGTH TO 256
UPSERT USING LOAD INTO TRAFODION.DAAS_GX.TRAF_SAMPLE_03872136939770385698_1533649412_993975 SELECT SUBSTRING(“CASEID” FOR 64) AS “CASEID”, “REGNO”, “UNISCID”, SUBSTRING(“ENTNAME” FOR 64) AS “ENTNAME”, SUBSTRING(“PENDECNO” FOR 64) AS “PENDECNO”, SUBSTRING(“ILLEGACTTYPE” FOR 64) AS “ILLEGACTTYPE”, SUBSTRING(“PENTYPE” FOR 64) AS “PENTYPE”, SUBSTRING(“PENTYPE_CN” FOR 64) AS “PENTYPE_CN”, “PENAM”, “FORFAM”, SUBSTRING(“PENCONTENT” FOR 64) AS “PENCONTENT”, SUBSTRING(“JUDAUTH” FOR 64) AS “JUDAUTH”, “PENDECISSDATE”, SUBSTRING(“REMARK” FOR 64) AS “REMARK”, “PUBLICDATE”, SUBSTRING(“DATADEPT” FOR 64) AS “DATADEPT”, “S_EXT_FROMNODE”, “S_EXT_DATATIME” FROM TRAFODION.DAAS_GX.E_OT_CASE <<+ cardinality 7.865000e+04 >> SAMPLE RANDOM 12.714571 PERCENT FOR READ UNCOMMITTED ACCESS

2.7. Read/sort data before creating STATISTICS

2.8. Create statistics for internal sort

Estimating UEC for column group [S_EXT_DATATIME]
Estimating UEC for column group [DATADEPT]

2.9. Create Single-column stats: fetchBoundaries()

SELECT FMTVAL, SUMVAL FROM (SELECT “FORFAM”, TRIM(TRAILING FROM CAST(“FORFAM” AS VARCHAR(250) CHARACTER SET UCS2)), COUNT(*) FROM TRAFODION.DAAS_GX.TRAF_SAMPLE_03872136939770385698_1533649412_993975 <<+ cardinality 1.000000e+04 >> GROUP BY “FORFAM” FOR READ UNCOMMITTED ACCESS) T(“FORFAM”, FMTVAL, SUMVAL) ORDER BY “FORFAM”

2.10. Drop Sample Table

DROP TABLE TRAFODION.DAAS_GX.TRAF_SAMPLE_03872136939770385698_1533649412_993975

2.11. Flush out stats

SELECT HISTOGRAM_ID, COL_POSITION, COLUMN_NUMBER, COLCOUNT, cast(READ_TIME as char(19) character set iso88591), REASON FROM TRAFODION.DAAS_GX.SB_HISTOGRAMS WHERE TABLE_UID = 3872136939770385698 ORDER BY TABLE_UID, HISTOGRAM_ID, COL_POSITION FOR READ COMMITTED ACCESS

2.12. Write out new histograms/histogram intervals

2.13. Delete old stats rows

DELETE FROM TRAFODION.DAAS_GX.SB_HISTOGRAMS WHERE TABLE_UID = 3872136939770385698 AND HISTOGRAM_ID IN ( 2041743984, 2041743989, 2041743994, 2041743999, 2041744004, 2041744009, 2041744014, 2041744019, 2041744024, 2041744029, 2041744034, 2041744039, 2041744044, 2041744049, 2041744054, 2041744059, 2041744064, 2041744069)
DELETE FROM TRAFODION.DAAS_GX.SB_HISTOGRAM_INTERVALS WHERE TABLE_UID = 3872136939770385698 AND HISTOGRAM_ID IN ( 2041743984, 2041743989, 2041743994, 2041743999, 2041744004, 2041744009, 2041744014, 2041744019, 2041744024, 2041744029, 2041744034, 2041744039, 2041744044, 2041744049, 2041744054, 2041744059, 2041744064, 2041744069)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值