Teradata - 顶级" stats hoggers"

时间:2016-01-21 22:34:44

标签: sql database report teradata sql-tuning

尝试编译"统计Hoggers"报告。所有那些占用CPU运行统计数据的用户都在" table.cols" (或col1,col2等),他们是否运行统计数据以及何时运行它们。

我写了下面的报告,但我可以看到它远非真实

  • 它没有"分裂"给定查询的CPU按表的某些比例权重。因此,如果在统计数据操作中 - 最昂贵的CPU在FACT.BILLION_DOLLAR表上,但也有一个DIMENSION.DWARF表,DIMENSION.DWARF将虚假地显示在图表上 - 这会使报告产生误导。
    我也在尝试编译另一个报告,我希望通过TABLE获得TOP CPU。它不是"严格"因为CPU是用于查询而不是对象但在查询中我想要"拆分" CPU的比例(我猜计数(*)将是1个标准)。那么我如何完成这项工作
  • 它"拉过错误的家伙" - 反对运行统计数据操作的用户名显示不正确。我们运行统计数据的生产ID是SWPRDUSR,但顶级统计用户显示为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 ;

1 个答案:

答案 0 :(得分:1)

在第一个选择中,缺少连接条件:s.queryID = a.queryID

Collect Stats始终是单表,不需要拆分CPU。