Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Длинный запрос никогда не заканчивается / 23 сообщений из 23, страница 1 из 1
13.08.2014, 10:30
    #38719038
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Добрый день.
Есть сервер cache и asp.net приложение, которое выполняет пользовательские запросы. Один запрос выполняется приблизительно 3.5 часа, но выполняется он нормально только из той же сети, где он находится сам сервер. Дело в том, что в организации несколько зданий и когда пользователи, расположенные в другом удаленном здании запускают этот запрос, internet explorer пишет, что ждет данные, но завершатся эта процедура не завершается... Можно параллельно запустить это приложение на сервере и на удаленной машине и видно, что на сервере процесс завершится, а на удаленной машине так и будет проигрываться анимация получения данных от сервера. Пробовал запускать на удаленной машине запрос через winsql и он как положено через 3.5 часа отработал. В чем может быть дело?
...
Рейтинг: 0 / 0
13.08.2014, 10:36
    #38719052
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Если есть такие запросы, значит в приложении что-то не так сделано, все что касается веб не должно быть таким долгим.
проблема может крыть в работе по сети, и единственное верное решение это переделать так чтобы либо браузер мог выполнять короткие запросы к фоновому долгому процессу, либо сделать этот запрос проще а еще лучше поработать над его оптимизацией.
...
Рейтинг: 0 / 0
13.08.2014, 10:37
    #38719055
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Еще пробовал запускать ping с удаленной машины на сервер и раз в пол часа проскакивает "превышен интервал ожидания"...
...
Рейтинг: 0 / 0
13.08.2014, 10:39
    #38719056
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
dizzy1984Еще пробовал запускать ping с удаленной машины на сервер и раз в пол часа проскакивает "превышен интервал ожидания"...тогда решайте проблемы с сетью, Cache на пинги не влияет
...
Рейтинг: 0 / 0
13.08.2014, 10:39
    #38719062
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Запрос составлял я сам, изначально он выполнялся 19 часов. После оптимизации 3.5.
Вот, если интересно его текстselect
  count(*) as "Количество платежей по инкассо",
  sum("sum") as "Сумма платежей по инкассо"
from
  ASV_Entities.Payment p
where
  not p.PayDocumentFK->Purpose is null
  and exists (select documentnumber from ASV_Entities.Resolution r where $FIND(p.PayDocumentFK->Purpose, r.documentnumber ) <> 0 and r.DateCreate between '2014-01-01' and '2014-12-31')
  and p.CreatorStatusFK->code in ('04', '23')
  and p.insurerfk->territorydptpfrfk->ID=055004
...
Рейтинг: 0 / 0
13.08.2014, 10:52
    #38719077
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Это вы хорошо оптимизировали, но явно этого еще не достаточно и еще есть куда стремиться

В данном случае есть у вас период по которому отлично можно этот запрос и разбить
разбив его на какие-то разумные интервалы, можно выполнить больше запросов, но с нормальным откликом для системы, можно будет даже прогресс нарисовать, и порционную подгрузку данных
сколько же у вас там записей, что у вас запрос за год (при том что пока только полгода), выполняется 3.5 часа, т.е. я полагаю где-то день за минуту расчитывается
у вас там используется функция $find? может попробовать от нее избавиться ? выделив это значение в отдельное поле с индексом для него
...
Рейтинг: 0 / 0
13.08.2014, 11:11
    #38719102
Александр Коблов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
dizzy1984,

А какая у вас версия Cache? Можете план запроса показать? Вы TuneTable запускали для ASV_Entities.Payment?
...
Рейтинг: 0 / 0
13.08.2014, 11:26
    #38719131
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
dizzy1984,

а так не пробовалиselect count(*) as "Количество платежей по инкассо",
 sum("sum") as "Сумма платежей по инкассо"
 from ASV_Entities.Payment p
where
not p.PayDocumentFK->Purpose is null
  and p.insurerfk->territorydptpfrfk->ID=055004
  and p.CreatorStatusFK->code in ('04', '23')
  and    exists (select documentnumber
     from ASV_Entities.Resolution r
     where $FIND( p.PayDocumentFK->Purpose, r.documentnumber ) <> 0
      and r.DateCreate between '2014-01-01' and '2014-12-31')
...
Рейтинг: 0 / 0
13.08.2014, 12:04
    #38719177
Petr0vi4444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Если известно как из p.PayDocumentFK->Purpose вырезать номера документов, то можно его проиндексировать и использовать FOR SOME %ELEMENT.

И нет смысла использовать $FIND, если не требуется результат. [ будет работать быстрее.
...
Рейтинг: 0 / 0
13.08.2014, 13:18
    #38719285
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Дело в том, что сам сервер это часть веб-сервиса, предназначенного для выполнения рабочих обязанностей, и что-то менять в базе данных я не могу. Похожая ситуация и с asp.net приложением, хотя что вы предлагаете разбивать с прогрессбаром, если результат - 2 числа.
...
Рейтинг: 0 / 0
13.08.2014, 13:25
    #38719308
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
dizzy1984хотя что вы предлагаете разбивать с прогрессбаромпрогресс выполнения запроса, ведь если запрос выполняется 3.5 часа, очень интересно видеть сколько он уже посчитал в определенный момент времени
...
Рейтинг: 0 / 0
13.08.2014, 13:50
    #38719346
Petr0vi4444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
3,5 часа ждать ДВА значения - это какие нервы надо иметь железные)

