Количество AMP, использованных сеансом в Teradata

Я новичок в терадате. У меня есть хранимая процедура, которая занимает много времени на сервере. Я просто хочу знать, сколько AMP он использует. У меня есть идентификатор сеанса процесса, и в этом сеансе будет выполняться только процедура. Итак, с доступным идентификатором сеанса я могу запросить что-то в таблицах DBC и узнать, сколько AMP используется для этого сеанса.

заранее спасибо

2 ответа

Хранимая процедура выполняется на одном механизме синтаксического анализа, только действительные операторы SQL будут выполняться на AMP, либо на одном, нескольких, либо на всех AMP.

Но всякий раз, когда кто-то жалуется на медленные SP на Teradata, это обычно происходит потому, что для обработки данных есть какой-то цикл или курсор. Курсор является последовательным (FETCH NEXT), и это наихудший случай в параллельной системе баз данных, такой как Teradata. Переписать его с использованием SQL будет на несколько порядков быстрее.

В Teradata 14 и новее (возможно, 13.10) у вас есть доступ к системным API-интерфейсам PMPC через SQL, которые позволяют отслеживать активные сеансы DBC/SQL. Если у вас есть доступ к Viewpoint, вы также можете использовать его.

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

HostIDIn: -1 включает в себя все хосты

UserNameIn: '*' включает всех пользователей

SessionNoIn: 0 (ноль) включает все сессии

Другие вопросы по тегам