Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

зависание приложения при выполнении запроса [D5, IB или FB]


Страницы:   1 2

GanibalLector ©   (2004-07-28 23:25:00) 

Имеется запрос (сложный запрос)так вот,когда я его создавал,то тестил на своей базе,где было небольшое кол-во данных.Все прекрасно работало.Так вот,когда пришел к клиенту и запустил этот запрос на реальной базе,то приложение просто повисло.Запустил его в IBExpert результат тот же.В чем трабл ???


Johnmen   (2004-07-30 09:28:00) [1]

Кстати. Всю процедуру НУЛЬ2 можно заменить одним запросом.
select plu,MIN(num)
from part
where kol=0
group by plu
having count(plu)>1


GanibalLector   (2004-07-30 02:27:00) [2]

>Что бы твоей прогой пользоваться, придётся заказывать машинное время в каком-нибудь суперкомпьютерном центре в силиконовой долине

Зачем так???Просто когда приложение разрабатывалось,заказчик не уточнил некоторые детали,которые всплыли после года работы.
После переговоров с заказчиком,тот согласился с доп.оплатой и написанием новой,более продуктивной версии.


VID   (2004-07-30 01:38:00) [3]

GanibalLector ©   (30.07.04 01:24) [21]
Что бы твоей прогой пользоваться, придётся заказывать машинное время в каком-нибудь суперкомпьютерном центре в силиконовой долине :)


GanibalLector   (2004-07-30 01:24:00) [4]

ВСЕМ СПАСИБО.
Запрос мой за ночь выполнился.7 часов потребовалось.После удаления данных из того запроса,запрос выполняется мгновенно(оно и понятно...за день может быть несколько нулевых партий).

Сделал вывод:переделать логику программы.Вот ЩА и начну...

З.Ы. По совету мастеров,создал индекс на поле num.Запустил...ждал около 30мин. дальше было в лом ждать...не выполнился.Но,все равно спасибо.


Johnmen   (2004-07-29 16:16:00) [5]

>Sergey Masloff   (29.07.04 16:10) [19]

Пардон :0) Это же вью ! А я как-то в одну кучу все НУЛИ :)))


Sergey Masloff   (2004-07-29 16:10:00) [6]

Johnmen ©   (29.07.04 16:08) [18]
>У ZERO1 нет выходных параметров. Как что работает....
А какие у вьюхи выходные параметры? ;-)


Johnmen   (2004-07-29 16:08:00) [7]

Прикольно....:)
У ZERO1 нет выходных параметров. Как что работает....


Desdechado   (2004-07-29 15:57:00) [8]

Да у тебя вьюха с подзапросом и ХП с подзапросом.
Подзапрос здесь будет выполняться на каждую строку основного запроса.
А еще объединение результатов ХП с вьюхой индексы вообще не использует.
Ты план посмотри. И замени подзапросы на объединения.


ЮЮ   (2004-07-29 03:04:00) [9]

>Кстати...к зависанию приводит также и это :
>select * from  zero1

а чего еще ожидать от
select plu,num from part where plu in(
select plu from part group by plu having count(plu)>1 )
and kol=0;

а учитывая "Не...низя.Логика не позволяет.Существуют партии с одиноковыми plu и num." следует признать, что во время проектирования БД логика вообще отдыхала.


GanibalLector   (2004-07-29 02:32:00) [10]

2 GanibalLector ©   (29.07.04 01:01) [13]
Да что там...два поля всего основных.Поставлю на оба.

Не...низя.Логика не позволяет.Существуют партии с одиноковыми plu и num.

2 Sergey Masloff   (28.07.04 23:44) [3]
коррелированый подзапрос работающий не по индексу даст то же самое "быстродействие"

А это как???Где читать?


GanibalLector   (2004-07-29 01:02:00) [11]

Кстати...к зависанию приводит также и это :

select * from  zero1
или
select * from  zero2


GanibalLector   (2004-07-29 01:01:00) [12]

>Вопрос в том, чтобы поставить нужные индексы
Да что там...два поля всего основных.Поставлю на оба.


GanibalLector   (2004-07-29 00:58:00) [13]

>А еще лучше - приведи запрос в студию

CREATE VIEW ZERO1(PLU,NUM)
AS
select plu,num from part where plu in(
select plu from part group by plu having count(plu)>1 ) and kol=0;

CREATE PROCEDURE ZERO2
RETURNS (
   PLU CHAR(5) CHARACTER SET NONE,
   NUM CHAR(8) CHARACTER SET NONE)
AS
DECLARE VARIABLE MM1 CHAR(5);
DECLARE VARIABLE MM CHAR(5);
begin
mm='';mm1='';
for select plu,num from part where plu in(
select plu from part group by plu having count(plu)>1 )
and kol=0 into :plu,:num do
begin
if ((plu=mm) and (mm<>mm1)) then begin
                                   suspend;
                                   mm1=mm;
                                   end
mm=plu;
 end
end

САМ ЗАПРОС:
select zero1.plu, zero1.num from ZERO1  left join  zero2 on (zero1.num=zero2.num)
where zero2.num is null


Vlad   (2004-07-29 00:54:00) [14]


> GanibalLector ©   (29.07.04 00:51) [9]


> Хорошо,ЩА поставлю индексы

Вопрос в том, чтобы поставить нужныеиндексы

> Вопрос...на сколько увеличится время выполнения???

Думаю что не НА сколько а ВО сколько... Вобщем - значительно.

А еще лучше - приведи запрос в студию.


DrPass   (2004-07-29 00:54:00) [15]


> Вопрос...на сколько увеличится время выполнения???

По идее, оно все-таки уменьшится. А насколько - это зависит от того, КАК ты будешь создавать индексы. Если у тебя большие таблицы, и нет индексов/ключей (!!!), то может ускориться в несколько сотен раз...


GanibalLector   (2004-07-29 00:51:00) [16]

>Лучше займись оптимизацией самого SQL запроса и создай необходимые индексы

Да вроде и так оптимизировал по самые помидоры.Хорошо,ЩА поставлю индексы.Вопрос...на сколько увеличится время выполнения???


Vlad   (2004-07-29 00:45:00) [17]


> GanibalLector ©   (29.07.04 00:40) [6]

Не надо заниматься ерундой. Тем более, подозреваю оно тебе не надо (потоки). Лучше займись оптимизацией самого SQL запроса и создай необходимые индексы


Vlad   (2004-07-29 00:42:00) [18]

Нет, вечный цикл тут не причем.
Долгие и неоптимизированные запросы действительно сжирают все ресурсы (во всяком случае в IB) и приложение не реагирует внешние воздействия.


GanibalLector   (2004-07-29 00:40:00) [19]

2 jack128
Хорошо...с этим вроде разобрались.
Еще вопросик...Теперь задача будет стоять в запуске отдельного потока и выполнении этого длительного запроса.Насколько мне помниться...вроде нельзя обращаться к компонентам из потока.Как быть ???


jack128   (2004-07-29 00:25:00) [20]


> Странно...а почему тогда при нажатии трех заветных клавиш
> "Диспетчер задач" говорит,что приложение "не отвечает".Или
> это нормально???
Сергей под "завис" подрузамевает, как мне кажется, вхождение программы в бесконечный цикл.

если на пишу
sleep(100000) то диспетчер напишет тоже самое..


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо