Форум программистов, компьютерный форум, киберфорум
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 3
1

Замедление скорости выполнения хранимой процедуры

25.03.2010, 13:40. Показов 2198. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые Експерты FireBird!
У меня есть проблема, связанная с замедлением скорости выполнения одной и тойже хранимой процедуры, которая во время расчета некоторого процесса должна последовательно выполниться примерно 3800 раз.
Если в начале данного процесса скорость выполнения этой хранимой процедуры равняеться примерно 50-70 мсек, то уже в конце расчета, скорость выполнения составляет уже 1 сек.

Сама хранимая процедура довольно простая, но ее текст перед каждым выполнением динамически изменяется (SQL-оператор Select между операторами for и into) :

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 ALTER PROCEDURE CALCDATA1 (God SMALLINT, Per SMALLINT, KodTsk SMALLINT, KodDok VARCHAR(10), CompName VARCHAR(30)) 
  AS 
  DECLARE variable ikoa INTEGER; 
  DECLARE variable ikodst VARCHAR(10); 
  DECLARE variable izn NUMERIC(18,4) = 0; 
  BEGIN 
  FOR 
 
  SELECT DAT.KOA, SUM(Zn5), DAT.KodSt
  FROM DAT
  WHERE DAT.God=:God AND DAT.Per=:Per AND DAT.KodTsk=:KodTsk AND DAT.KodDok=:KodDok
  GROUP BY DAT.KOA
 
  INTO 
    :IKOA, :IZn, :IKodSt 
  do BEGIN 
   UPDATE DOK 
   SET DOK.ZN1=IIF(NOT (:IZn IS NULL), CAST(:IZn AS NUMERIC(18,4)), 0) 
   WHERE DOK.CompName=:CompName AND DOK.KOA=:IKOA AND DOK.KodSt=:IKodSt; 
  END 
  END
Может кто-нибудь знает с чем это может быть связано, и как сделать так, чтобы скорость выполнения данной хранимой процедуры не падала.
Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2010, 13:40
Ответы с готовыми решениями:

Получить данные после выполнения хранимой процедуры в Perl.
Есть хранимая процедура (Сервер DB2) которая возвращает набор данных и есть такая необходимость...

Экспорт результата выполнения хранимой процедуры в текстовый файл
Есть хранимая процедура, которая выбирает во временную таблицу данные из основной. как в хранимой...

Привязка выполнения хранимой процедуры к кнопке и вывод результата в listbox
Добрый вечер, есть хранимая процедура, хочется привязать ее выполнение к кнопке и сделать вывод...

Какие еще разрешения требуются пользователю для выполнения системной хранимой процедуры таблицы master?
Потерял день, но так и не понял, почему хранимая процедура заявляет, что у пользователя нет...

4
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
25.03.2010, 14:56 2
Можешь сказать какие изменения вносятся в текст процедуры. Может можно без низ обойтись
0
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 3
25.03.2010, 16:47  [ТС] 3
В операторе Select для таблицы DAT могут меняться имена полей ZnХ (Х от 1 до 30), сама таблица DAT может быть также связана с другой таблицей через inner join, к тому же каждый раз изменяются условия для оператора where.
В конструкции Update для таблицы DOK также меняются имена полей ZnХ (Х от 1 до 30).

Таблица DAT содержит данные, которые почти постоянные, а таблицу DOK я использую как временную, данные в которую сначало добавляются, расчитываются, сравниваются а потом удаляются. За время всего расчета этот цикл также повторяется примерно 750 раз.
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,255
25.03.2010, 21:50 4
Цитата Сообщение от StTsyba Посмотреть сообщение
меняться имена полей ZnХ (Х от 1 до 30),
Подумай, может подойдет оператор case
Кроме того, если ты работаешь с версией не ниже 2.1, то вместо временных таблиц можно попытаться использовать СТЕ или глобальные временные таблицы.
1
0 / 0 / 0
Регистрация: 24.03.2010
Сообщений: 3
26.03.2010, 13:35  [ТС] 5
Я был не прав в отношении скорости выполнения процедур, как раз скорость выполнения относительно стабильная. Тормозит как раз само изменение текста процедуры с помощью команды ALTER PROCEDURE - с увеличением числа изменений текста процедуры, увеличивается время выполнения данной команды.
Отдельное спасибо за наводку по временным таблицам, начну их использовать.
0
26.03.2010, 13:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2010, 13:35
Помогаю со студенческими работами здесь

Замедление скорости интернета и перенаправление трафика
Я пользователь Yota, у меня старый тариф без отграничения на объем трафика и так уж вышло что в...

Замедление скорости движения мыши на сайте
Можно ли уменьшить скорость движения и мыши на сайте?

Должно ли на скорости поворота сказываться ускорение/замедление?
Игра морская по пиратам. Выберете из пяти вариантов: 1. Можно управлять только скоростью хода, но...

Замедление выполнения цикла for
Всем привет.пишу прогу для lpt порта для параллельной микросхемы...для перебора адресов использую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru