Почему оператор Print в T-SQL решил мою проблему с отчетностью?

#tsql #stored-procedures

#tsql #хранимые процедуры

Вопрос:

У меня есть сложный отчет, запущенный в T-SQL, который в анализаторе запросов работал нормально, но всякий раз, когда я запускал его из Интернета, время ожидания истекало. Итак, я пытаюсь выяснить, что происходит, и начать отладку с помощью операторов печати до и после каждого вызова. Проблема решена! Теперь веб-сайт загружает отчет быстрее, чем когда-либо загружал его, и все, что я сделал, это добавил print ‘1’, print’2′ и так далее вокруг каждого select nothing else . В противном случае я не изменил ни строчки кода. Я извлекаю эти операторы печати, и код снова взрывается. Из-за операторов печати я знаю, почему я получал ошибку. В одном из моих агрегатов было нулевое значение. Я все еще не устранил проблему с данными. Я не понимаю, почему это решило мою проблему, есть мысли?

Комментарии:

1. Вы что-то изменили и не осознали этого.

2. Возможно, перехват параметров. Когда вы добавили print операторы, вы изменили текст запроса, что означает, что он не соответствует существующему плану в кэше, и вы скомпилировали новый. Если это все еще воспроизводимо, проверьте планы выполнения для обеих версий.

3. Администраторы баз данных SE, вероятно, были бы немного более квалифицированными, чтобы ответить на этот вопрос. ( dba.stackexchange.com )

4. Если я что-то изменил и не понял этого, то почему я могу воспроизвести это, удалив операторы печати? Я предполагаю, что code fairy code отменяет то, что я сделал, о чем я не знаю, просто чтобы сбить меня с толку.

5. Планы выполнения выглядят одинаково. Я до сих пор не знаю, почему проблема была исправлена в Интернете, возможно, потому, что он вернул что-то с помощью инструкции print и сбросил период ожидания. Я все еще получаю ошибку в данных из нулевой ссылки, и я все еще получаю тайм-аут в Интернете, если я извлекаю операторы печати.

Ответ №1:

Если это длительный запрос, есть вероятность, что вы достигли периода ожидания, как сказал Варуукнал.

Добавление операторов print приведет к сбросу времени ожидания, и вашему запросу будет предоставлено больше времени для возврата основного набора результатов.

Я предлагаю вам либо упростить запрос, если это возможно, на этом сайте есть много людей, которые могли бы вам в этом помочь, либо вы можете увеличить время ожидания в вашем веб-приложении, которое вызывает эту процедуру / отчет для запуска.

Если вы хотите, чтобы кто-то исправил вашу проблему с агрегированным нулевым значением, дайте нам посмотреть запрос, и мы сможем дать несколько советов.

Комментарии:

1. «Добавление операторов печати приведет к сбросу времени ожидания». Звучит маловероятно для меня. Не будет ли тайм-аут команды с момента первой отправки запроса.