Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Долго выполняется скрипт  [new]
Викинг_Tyler
Member

Откуда:
Сообщений: 81
Привет всем

Есть скрипт следующего вида
[блок DECLARE]

PRINT 'блок SELECT INTO 1'
[блок SELECT INTO 1]

PRINT 'блок SELECT INTO 2'
[блок SELECT INTO 2]

PRINT 'блок SELECT 3'
[блок SELECT 3]

PRINT 'блок DELETE 4'
[блок DELETE 4]


Возникает 2 проблемы:
1. Если я выполняю каждый блок по отдельности - время выполнения < 1 сек
Когда все выполняется скриптом - время выполнения ~15 мин
2. Принты не отображаются, пока не выполнится весь скрипт. Т. е. я не могу понять, на каком этапе сейчас мой скрипт.

Подскажите пожалуйста, как можно побороть данные проблемы.
Спасибо
12 июн 15, 12:13    [17763602]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Викинг_Tyler
Принты не отображаются,

потому что принты не отображаются сразу после их выполнения

Викинг_Tyler
Т. е. я не могу понять, на каком этапе сейчас мой скрипт.

Для таких целей используют Профайлер. Который еще и корретно замерит время выполнения и нагрузку запроса
12 июн 15, 12:15    [17763604]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
Викинг_Tyler
на каком этапе сейчас мой скрипт.


Можно трассу собрать и по столбцу Duration отследить, что долго выполняется.
12 июн 15, 12:17    [17763606]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
Glory,

Опередил )))
12 июн 15, 12:17    [17763610]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Викинг_Tyler
1. Если я выполняю каждый блок по отдельности - время выполнения < 1 сек
Когда все выполняется скриптом - время выполнения ~15 мин
Скорее всего, выполняются разные команды; например, при выполнении блока параметры подставляются явно.
12 июн 15, 21:36    [17765423]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Викинг_Tyler
1. Если я выполняю каждый блок по отдельности - время выполнения < 1 сек
Когда все выполняется скриптом - время выполнения ~15 мин
Ну и как же вы выполняете блоки по отдельности от блока DECLARE ?
12 июн 15, 22:13    [17765547]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Mind
Викинг_Tyler
1. Если я выполняю каждый блок по отдельности - время выполнения < 1 сек
Когда все выполняется скриптом - время выполнения ~15 мин
Ну и как же вы выполняете блоки по отдельности от блока DECLARE ?
Ну как, как - сервер пишет про ошибку компиляции. Но главное, быстро работает, зараза!
13 июн 15, 12:42    [17766619]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Викинг_Tyler
Принты не отображаются, пока не выполнится весь скрипт
Надо
RAISERROR('блок SELECT INTO 1',0,0) WITH NOWAIT;
13 июн 15, 17:02    [17767018]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Викинг_Tyler
Привет всем

Есть скрипт следующего вида

..Да просто объявить 4 переменных datetime в начале, а между блоками воткнуть select @dtX = getdate()
а в конце посчитать время между блоками с datediff(ms, ......
14 июн 15, 00:14    [17768221]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Викинг_Tyler
Member

Откуда:
Сообщений: 81
Mind
Викинг_Tyler
1. Если я выполняю каждый блок по отдельности - время выполнения < 1 сек
Когда все выполняется скриптом - время выполнения ~15 мин
Ну и как же вы выполняете блоки по отдельности от блока DECLARE ?

Копирую и блока DECLARE. Это же очевидно

alexeyvg
Mind
пропущено...
Ну и как же вы выполняете блоки по отдельности от блока DECLARE ?
Ну как, как - сервер пишет про ошибку компиляции. Но главное, быстро работает, зараза!

Не отбирайте у Петросяна хлеб :)
15 июн 15, 10:15    [17770858]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Викинг_Tyler
Копирую и блока DECLARE. Это же очевидно

Тогда для вас должно быть еще более очевидным решение - выполняйте свои "блоки" по отдельносьти
15 июн 15, 10:17    [17770867]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Викинг_Tyler
Member

