Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

зависание приложения при выполнении запроса   Найти похожие ветки 

 
GanibalLector ©   (2004-07-28 23:25) [0]

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


 
Vlad ©   (2004-07-28 23:35) [1]


> В чем трабл ???

Вероятнее всего - в самом запросе и/или отсутствии необходимых индексов.


 
Sergey Masloff   (2004-07-28 23:42) [2]

GanibalLector ©   (28.07.04 23:25)  
Ничего не зависло. Просто выполняется долго. Множишь где-то таблицы. И получается скажем порядка O(n^3) время выполнения. Такой запрос на 30 записях отработает за секунду а на 1000(в 30 раз больше записей) - за 8 часов.


 
Sergey Masloff   (2004-07-28 23:44) [3]

Да, если даже не множишь таблицы то коррелированый подхапрос работающий не по индексу даст то же самое "быстродействие" - Vlad(c) прав


 
GanibalLector ©   (2004-07-29 00:20) [4]

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


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


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

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


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

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


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

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


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


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

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


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

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

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


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


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

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


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


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


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

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

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

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

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


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

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

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


 
GanibalLector ©   (2004-07-29 01:01) [13]

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


 
GanibalLector ©   (2004-07-29 01:02) [14]

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

select * from  zero1
или
select * from  zero2


 
GanibalLector ©   (2004-07-29 02:32) [15]

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

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

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

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


 
ЮЮ ©   (2004-07-29 03:04) [16]

>Кстати...к зависанию приводит также и это :
>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." следует признать, что во время проектирования БД логика вообще отдыхала.


 
Desdechado ©   (2004-07-29 15:57) [17]

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


 
Johnmen ©   (2004-07-29 16:08) [18]

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


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

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


 
Johnmen ©   (2004-07-29 16:16) [20]

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

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


 
GanibalLector ©   (2004-07-30 01:24) [21]

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

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

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


 
VID ©   (2004-07-30 01:38) [22]

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


 
GanibalLector ©   (2004-07-30 02:27) [23]

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

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


 
Johnmen ©   (2004-07-30 09:28) [24]

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.036 c
14-1091694221
Igorek
2004-08-05 12:23
2004.08.22
Доступ к рабочему компьютеру рядового программиста


14-1091432661
}|{yk
2004-08-02 11:44
2004.08.22
Почитайте, интересно...


1-1091689182
Vilux
2004-08-05 10:59
2004.08.22
Вопрос по деревьям


3-1091087814
Serge1
2004-07-29 11:56
2004.08.22
Добавление поля в ADOTable1.Fields


14-1091537366
}|{yk
2004-08-03 16:49
2004.08.22
По автоматизации Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский