【问题标题】:Teradata SQL PDCR query- filtering out to get only Unique Queries with High CPU rank ( Database Performance tuning )Teradata SQL PDCR 查询 - 过滤以仅获取具有高 CPU 等级的唯一查询(数据库性能调整)
【发布时间】:2016-08-20 04:03:20
【问题描述】:

我正在运行一个标准查询,将 PDCRLogtbl 与 PDCRSQLTbl 连接起来,以提升高影响力的 CPU。我敢肯定,在大多数地方,以前都使用过/见过类似的。没什么好说的了

    SELECT  
    RANK(ImpactCPU) AS CPURank
   ,USERNAME
   ,sessionid
   ,AcctString 
   ,/*--including additionally */ Hashrow ( qrytext)  Unique_SQL_ID
    /* qrytext comes from SQLtbl.SQLTextinfo if available or its    logtbl.querytext*/  
   <col list>
     from 
    (SELECT a.USERNAME
      , sessionid
    --  , a.logdate                 
      , a.ProcId
      , a.QueryId
      , a.expandacctstring
       <calculations for CPU skew, Impact CPU , other skew's here>
      from PDCRinfo.DBQLogtbl
      where <filters here> 
      group by clause 
      ) a 
      LOJ ( sel < col list> from FROM   PDCRInfo.DBQLSQLTbl s 
      where <filters here> ) s on <join cols >
      order by  CPURank  asc ,  spoolusage desc

o/p 是这样的

CPUrank Username <other cols> impactCPU Querytext  Unique_SQL_ID
1       JohnD                 50000     Sel foobar   1F-0C-A1-EB
5       JaneD                 60000     sel yadaya   A9-CE-55-1D
6       JohnD                 35000     Sel foobar   1F-0C-A1-EB
9       JohnD                 25000     Sel foobar   1F-0C-A1-EB
10      BobD                  24000     sel Daddy    6E-1C-18-08
11      JaneD                 23000     sel yadaya   A9-CE-55-1D
12      JohnD                 22500     Sel foobar   1F-0C-A1-EB
15      GeorgeD               22400     sel holahu   9B-4A-D1-F4

这里 SAME Unique_SQL_ID 出现在不同的位置 1 、 6 和 9。我只希望第一个实例 - 一个带有 highest CPU rank 的实例出现并且其余的被忽略。毕竟它在不同的场合运行相同的 SQL。
期望的

CPUrank Username <other cols> impactCPU Querytext  Unique_SQL_ID
    1       JohnD                 50000     Sel foobar   1F-0C-A1-EB
    5       JaneD                 60000     sel yadaya   A9-CE-55-1D
    10      BobD                  24000     sel Daddy    6E-1C-18-08
    15      GeorgeD               22400     sel holahu   9B-4A-D1-F4

我该怎么办?可能会放入一个合格的或类似的过滤器......某种 OLAP 函数来传递这些行,这将过滤掉它们。我想我可以通过dt 对所有这些行进行额外的传递来做到这一点,但我想看看是否有一个简单的过滤器可以粘贴在那里也可以完成这项工作
谢谢!

【问题讨论】:

    标签: sql database teradata database-performance olap


    【解决方案1】:

    在查询末尾添加这个过滤器,将给出修复。

      qualify 
            ROW_NUMBER() OVER (PARTITION BY Unique_SQL_ID
                                   ORDER BY impactCPU DESC
                              )
                                 = 1
    

    原始答案优雅地给出了row_num () over (PARTITION BY Unique_SQL_ID ORDER BY impactCPU DESC ),这正是我想要的。但这是一个有序分析函数——你不能把它放在where 子句或having 中。这只是一个小的修改。 MatBailie给出的答案的要点是abs。正确的 。谢谢垫子

    【讨论】:

    • 原始答案优雅地给出了row_num () over (PARTITION BY Unique_SQL_ID ORDER BY impactCPU DESC ),这正是我想要的。但这是一个Ordered Analytical Function - 你不能把它放在where 子句或having 中。这只是一个小的修改。 MatBailie给出的答案的要点是abs。正确的 。我对其进行了编辑以反映这个小修复。谢谢马特!
    猜你喜欢
    • 2016-07-08
    • 2015-09-16
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    相关资源
    最近更新 更多