Показать сообщение отдельно
Старый 16.03.2015, 15:04   #1  
N.D.P. is offline
N.D.P.
Участник
 
6 / 14 (1) ++
Регистрация: 18.07.2007
DAX 2009 - Трассировка долгих SQL-запросов в пакетном режиме
Доброго времени суток.

Кто-нибудь сталкивался с такой проблемой, как не работающая трассировка длинных SQL запросов в пакетном режиме?

Суть проблемы следующая: для тестового пользователя настроена трассировка длинных SQL запросов с отсечкой по апертуре в 20 мс. Есть код, который содержит запрос, который выполняется гарантированно дольше, чем 20 мс (класс Tutorial_RunBaseBatch):

X++:
public void run()
{
    int64 i;
    inventsettlement inventsettlement;

    #OCCRetryCount
    if (! this.validate())
        throw error("");

    try
    {

        i = WinAPIServer::getTickCount();

        select count(recId) from inventsettlement;

        info(strfmt("%1 ms", WinAPIServer::getTickCount() - i));
    }
    catch (Exception::Deadlock)
    {
        retry;
    }
    catch (Exception::UpdateConflict)
    {
        if (appl.ttsLevel() == 0)
        {
            if (xSession::currentRetryCount() >= #RetryNum)
            {
                throw Exception::UpdateConflictNotRecovered;
            }
            else
            {
                retry;
            }
        }
        else
        {
            throw Exception::UpdateConflict;
        }
    }

}
При запуске в клиентской сессии трассировка успешно выводится в инфолог и попадает в таблицу SysTraceTableSQL. При запуске в пакетном режиме - не попадает никуда (при этом в инфолог из кода выводится сообщение вида X ms, где X > 20, т.е. запрос работает точно дольше, чем настроенная отсечка). Пробовал, пользуясь глобальными брейкпоинтами ставить точку останова в Application.sysTrace - не вызывается.

Есть ли решение данной проблемы или трассировка запросов в пакетном режиме вообще не работает в принципе и нужно пользоваться профайлером SQL?

DAX 2009 SP1, kernel 5.0.1600.3900.
SQL 2008 R2 Enterprise (x64).
Windows Server 2008 R2 Enterprise (x64).