Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
4:03:2008, 14:14
|
|
Новенький ![]() Группа: Программист Сообщений: 15 Регистрация: 4:03:2008 Из: СПб Пользователь №: 15 641 Специализация: прикладная математика Репутация: 0
|
Здравствуйте форумчане.
Есть такая ситуация: пишу клиента на Delphi 7 к бд Oracle. На сервере FireWall настроен так, что отрубает транзакции по которым нет обмена данными долгое время. Так вот суть вопроса: из Delphi приходится запускать довольно большие хранимые процедуры, они выполняются долго, соответственно FireWall транзакцию отрубает. Как можно обойти этот момент? Буду рад любым идеям. |
|
Сообщение
#1
|
|
![]() |
|
|
4:03:2008, 14:45
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 816 Регистрация: 4:09:2006 Из: Минск Пользователь №: 6 316 Специализация: C++ Репутация: 31
|
|
|
Сообщение
#2
|
|
|
|
4:03:2008, 15:01
|
|
Новенький ![]() Группа: Программист Сообщений: 15 Регистрация: 4:03:2008 Из: СПб Пользователь №: 15 641 Специализация: прикладная математика Репутация: 0
|
То есть стараться уложится в заданное время?
Я пытался сделать в отдельном потоке в рамках тойже транзакции непрерывный цикл запросов типа "select 1 from dual". Но все равно приходится ждать ответа процедуры. |
|
Сообщение
#3
|
|
|
|
4:03:2008, 15:35
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 816 Регистрация: 4:09:2006 Из: Минск Пользователь №: 6 316 Специализация: C++ Репутация: 31
|
То есть стараться уложится в заданное время? Да, это прежде всего... Кстати, а по какому критерию определялось время простоя, после которого транзакция отменяется? приходится запускать довольно большие хранимые процедуры, они выполняются долго Долго это сколько? Я так понимаю, что для обрубания транзакций должны быть веские доводы, а вариант сделать в отдельном потоке в рамках тойже транзакции непрерывный цикл запросов типа "select 1 from dual". это из ряда "а нам все равно" |
|
Сообщение
#4
|
|
|
|
5:03:2008, 07:21
|
|
Новенький ![]() Группа: Программист Сообщений: 15 Регистрация: 4:03:2008 Из: СПб Пользователь №: 15 641 Специализация: прикладная математика Репутация: 0
|
Цитата а вариант Цитата(SMitty @ 4:03:2008 - 18:01) сделать в отдельном потоке в рамках тойже транзакции непрерывный цикл запросов типа "select 1 from dual". это из ряда "а нам все равно" Это так и есть. Так как должно применяться к внешним пользователям, а приложение было написано для администраторов данных. Цитата Кстати, а по какому критерию определялось время простоя, после которого транзакция отменяется? Я так понимаю просто по статистике взяли среднее. Около пяти минут. Процедура же может выполняться до получаса. |
|
Сообщение
#5
|
|
|
|
5:03:2008, 08:20
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 816 Регистрация: 4:09:2006 Из: Минск Пользователь №: 6 316 Специализация: C++ Репутация: 31
|
Процедура же может выполняться до получаса. На мой взгляд, это очень долго и нужно попытаться что-то сделать. Хотя все ИМХО, т.к. структуры таблиц и ХП мне не известны. Я не специалист в конфигурации фаерволов и администрирования Оракла, но может стоит попытаться не применять ограничения к транзакциям для приложения? Это больше вопрос к администраторам... P.S. Было бы интересно послушать мнение других форумчан |
|
Сообщение
#6
|
|
|
|
5:03:2008, 08:38
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
|
|
Сообщение
#7
|
|
|
|
5:03:2008, 08:44
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 816 Регистрация: 4:09:2006 Из: Минск Пользователь №: 6 316 Специализация: C++ Репутация: 31
|
|
|
Сообщение
#8
|
|
|
|
5:03:2008, 09:07
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Пол часа это совсем ужос, тут и пять минут на таймаут ставить и то подумаешь ...
|
|
Сообщение
#9
|
|
|
|
5:03:2008, 09:36
|
|
Новенький ![]() Группа: Программист Сообщений: 15 Регистрация: 4:03:2008 Из: СПб Пользователь №: 15 641 Специализация: прикладная математика Репутация: 0
|
Да, ХП действительно выполняются очень долго. Приходится ворочить очень большими массивами данных. Поэтому переписывать процедуры или пытаться их разбить на много маленьких смысла не имеет.
Ситуацию осложняет то, что и приложение и ХП написаны намного раньше, чем введена эта конфигурация фаервола. |
|
Сообщение
#10
|
|
|
|
5:03:2008, 09:47
|
|
============== ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 740 Регистрация: 11:01:2007 Пользователь №: 8 750 Специализация: specialist Репутация: 27
|
Приходится ворочить очень большими массивами данных. Поэтому переписывать процедуры или пытаться их разбить на много маленьких смысла не имеет. Может надо с индексами поколдовать? оно иногда помогает ... как-то делали отчеты, там процедуры работали около 40-60 сек! заказчик был подавлен PS: но начинать надо с изучения планов выполнения. |
|
Сообщение
#11
|
|
|
|
5:03:2008, 09:52
|
|
Божественный ![]() ![]() ![]() ![]() ![]() Группа: Модеры Сообщений: 1 816 Регистрация: 4:09:2006 Из: Минск Пользователь №: 6 316 Специализация: C++ Репутация: 31
|
SMitty, тема всё больше уходит в душевные излияния.
Проблему можно решить следующими способами: 1 - изменить конфигурация фаервола 2 - изменить ХП 3 - совместно п.1 и п.2 4 - удалять гланды через ..., пытаясь "крутить" данные, чтобы наколоть фаервол. Все остальные способы - различные вариации вышеизложенных. Остальное - Ваш выбор, т.к. никакой информации у нас нет |
|
Сообщение
#12
|
|
|
|
7:03:2008, 07:56
|
|
Новенький ![]() Группа: Программист Сообщений: 15 Регистрация: 4:03:2008 Из: СПб Пользователь №: 15 641 Специализация: прикладная математика Репутация: 0
|
Огромное спасибо European и sax_ol за участие. Основные идеи решения я понял, а дальше думать буду
|
|
Сообщение
#13
|
|
![]() |
|
Текстовая версия | Сейчас: 17:05:2008 - 07:41 |