【发布时间】:2016-04-28 09:38:14
【问题描述】:
试图编制一份“统计数据”报告。所有那些占用 CPU 运行统计数据的用户
关于什么“table.cols”(或 col1、col2 等),他们是否运行了统计信息以及何时运行。
我写了下面的报告,但我可以看到它与真实相去甚远
- 它不会将给定查询中的 CPU 按一定比例的权重“拆分”到表中。因此,如果在统计操作中 - 最昂贵的 CPU 在 FACT.BILLION_DOLLAR 表上,但还有一个 DIMENSION.DWARF 表,则 DIMENSION.DWARF 将虚假地显示在图表上 - 这会使报告产生误导。
我也在尝试编译另一个报告,其中我希望按 TABLE 获得 TOP CPU。它不是“严格”的,因为 CPU 用于查询而不是对象,但在查询中我想按比例“拆分”CPU(我猜 count(*) 将是 1 个条件)。那我该怎么做呢 -
它“拉错了人”- 反对运行统计操作的用户名显示不正确。我们运行 stats 的生产 ID 是 SWPRDUSR,但最高的 stats 用户显示为 SYSPRDUSR,他是系统范围的产品。用户,他真的不会弄乱我们的东西-所以我知道这里有些不对劲。
这是我正在运行的内容 我正在运行此报告,而不是系统范围,但仅针对我的数据库,级联sel a.username, s.ObjectTableName, s.objectdatabasename, --s.ObjectColumnName, cast ( s.CollectTimeStamp as date ) , CAST( SUM((((a.AmpCPUTime(DEC(18,3)))+ ZEROIFNULL(a.ParserCPUTime)) )) AS DECIMAL(18,3)) as Total_CPU from
DBC.DBQLogtbl a join DBC.DBQLoBJTBL s on ( s.ProcID = a.ProcID and cast ( s.CollectTimeStamp as date ) = cast ( a.CollectTimeStamp as date ) ) where objectdatabasename in ( sel child
from dbc.children where parent ='FINDB'
group by 1 ) and ObjectType='tab' and statementType='collect statistics' group by 1,2,3,4 UNION ALL sel a.username, s.ObjectTableName, s.objectdatabasename, s.Logdate, --s.ObjectColumnName, CAST( SUM((((a.AmpCPUTime(DEC(18,3)))+ ZEROIFNULL(a.ParserCPUTime)) )) AS DECIMAL(18,3)) as Total_CPU from
PDCRinfo.DBQLogtbl a join PDCRinfo.dbqlobjtbl_hst s on ( s.queryID = a.queryID and s.Logdate = a.Logdate )
where objectdatabasename in ( sel child
from dbc.children where parent ='FINDB'
group by 1 ) and ObjectType='tab' and statementType='collect statistics' group by 1,2,3,4 order by 5 desc , 3 asc, 2 asc, 1 asc ;
【问题讨论】:
标签: sql database report teradata sql-tuning