Количество 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 (ноль) включает все сессии