2015-04-05 29 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