Если класс менять нельзя, можно подготовить какие-то данные перед запросом (быть может documentnumber из ASV_Entities.Resolution?), сложить их во временный глобал, а потом использовать.
...
Рейтинг: 0 / 0
14.08.2014, 06:27
    #38719919
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
ПЕНСИОНЕРКА, попробовал ваш вариант - выполняется 4часа.
...
Рейтинг: 0 / 0
14.08.2014, 12:03
    #38720109
Petr0vi4444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
dizzy1984,

Заменить $FIND на [ пробовали?
...
Рейтинг: 0 / 0
14.08.2014, 18:53
    #38720703
eduard93
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Если интересует только год, то условие:r.DateCreate between '2014-01-01' and '2014-12-31'Можно представить как:$EXTRACT(r.DateCreate,1,4) = 2010Время выполнения может несколько уменьшиться.
Вот возможные варианты, $EXTRACT самый быстрый из всех (область samples)select ID, EventDate, EventId, EventTime
from Aviation.Event where $EXTRACT(EventDate,1,4) = 2010 --Относительная стоимость = 11120400 Быстродействие: 0.024

select ID, EventDate, EventId, EventTime
from Aviation.Event where $PIECE(EventDate,'-',1) = 2010 --Относительная стоимость = 11120400 Быстродействие: 0.029

select ID, EventDate, EventId, EventTime
from Aviation.Event where YEAR(EventDate)=2010 --Относительная стоимость = 11120400 Быстродействие: 0.029 Секунды

select ID, EventDate, EventId, EventTime
from Aviation.Event where EventDate between '2010-01-01' and '2010-12-31' --Относительная стоимость = 11120400 Быстродействие: 0.030 Секунды

select ID, EventDate, EventId, EventTime
from Aviation.Event where DATEPART('yy',EventDate) = 2010 --Относительная стоимость = 11120400 Быстродействие: 0.064
...
Рейтинг: 0 / 0
15.08.2014, 11:07
    #38721015
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
dizzy1984, запрос это здорово, еще бы код участвующих в нем классов-свойств-индексов
...
Рейтинг: 0 / 0
20.08.2014, 12:04
    #38724292
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
>Заменить $FIND на [ пробовали?
На что заменить? Я знаю like и $find, а квадратная скобочка причем?
...
Рейтинг: 0 / 0
20.08.2014, 12:10
    #38724304
Petr0vi4444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
...
Рейтинг: 0 / 0
20.08.2014, 14:16
    #38724527
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
dizzy1984,

по своим access привычкам я бы делала по схемеselect p.PayDocumentFK,count(*) as "Количество платежей по инкассо",
 sum("sum") as "Сумма платежей по инкассо"
 from ASV_Entities.Payment p inner join 
 (select documentnumber as d2
   from ASV_Entities.Resolution r
   where  r.DateCreate between '2014-01-01' and '2014-12-31'
   group by documentnumber) w on p.PayDocumentFK=w.d2

where p.insurerfk->territorydptpfrfk->ID=055004
  and p.CreatorStatusFK->code in ('04', '23')
group by p.PayDocumentFK
...
Рейтинг: 0 / 0
27.08.2014, 14:54
    #38730415
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Проблема решилась - оказалось, что в oper'e 20 все выполняется даже на удаленных машинах.
Попробовал разные предложенные варианты - получилось 3ч48м и 3ч46м.
Вообщем всем спасибо
...
Рейтинг: 0 / 0
27.08.2014, 22:55
    #38731000
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
Petr0vi4444И нет смысла использовать $FIND, если не требуется результат. [ будет работать быстрее.Это совершенно не очевидно; по моим наблюдениям, если ищется переменная, разница в скорости несущественна, но если ищется литерал, $find выигрывает в разы!
Почему это так? Возможно, потому, что появление [ инициирует вычисление строкового выражения (работу со строковым стеком и т.д.), а в случае вызова функции этих накладных расходов нет.
...
Рейтинг: 0 / 0
28.08.2014, 16:43
    #38731911
D_De1mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
По датам, если отсекать по году, достаточно сделать DateCreate %StartsWith '2014' и это будет работать, используя индекс по максимуму (если он есть)
...
Рейтинг: 0 / 0
23.09.2014, 18:56
    #38755161
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Длинный запрос никогда не заканчивается
eduard93Если интересует только год, то условие:r.DateCreate between '2014-01-01' and '2014-12-31'Можно представить как:$EXTRACT(r.DateCreate,1,4) = 2010Время выполнения может несколько уменьшиться.
Вот возможные варианты, $EXTRACT самый быстрый из всех (область samples)Самый быстрый вариант - это сделать индекс на дату, но только по году: описание "How it's Made" есть в блоге (Глава " Дата (время и т.д) ").
D_De1mosПо датам, если отсекать по году, достаточно сделать DateCreate %StartsWith '2014' и это будет работать, используя индекс по максимуму (если он есть)Вряд ли поле DateCreate у ТС является строковым.

dizzy1984 ,

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

PS: в последних версиях СУБД появились новые инструменты для анализа производительности SQL:
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Длинный запрос никогда не заканчивается / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]