Откуда:
Сообщений: 81
Нашел слабое место, но вот как его поправить не пойму :(
Есть запрос вида
SELECT tick1.rownum,
tick1.id,
       MAX( tick1.Balance ) AS balance,
	  SUM( ISNULL( tick2.Balance,0 )) + MAX( tick1.Balance ) AS summa
  FROM #TempT AS tick1
       LEFT OUTER JOIN #TempT tick2 ON tick2.rownum < tick1.rownum
  GROUP BY tick1.rownum,
           tick1.id
  HAVING SUM( ISNULL( tick2.Balance,0 )) + MAX( tick1.Balance ) < 100000

Но после того, как summa достигла указанного условия, скрипт продолжает свою работу, видимо пока не пройдется по всем записям.
Почему так происходит?

Спасибо.
15 июн 15, 10:19    [17770883]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Викинг_Tyler
Member

Откуда:
Сообщений: 81
Glory
Викинг_Tyler
Копирую и блока DECLARE. Это же очевидно

Тогда для вас должно быть еще более очевидным решение - выполняйте свои "блоки" по отдельносьти

Удобней запускать одним скриптом
15 июн 15, 10:21    [17770891]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Викинг_Tyler
Но после того, как summa достигла указанного условия, скрипт продолжает свою работу, видимо пока не пройдется по всем записям.

Это вы запрос называете скриптом ?

Викинг_Tyler
Почему так происходит?

Потому что запрос выполняется целиком. Он не может выполняться частями.
15 июн 15, 10:21    [17770892]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Викинг_Tyler
Glory
пропущено...

Тогда для вас должно быть еще более очевидным решение - выполняйте свои "блоки" по отдельносьти

Удобней запускать одним скриптом

Так вам удобнее или быстрее ?
15 июн 15, 10:22    [17770893]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Викинг_Tyler
Member

Откуда:
Сообщений: 81
[quot Glory]
Викинг_Tyler
Но после того, как summa достигла указанного условия, скрипт продолжает свою работу, видимо пока не пройдется по всем записям.

Это вы запрос называете скриптом ?
да, опечатался. Запрос я имел ввиду
15 июн 15, 10:24    [17770908]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Викинг_Tyler
да, опечатался. Запрос я имел ввиду

Запрос выполняется целиком. И в нем нет "лишних" действий
15 июн 15, 10:26    [17770914]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Викинг_Tyler
Member

Откуда:
Сообщений: 81
Glory
Викинг_Tyler
да, опечатался. Запрос я имел ввиду

Запрос выполняется целиком. И в нем нет "лишних" действий

Ясно, спасибо
15 июн 15, 10:26    [17770917]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
stdvb
Member

Откуда:
Сообщений: 43
Викинг_Tyler
Нашел слабое место, но вот как его поправить не пойму :(
Есть запрос вида
SELECT tick1.rownum,
tick1.id,
       MAX( tick1.Balance ) AS balance,
	  SUM( ISNULL( tick2.Balance,0 )) + MAX( tick1.Balance ) AS summa
  FROM #TempT AS tick1
       LEFT OUTER JOIN #TempT tick2 ON tick2.rownum < tick1.rownum
  GROUP BY tick1.rownum,
           tick1.id
  HAVING SUM( ISNULL( tick2.Balance,0 )) + MAX( tick1.Balance ) < 100000

Но после того, как summa достигла указанного условия, скрипт продолжает свою работу, видимо пока не пройдется по всем записям.
Почему так происходит?

Спасибо.


Может как-то побыстрее переписать?
with cte as (
select	rownum, id, Balance,
	SUM(Balance) over(order by rownum rows unbounded preceding) AS summa
from	#TempT
)
select *
from cte
where summa < 100000
15 июн 15, 11:38    [17771209]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется скрипт  [new]
Викинг_Tyler
Member

Откуда:
Сообщений: 81
stdvb
Викинг_Tyler
Нашел слабое место, но вот как его поправить не пойму :(
Есть запрос вида
SELECT tick1.rownum,
tick1.id,
       MAX( tick1.Balance ) AS balance,
	  SUM( ISNULL( tick2.Balance,0 )) + MAX( tick1.Balance ) AS summa
  FROM #TempT AS tick1
       LEFT OUTER JOIN #TempT tick2 ON tick2.rownum < tick1.rownum
  GROUP BY tick1.rownum,
           tick1.id
  HAVING SUM( ISNULL( tick2.Balance,0 )) + MAX( tick1.Balance ) < 100000

Но после того, как summa достигла указанного условия, скрипт продолжает свою работу, видимо пока не пройдется по всем записям.
Почему так происходит?

Спасибо.


Может как-то побыстрее переписать?
with cte as (
select	rownum, id, Balance,
	SUM(Balance) over(order by rownum rows unbounded preceding) AS summa
from	#TempT
)
select *
from cte
where summa < 100000


Спасибо. То что нужно. Вопрос закрыт.
15 июн 15, 13:53    [17771857]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить