powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проблемы с транзакцией при использовании dblink
8 сообщений из 8, страница 1 из 1
проблемы с транзакцией при использовании dblink
    #40023926
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, привет.


Такое дело.

В анонимном блоке(потом хочу впихнуть в процедуру),
в цикле, тяну данные из другой БД того же кластера по dblink маленькими кусочками.

По схеме:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
FOR.. LOOP...

PERFORM dblink_connect...
INSERT INTO table SELECT * FROM dblink....
PERFORM dblink_disconnect...


END LOOP;




Так вот, заметил что pg_stat_activity для этого dblink на каждом шаге цикла показывает один и тот же backend_xmin.
А это значит что индексы будут пухнуть в БД из которой тяну данные. (выполняется цикл минут 20, несколько итераций).

Скажите как корректно организовать запрос данных в цикле через dblink чтобы в БД, из которой тяну не пухли индексы?
...
Рейтинг: 0 / 0
проблемы с транзакцией при использовании dblink
    #40023927
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем, вставление коммитов ничего не меняет:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
FOR.. LOOP...

PERFORM dblink_connect...
INSERT INTO table SELECT * FROM dblink....
PERFORM dblink_exec('conname','COMMIT;');
PERFORM dblink_disconnect...


END LOOP;
...
Рейтинг: 0 / 0
проблемы с транзакцией при использовании dblink
    #40024102
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон
Причем, вставление коммитов ничего не меняет:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
FOR.. LOOP...

PERFORM dblink_connect...
INSERT INTO table SELECT * FROM dblink....
PERFORM dblink_exec('conname','COMMIT;');
PERFORM dblink_disconnect...


END LOOP;



включаем полный лог запросов на базе
смотрим что dblink отправляет в базе куда соединяется
думаем или присылаем сюда для анализа.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
проблемы с транзакцией при использовании dblink
    #40024116
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk
Синий Слон
Причем, вставление коммитов ничего не меняет:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
FOR.. LOOP...

PERFORM dblink_connect...
INSERT INTO table SELECT * FROM dblink....
PERFORM dblink_exec('conname','COMMIT;');
PERFORM dblink_disconnect...


END LOOP;



включаем полный лог запросов на базе
смотрим что dblink отправляет в базе куда соединяется
думаем или присылаем сюда для анализа.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru


Максим, я и так знаю что dblink отправляет.

Он отсылает простой короткий селекс типа:

SELECT guid FROM table WHERE id<число.


Никаких изменений не делает в той БД куда идет.

Коннект закрывается каждый раз.

Не могу понять почему backend_xmin в этом коннекте в БД откуда тянет всегда одинаковый ((

Моя задача сделать так чтобы при этой ооперации не пухли индексы.
...
Рейтинг: 0 / 0
проблемы с транзакцией при использовании dblink
    #40024144
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон,

Эм странный вопрос... кластер то один ("из другой БД того же кластера")... и xmin горизонт у него естественно общий для всех баз.
А у вас в другой транзакции висит анонимный блок работающий который через dblink читает.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
проблемы с транзакцией при использовании dblink
    #40024227
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk
Синий Слон,

Эм странный вопрос... кластер то один ("из другой БД того же кластера")... и xmin горизонт у него естественно общий для всех баз.
А у вас в другой транзакции висит анонимный блок работающий который через dblink читает.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru



При этом индексы в БД, не где блок, а откуда короткими транзакциями данные селектом тянуться, снапшот держится?

Как же реализовать чтобы индексы в БД, из которой селекты, не пухли?
...
Рейтинг: 0 / 0
проблемы с транзакцией при использовании dblink
    #40024416
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще запутался.


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

А он оказывается все равно держится :-(((
...
Рейтинг: 0 / 0
проблемы с транзакцией при использовании dblink
    #40025022
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон
Вообще запутался.


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

А он оказывается все равно держится :-(((


вопрос какой xmin используется для отсечки - глобальный по кластеру или локальный для базы (в коде есть и то и другое) интересен и его лучше и быстрее просто экспериментом проверить...
если таки глобальный (что было бы странно но возможно) - вариантов у вас два
1)вынести обработку на другой физический кластер
2)сделать обработку через процедуру которая сама внутри коммитить будет походу дела а тогда и извращения с dblink не нужны (и разбивать работу на много независимых транзакций в одной процедуре).


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проблемы с транзакцией при использовании dblink
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]