Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выполнение очень долгого запроса. / 25 сообщений из 51, страница 1 из 3
24.11.2003, 15:28
    #32333147
Death
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Здравствуйте. Ситуация следующая. При вставке записи в определенную таблицу, сробатывает не слабый триггер, который добовляет множество записей в ряд других таблиц. Выполняется такой запрос долго и в итоге вылазит ошибка с кодом 693 335544663, что интерпритируется как Too many concurrent executions of the same request. Работаю через IBX
Я пробовал задать в IBTransaction1.IdleTimer очень большое значение, например 1000000, но это не помогает. Кто нить знает, как можно решить эту проблему? Спасибо.
...
Рейтинг: 0 / 0
24.11.2003, 16:39
    #32333280
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
А не циклится ли тригер?

Best regards,
Dnico.
...
Рейтинг: 0 / 0
24.11.2003, 16:40
    #32333281
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Это ж сколько записей надо вставить чтобы такое вылезло? !!!
...
Рейтинг: 0 / 0
24.11.2003, 16:42
    #32333283
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Я один раз папку саму в себя стал копировать ... красиво получилось!
Best regards,
Dnico.
...
Рейтинг: 0 / 0
24.11.2003, 16:42
    #32333285
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Да, поподробнее, пожалуйста
...
Рейтинг: 0 / 0
05.12.2003, 18:09
    #32345344
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
А с чем может быть связано очень долгое выполнение (зависание? не хватило терпения ждать больше 15ти минут ;P),
с небольшой (~5%) при этом загрузкой процессора, следующего запроса :
create view q1
(ID, ORGNAME, SERVICEPERCENT)
as select distinct
a.ID, a.ORGNAME, a.SERVICEPERCENT
from
INTERMED a, ORD b
where ((a.ID = b.ID) and
(b.DATEJOIN >= :D1 and b.DATEJOIN <= :D2 ))

UNION ALL

select distinct
a.ID as ID, a.ORGNAME as ORGNAME,
a.SERVICEPERCENT as SERVICEPERCENT
from
INTERMED a, FULFILDOC c, ORDITEMSTATE d, ORD e
where
( (a.ID = e.ID) and (d.ORDNUM = e.NUM) and
(c.NUM = d.FFDOCNUM) and (c.FFDOCT = 'L' OR c.FFDOCT = 'R')
and (c.INPDATE >= :D1 and c.INPDATE <= :D2 ) )

на БД ~10тиметрвого объема ?
...
Рейтинг: 0 / 0
05.12.2003, 18:43
    #32345392
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Ну во первых сам запрос очень тяжёлый (DISTINCT). Во вторых могут быть неправильно построены или использованы индексы и в третих - мог просто мусор из базы удаляться, к апримеру.
...
Рейтинг: 0 / 0
05.12.2003, 19:23
    #32345416
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
С индексами вроде всё ок...
База сейчас локальна и зависание повторяется при повторных запусках -
не мусор..
...
Рейтинг: 0 / 0
05.12.2003, 20:41
    #32345455
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
А попробуй выполнить оба эти запроса не через view а напрямую.... И сначала без distinct-а, а потом с distinct-ом. И все время смотри планы запросов...

Кстати, попробуй перед эти провести validation с Record Fragment.Enabled:=True. Небось без Forced write работаешь.
...
Рейтинг: 0 / 0
08.12.2003, 13:18
    #32346355
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Без создания viewa выполняется нормально..
Кстати, попробуй перед эти провести validation с Record Fragment.Enabled:=True. Небось без Forced write работаешь.
Как (чем) проводится validation и где прописывается forced write ?)
...
Рейтинг: 0 / 0
08.12.2003, 13:32
    #32346368
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
- IBConsole
- регистрируешь локальный сервер
- подключаешься кнему
- регистрируешь свою базу
- правой мышкой по базе, пункт меню Validation

- подключаешся к базе
- правой мышкой по базе, пункт меню Properties, вкладка General, внизу Forced Writes
...
Рейтинг: 0 / 0
08.12.2003, 14:47
    #32346520
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Validation проходит нормально, forced writes был и остается enabled.
Виснуть сейчас перестало, но viewы создает _пустые_ хотя
соответствующие им запросы прекрасно выполняются
...
Рейтинг: 0 / 0
08.12.2003, 14:53
    #32346530
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Выполняются с нормальным ненулевым результатом.
Просто там для отчета выбираются данные в несколько viewов и потом сливаются в одну табличку.
Курсоры в IB 7.0 я не нашел как заставить работать,
делать все в виде одного запроса будет слишком (монстровая такая структура получится ) ),
viewы выглядят тут наиболее естественно... Но не работают)
...
Рейтинг: 0 / 0
08.12.2003, 15:00
    #32346541
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Вот нафига View использовать? Есть же ХП!!!



Best regards,
Dnico.
...
Рейтинг: 0 / 0
08.12.2003, 15:24
    #32346594
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Viewы проще и для отчетов их наиболее естественно использовать
Если б работали
...
Рейтинг: 0 / 0
08.12.2003, 15:57
    #32346674
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Мда.. оказывается внутри viewов нельзя использовать cast() : убрал - заработало
Дурдом...
...
Рейтинг: 0 / 0
08.12.2003, 17:03
    #32346803
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
ХП - тот же View, только там можно использовать все что угодно и как угодно!

Best regards,
Dnico.
...
Рейтинг: 0 / 0
08.12.2003, 17:32
    #32346854
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
А удалить ХП после работы прога сможет?
Синтаксис запроса подскажите если да.
...
Рейтинг: 0 / 0
08.12.2003, 17:40
    #32346879
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Можно, но зачем? ХП пишется один раз и навсегда.

