2012-10-04 1 views
5

Я просто хотел знать, как в proc sql мы определяем опцию стимулятора. Опция PROC SQLSTIMER | NOSTIMER определяет, будет ли PROC SQL записывать информацию о времени для каждого оператора в журнал SAS, вместо того, чтобы записывать кумулятивное значение для всей процедуры. NOSTIMER по умолчанию.Как получить информацию о тайм-ауте запроса шага данных

Теперь точно так же, как указать временную информацию на шаге набора данных. Я не использую proc sql step

data h; 
select name,empid 
from employeemaster; 
quit; 

ответ

5

Шаги PROC SQL индивидуально представляют собой отдельные шаги по обработке данных, поэтому в определенном смысле вы всегда получаете идентичную информацию от SAS. То, что вы просите, - это эффективно, как узнать, как долго «выбирать имя» берется против «empid».

Нет прямого способа получить синхронизацию отдельного оператора на шаге данных, но вы можете написать код шага данных, чтобы узнать. Проблема в том, что шаг данных выполняется по-разному, поэтому он действительно сильно отличается от данных PROC SQL STIMER; почти ничего, что вы делаете на шаге данных, займет очень много времени, если только вы не делаете что-то более сложное, как поиск хеш-таблицы. Набирает много времени, прежде всего, записывая данные и считывая данные в секунду.

У вас есть несколько вариантов устранения длинных шагов данных, если это вас беспокоит. ОПЦИИ MSGLEVEL = Я дам вам информацию об использовании индекса, сведениях о слиянии и т. Д., Что может быть полезно, если вы не знаете, почему это занимает много времени, чтобы сделать определенные вещи (см. http://goo.gl/bpGWL в документации SAS для получения дополнительной информации). Вы можете написать свой собственный штамп времени:

data test; 
set sashelp.class sashelp.class; 
_t=time(); 
put _t=; 
run; 

Шансы, что не будет показывать вам много использования, поскольку большинство шагов данных итераций не займет очень много времени, но если вы делаете что-то фантазии, это может помочь. Вы также можете использовать условные операторы только для печати времени через определенные промежутки времени - например, при FIRST.ID в процессе, который работает BY ID ;.

В конечном счете, хотя информация, которую вы уже получили из заметок, является наиболее полезной. В PROC SQL вам нужна информация STIMER, поскольку SQL выполняет сразу несколько действий, в то время как SAS позволяет/заставляет вас делать все пошагово. Пример:

PROC SQL; 
create table X as select * from A,B where A.ID=B.ID; 
quit; 

является один шаг - но в SAS это будет:

proc sort data=a; by ID; run; 
proc sort data=b; by ID; run; 
data x; 
merge a(in=a) b(in=b); 
by id; 
if a and b; 
run; 

Для этого вы получите информацию о продолжительности каждого из этих этапов (двух сортов и слияния) в SAS, что похоже на то, что STIMER скажет вам.

+1

+1 Хороший ответ. Вы можете уточнить, что поиск в хеш-таблице довольно мгновен (они занимают столько времени, сколько требуется для хеш-значения, которое в принципе ничего не значит, поскольку алгоритм хэширования очень эффективен), но загрузка хэш-таблицы в память может занять некоторое время , –

-1

Ни в коем случае. PROC SQL STIMER время регистрации для каждого отдельно исполняемого SQL-запроса/запроса. На шаге данных, как вы, возможно, знаете, происходит цикл петли данных, наблюдение за наблюдением, поэтому синхронизация времени шага данных будет чем-то вроде наблюдения, скажем, транзакционного. Во всяком случае, это не будет описывать все детали, где время расходуется - ожидание чтения, записи и т. Д. Так что, я думаю, это не очень удобно. В общем, производительность SAS - это ввод-вывод.