Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обмен данными с функцией PL/pgSQL, обмен данными с функцией PL/pgSQL 
V
    Опции темы
Alexander06
Дата 22.6.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Здравствуйте.

Некоторые объемные операции над БД я выполняю с помощью plpgsql-функций с использованием курсоров (например, заполнение таблицы на основе нескольких имеющихся).

При этом функция может выполняться десятки минут, а пользователь, работающий с клиентским приложением на Java/JDBC, не видит состояние ее выполнения.

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

Есть ли возможность обмена данными с функцией plpgsql в процессе ее выполнения?

Спасибо.
PM MAIL   Вверх
v2v
Дата 22.6.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



ты можешь разбить длительную транзакцию на ряд коротких законченных транзакций и делать регулярные фиксации (коммиты).
Зафиксированные данные будут доступны пользователю. Главное не делать фиксации слишком регулярно , иначе это значительно замедлит производительность твоей системы.


--------------------
PM   Вверх
msr
Дата 23.6.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.4.2009

Репутация: 1
Всего: 1



можно во время выполнения функции писать статус в какую-нибудь табличку, а из клиента по таймеру считывать из нее, либо использовать механизм асинхронного оповещения LISTEN/NOTIFY.


PM MAIL   Вверх
Alexander06
Дата 23.6.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Спасибо, за совет. 
Это хорошая идея - так ведь можно и остановить функцию при необходимости.

Встречный вопрос...когда я запускаю функцию plpgsql она загружает СУБД и та очень неохотно реагирует на другие запросы (например, pgAdmin попросту виснет выполняя запрос содержимого таблицы). Каким образом можно сбалансировать распределение ресурсов СУБД?
PM MAIL   Вверх
msr
Дата 24.6.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.4.2009

Репутация: 1
Всего: 1



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

pgAdmin виснет не от тяжкой работы, а в ожидании ответа от сервера.

я б лучше подумал над оптимизацией самого запроса
PM MAIL   Вверх
Alexander06
Дата 24.6.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Оптимизацией я занимаюсь, но создание полутора млн. записей за пару секунд пока не выходит.
Представьте себе, что у меня было в MySQL и H2 без встроенных процедурных языковsmile

Спасибо за ответы, я узнал все необходимое.
PM MAIL   Вверх
msr
Дата 25.6.2009, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.4.2009

Репутация: 1
Всего: 1



для пакетной вставки записей можно использовать COPY - намного быстрее INSERT.
правда COPY работает с потоками вв и файлами.

еще на время массовой вставки можно удалять индексы и отключать триггеры, потом делать ANALIZE
PM MAIL   Вверх
Alexander06
Дата 25.6.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Спасибо за советы, буду разбираться в этом направлении.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0952 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.