Best regards,
Dnico.
...
Рейтинг: 0 / 0
08.12.2003, 18:00
    #32346907
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Только надо провильно установить типы для
ID INTEGER, ORGNAME, SERVICEPERCENT

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE PROCEDURE NEW_PROCEDURE (
    D1 DATE,
    D2 DATE)
RETURNS (
    ID INTEGER,
    ORGNAME INTEGER,
    SERVICEPERCENT INTEGER)
AS
BEGIN

  FOR SELECT DISTINCT a.ID, a.ORGNAME, a.SERVICEPERCENT
  FROM INTERMED a
  JOIN ORD b ON (a.ID = b.ID)
  WHERE b.DATEJOIN BETWEEN (:D1 AND :D2) DO BEGIN
    SUSPEND;
  END

  FOR SELECT DISTINCT a.ID, a.ORGNAME, a.SERVICEPERCENT
  FROM INTERMED a
  JOIN ORD e ON (a.ID = e.ID)
  JOIN FULFILDOC c ON (c.NUM = d.FFDOCNUM)
  JOIN ORDITEMSTATE d ON (d.ORDNUM = e.NUM)
  WHERE (c.FFDOCT = 'L' OR c.FFDOCT = 'R') AND c.INPDATE BETWEEN (:D1 AND :D2)
  INTO :ID, :ORGNAME, :SERVICEPERCENT DO BEGIN
    SUSPEND;
  END

END


Best regards,
Dnico.
...
Рейтинг: 0 / 0
08.12.2003, 18:10
    #32346922
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Удалять надо чтобы базу не засорять -
отчет это дело клиентского приложения и если требования к нему изменятся,
то хотелось бы при этом изменить только саму программу, и не лезть в базу.
...
Рейтинг: 0 / 0
09.12.2003, 10:27
    #32347420
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
hyh
Ну тогда удаляй себе на здоровье!

DROP PROCEDURE NEW_PROCEDURE;

Best regards,
Dnico.
...
Рейтинг: 0 / 0
09.12.2003, 11:00
    #32347486
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
>этом изменить только саму программу, и не лезть в базу
А "create/drop procedure" это не лазание в базу :)

Еще вы явно нестрадаете предубежденностью в вопросе о модификации метеденных.

Вообще конечно интересный подход с точки зрения оптимизации.
IMHO оправдан только если
(компиляция SP)+(запись в метаданные) дольше чем (построение плана для запроса)
А такое возможно только для очень сложного запроса выполняемого более 1 раза.
...
Рейтинг: 0 / 0
09.12.2003, 11:46
    #32347554
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
Лазание при изменении постановки задачи))
А когда на клиенте в начате работы программки она создается,
в конце удаляется, то для изменения трогается только программа, а не сама база.
К тому же прога в дальнейшем будет работать с несколькими базами,
каждая из которых и так немаленькая и с десятком-другим процедур
...
Рейтинг: 0 / 0
09.12.2003, 11:53
    #32347563
hyh
hyh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение очень долгого запроса.
А про запросы.. Ну сами напросились)

Основной :
select q1.ID, q1.ORGNAME,
q1.SERVICEPERCENT, q2.ZT, q3.CC, qL.LT, qR.RT
from q1
full outer join q2 on (q2.ID = q1.ID)
full outer join q3 on (q3.ID= q1.ID)
full outer join qL on (qL.ID= q1.ID)
full outer join qR on (qR.ID= q1.ID)
order by q1.ID

_____
create view q1
(ID, ORGNAME, SERVICEPERCENT)
as select distinct
a.ID as ID, a.ORGNAME as ORGNAME, a.SERVICEPERCENT as SERVICEPERCENT
from
INTERMED a, ORD b
where ((a.ID = b.ID)
)

UNION

select distinct
a.ID as ID, a.ORGNAME as ORGNAME,
a.SERVICEPERCENT as SERVICEPERCENT
from
INTERMED a, FULFILDOC c, ORDITEMSTATE d, ORD e
where
( (a.ID = e.ID) and (d.ORDNUM = e.NUM) and
(c.NUM = d.FFDOCNUM) and (c.FFDOCT = 'L' OR c.FFDOCT = 'R')
)
_____
create view q2
(ID, ZT)
as select ID, sum(TOTAL) as ZT from ORD
where (DATEJOIN not NULL)
group by ID
_____
create view q3
(ID, CC)
as select ID, count (DISTINCT CLNUM) as CC from ORD
where DATEJOIN not NULL
group by ID
_____
create view qL
(ID, LT)
as select a.ID, sum (b.TOTAL) as LT
from
INTERMED a, ORDITEM b, FULFILDOC c, ORDITEMSTATE d, ORD e
where
( (a.ID = e.ID) and (d.ORDNUM = e.NUM) and
(b.ITEMNUM = d.ITEMNUM) and
(b.ORDNUM = d.ORDNUM) and
(c.NUM = d.FFDOCNUM) and (c.FFDOCT = 'L')
)
group by a.ID
_____
create view qR
(ID, RT)
as select a.ID, sum (b.TOTAL) as RT
from
INTERMED a, ORDITEM b, FULFILDOC c, ORDITEMSTATE d, ORD e
where
( (a.ID = e.ID) and (d.ORDNUM = e.NUM) and
(b.ITEMNUM = d.ITEMNUM) and
(b.ORDNUM = d.ORDNUM) and
(c.NUM = d.FFDOCNUM) and (c.FFDOCT = 'R')
)
group by a.ID
_____

Вызываться основной запрос будет несколько раз подряд (просмотр отчетов за разные периоды)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выполнение очень долгого запроса. / 25 сообщений из 51, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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