2015-04-05 28 views
0

我是teradata的新用户。我有一个在服务器上花费大量时间的存储过程。我只想知道它使用了多少个AMP。我有进程的会话ID,只有该过程将在该会话中运行。因此,在会话ID可用的情况下,我可以在DBC表上查询某些内容并知道该会话使用了多少个AMP。Teradata会话消耗的AMP数量

在此先感谢

+0

什么版本的Teradata? – 2015-04-05 14:14:29

+1

你可以显示SP来源吗? – dnoeth 2015-04-05 14:49:18

回答

0

在Teradata的14和更高版本(可能是13.10),您必须通过SQL,使您可以监视活动的DBC/SQL会话访问系统PMPC的API。如果你有权访问Viewpoint,你也可以使用它。

SELECT UserName 
    , AmpCount 
    , ReqCPU 
    , ReqIO 
    , ReqSpool 
    , (1 - AvgAMPCPUSec)/HotAmp1CPU AS CPUSkew 
    FROM TABLE(MonitorSession({HostIDIn},'{UserNameIn}', {SessionIDIn})) ; 

HostIDIn:-1包括所有主机

UserNameIn: '*' 包括所有用户

SessionNoIn:0(零)包括所有会话

+0

桌子是指哪个桌子?或者它只是表? – 2015-04-05 16:17:58

+1

MonitorSession()返回一个表对象,因此返回FROM子句中的TABLE。 – 2015-04-05 16:19:58

+0

monitorsession(-1,username,sessionid)是这样吗? – 2015-04-05 16:23:19

1

AS tored过程在单个分析引擎上运行,只有实际的SQL语句将在AMP上运行,无论是在一个,部分还是所有AMP上。

但是,每当有人抱怨Teradata上的SP太慢,通常是因为有一些循环或光标用于处理数据。游标是连续的(FETCH NEXT),这对于像Teradata这样的并行数据库系统是最糟糕的情况。使用SQL重写它会快几个数量级。

+0

是同意的。但是我想知道,放大器的数量是否通过sp中的查询改变了查询,并且过程的整个计数是多少 – 2015-04-05 16:22:01

+1

AMP的数量总是根据SQL而变化(不管它是从SP内提交的还是独立的) ,如果它是PI访问,那么它是单个AMP,USI - > 2 AMP,NUSI/FTS - >所有AMP。查看实际计划的唯一方法是解释SP中提交的单个SQL语句。 – dnoeth 2015-04-05 17:43:55