Непонятная работа с хранимыми процедурам.
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Непонятная работа с хранимыми процедурам.
Использую сервер Firebird 1.5.5 4926
ОС Windows XP Professional
БД локальная.
Требуется выполнить хранимую процедуру которая должна в общей сложности обновить 205 000 записей.
Если исполнять процедуру из SQL редактора в IB Expert то на исполнение уходит он 35 до 50 секунд,
Если же исполнять ее через компонен TpFIBDataBase командой
db.execute('EXECUTE PROCEDURE nacenka') то операция занимает БОЛЕЕ ДЕСЯТИ МИНУТ !!!
Чтем обусловлена такая разница понять не могу, т.к. процедура то хранимая и исполняется на сервере, соответственно откуда ее вызывать значения не имеет. Подскажите в чем может быть загвоздка.
Заранее благодарю за помощь.
ОС Windows XP Professional
БД локальная.
Требуется выполнить хранимую процедуру которая должна в общей сложности обновить 205 000 записей.
Если исполнять процедуру из SQL редактора в IB Expert то на исполнение уходит он 35 до 50 секунд,
Если же исполнять ее через компонен TpFIBDataBase командой
db.execute('EXECUTE PROCEDURE nacenka') то операция занимает БОЛЕЕ ДЕСЯТИ МИНУТ !!!
Чтем обусловлена такая разница понять не могу, т.к. процедура то хранимая и исполняется на сервере, соответственно откуда ее вызывать значения не имеет. Подскажите в чем может быть загвоздка.
Заранее благодарю за помощь.
Re: Непонятная работа с хранимыми процедурам.
что-то не договариваешь.
разные варианты подключения к БД ?
разные варианты подключения к БД ?
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Непонятная работа с хранимыми процедурам.
Абсолютно нет. Просто в программе использую хранимку и исполняя ее на больщой базе прога виснет и вешает за собой систему. Подумал что напортачил в тексе, исполнил ее из IB Experta и получил такой своеобразный результат. Сначала грешил на настройки транзакций. В эксперте стандартные, не менял. Поставил у себя такие , но результат увы такой же. Ума не приложу в чем причина ТАКОЙ разницы ?
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Непонятная работа с хранимыми процедурам.
Вот параметры транзакции
tpb_read_committed
tpb_rec_version
tpb_nowait
tpb_read_committed
tpb_rec_version
tpb_nowait
Re: Непонятная работа с хранимыми процедурам.
так не бывает.
suspend в процедуре есть ?
выполнять её и в ПО и в експерте в монопольном режиме пробывал ? время разное ?
если выполнить так ПО експерт ПО ескперт ПО время будет разное ?
suspend в процедуре есть ?
выполнять её и в ПО и в експерте в монопольном режиме пробывал ? время разное ?
если выполнить так ПО експерт ПО ескперт ПО время будет разное ?
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Непонятная работа с хранимыми процедурам.
Вот скрипт процедуры.
Код: Выделить всё
CREATE PROCEDURE Nacenka
as
declare variable nac float;
declare variable kod_tov integer;
declare variable kod_group integer;
declare variable cena double precision;
declare variable bcena double precision;
declare variable sumcena double precision;
declare variable kod integer;
begin
for select kodgroup,nac from groupt into :kod_group, :nac do
begin
Nac = Nac / 100;
for Select kodT,bcena from tovar where kodgroup = :kod_group into :kod_tov,:bcena do
begin
sumcena = :bcena;
if (:bcena = 0) then
begin
for select CENA,KOD from Elem WHERE (KODT = :kod_tov) into :Cena,:kod do
begin
cena = cena + cena * nac;
sumcena = sumcena + cena;
UPDATE ELEM SET SCENA = :cena WHERE (KODT = :kod_tov);
UPDATE ELEMTOVAR SET CENA = :cena ,SUMA = CENA * KOL WHERE (KODT = :kod_tov);
UPDATE ZAMMAT SET SCENA = CENA + CENA * :Nac WHERE KOD = :kod;
end
end
Else
sumcena = sumcena * nac;
UPDATE TOVAR SET SCENA =:sumcena WHERE (KODT = :kod_tov);
end
end
end;
Последний раз редактировалось Guardian777 11 июл 2009, 11:35, всего редактировалось 1 раз.
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Непонятная работа с хранимыми процедурам.
И из IBX из из моей программы процедура исполняется монопольно. Остальные клиенты не присоединены. Время остается таки разным.
Из IBX это ~45 сек, а из программы 15 минут.
Причем процессор конкретно напрягает.
P.S. Возможно я напортачил в синтаксисе процедуры. Если что увидете то не пожалуйста подскажите.
Из IBX это ~45 сек, а из программы 15 минут.
Причем процессор конкретно напрягает.
P.S. Возможно я напортачил в синтаксисе процедуры. Если что увидете то не пожалуйста подскажите.
Re: Непонятная работа с хранимыми процедурам.
ФИБовый монитор берёшь и сам смотришь, что там происходит за кулисами.
Re: Непонятная работа с хранимыми процедурам.
не верю. sql оператор, из чего бы он ни был выполнен, будет на сервере (!) на одной и той же базе в монопольном режиме выполняться одинаковое время. Если конечно, исключить генерацию версий первым запуском процедуры, и сборку мусора при втором запуске процедуры.
Обычно разработчики ПО проводить чистые тесты совершенно не умеют
Сколько времени занимает например в Ibexpert - выполнили процедуру, commit, еще раз выполнили?
Под "выполнили" имею в виду
execute procedure nacenka в SQL Editor IBExpert-а.
Обычно разработчики ПО проводить чистые тесты совершенно не умеют
Сколько времени занимает например в Ibexpert - выполнили процедуру, commit, еще раз выполнили?
Под "выполнили" имею в виду
execute procedure nacenka в SQL Editor IBExpert-а.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: Непонятная работа с хранимыми процедурам.
Точно процессор а не диск?Guardian777 писал(а):Причем процессор конкретно напрягает.
Строку подключения покажи, на всякий случай...
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Непонятная работа с хранимыми процедурам.
При выполнении напрягает проц на 95 100 %
База находится на моем же ПК. ТАк что подключаюсь с параметрами SYSDBA masterkey Win1251.
P.S.
Наткнулся на следующие строки в FAQе который лежить на iBase.
Вопрос Какое количество запросов может быть в процедуре, триггере?
Ответ. 255
И дальше пояснение.
Запросами" считается обращение к таблице (контекст). На данный момент число контекстов ограничено 255, хотя в некоторых предыдущих версиях IB/FB было ограничение числа контекстов в 128.
Заначит ли это что конструкция FOR Select ... может исполняться только 255 раз ?
Возможно в этом и заключается моя проблема.
База находится на моем же ПК. ТАк что подключаюсь с параметрами SYSDBA masterkey Win1251.
P.S.
Наткнулся на следующие строки в FAQе который лежить на iBase.
Вопрос Какое количество запросов может быть в процедуре, триггере?
Ответ. 255
И дальше пояснение.
Запросами" считается обращение к таблице (контекст). На данный момент число контекстов ограничено 255, хотя в некоторых предыдущих версиях IB/FB было ограничение числа контекстов в 128.
Заначит ли это что конструкция FOR Select ... может исполняться только 255 раз ?
Возможно в этом и заключается моя проблема.
Re: Непонятная работа с хранимыми процедурам.
Может, это и не процедура тормозит, а, скажем, компонент или даже САМО приложение..Guardian777 писал(а):БД локальная
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Непонятная работа с хранимыми процедурам.
Что программа исключено. Так как создавал пустую и просто отправлял через TpFIBDataBase запрос на исполнение. А вот насчет компонента незнаю.
Re: Непонятная работа с хранимыми процедурам.
муйня. Вы не понимаете разницу между количеством select как таковых и числом обрабатываемых записей. Число обрабатываемых записей не ограничивается никак. Если бы у Вас в процедуре кол-во селектов (операторов) превысило 255, то Вы бы при компиляции процедуры получили ошибку.Заначит ли это что конструкция FOR Select ... может исполняться только 255 раз ?
Ищите в другом месте.
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Непонятная работа с хранимыми процедурам.
Спасибо за разъяснение.
Буду искать дальше.
P.S. Есть ли у кого идеи в каком направлении двигаться?
Буду искать дальше.
P.S. Есть ли у кого идеи в каком направлении двигаться?
Re: Непонятная работа с хранимыми процедурам.
Тут уже было множество идей, требующих минимальной ответной реакции -- если "оно надо", конечно:Guardian777 писал(а):Есть ли у кого идеи в каком направлении двигаться?
Строку подключения покажи, на всякий случай...
Сколько времени занимает например в Ibexpert - выполнили процедуру, commit, еще раз выполнили?
Под "выполнили" имею в виду
execute procedure nacenka в SQL Editor IBExpert-а.
ФИБовый монитор берёшь и сам смотришь, что там происходит за кулисами.
Я бы ещё добавил, на всякий случай, сравнить результаты выполнения в обоих случаях: affected rows, статистику по фетчам/памяти (если в программе это доступно), Units execution (открыть параллельно мониторинг базы в IBExpert).разные варианты подключения к БД ?