SQLdb компоненты и PostgreSQL

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

SQLdb компоненты и PostgreSQL

Сообщение alexs » 22.04.2012 21:06:57

Кто пользуе вот эту связку?
У меня есть подозрение что тут не всё работает правильно.
Эти компоненты принудительно при каждом открытии select запроса в TSQLQuery стартуют транзакцию и держат её открытой вплоть до закрытия запроса.
Это правильно, если сервер FireBird. И это не правильно для Postgre (как я понимаю, это будет ошибкой и для MSSQL/Sybase).
У кого есть мнение на эту тему? Постить в багрекер ошибку?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: SQLdb компоненты и PostgreSQL

Сообщение Ism » 22.04.2012 22:13:34

Насколько я знаю SQLTransaction делает коммит только явно, то есть транзакция длится , пока пользователь ее не закроет. Не вижу ничего плохого.
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: SQLdb компоненты и PostgreSQL

Сообщение alexs » 22.04.2012 23:09:52

Плохо то, что некоторые операции на клиентской части подразумевают - что список с данными может быть открыть долго. И всё это время будет висеть начатая транзакция. А это уже черевато тем, что могут возникнуть блокировки. Я с этим уже столкнулся.

Сама логика работы с транзакциями в пострегесе подразумеват, что атомарные запросы на выборки данных не надо оборачить в явную транзакцию.
Явная транзакция нужна только для того случая, когда надо гарантировано получать и изменять одни и теже данные.

PS
В ZEOS-е кстати всё работает правильно, но переходить на него в том проекте мне не хочется...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: SQLdb компоненты и PostgreSQL

Сообщение Ism » 22.04.2012 23:14:54

Я просто делал на событие AfrerPost SQLTransaction.CommitRetraining
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: SQLdb компоненты и PostgreSQL

Сообщение alexs » 22.04.2012 23:24:21

Это не выход - транзакция всё равно будет висеть. Впустую расходуются ресурсы сервера.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: SQLdb компоненты и PostgreSQL

Сообщение Ism » 22.04.2012 23:41:21

Может режим есть как в zeos
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: SQLdb компоненты и PostgreSQL

Сообщение debi12345 » 23.04.2012 23:00:36

Знакомый трабл. А еще хуже что в Постгресе нет режима COMMITRETAINING. Требуйте от разрабов фишек SQLQuery типа как в MSE :
1) FAKE_TRANACTION - без стартового запуска тразакции
2) раздельные транзакции на чтение и запись
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5326
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLdb компоненты и PostgreSQL

Сообщение alexs » 24.04.2012 20:15:51

debi12345
1. Насколько я понял Potstgre - в нём только одна транзакция на соединение бывает.
2. COMMITRETAINING - в нём не нужен, т.к. есть не явный запуск транзакции на время select.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: SQLdb компоненты и PostgreSQL

Сообщение debi12345 » 25.04.2012 22:54:57

Насколько я понял Potstgre - в нём только одна транзакция на соединение бывает.

По протоколу, поодерживаются вложенные, включая именованные с сэйвпойнтами. Но Мартин как-то ухитрился наладить параллеьные типа независимые.

COMMITRETAINING - в нём не нужен, т.к. есть не явный запуск транзакции на время sele
ct.
Еще как нужен - иначе, на уровне LIBPQ - автореконнект после каждого соммитта - ессно с потерей букмарков во всех датасетах, и т.п. Мартин опять-таки выкрутился через эмуляцию ретэйнинга ( с сохранением позиций ВСЕХ датасетов задейсованныхв транзакции - включая мастер-детали - то есть работу проделал большую), а чуть позже через параллельные транзакции (минус - нужно явно освежать чтение после коммитов) . Сам работаю в 90% случае с Постгресом, но есть-таки у него неприятные ограничения.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5326
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLdb компоненты и PostgreSQL

Сообщение alexs » 25.04.2012 23:14:13

debi12345
Зеос работает правильно тут. После явного DB.Commit - котекст открытых DataSet-ов не теряется.
На самом деле - чего им терятсься? Данные то сфетчены...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: SQLdb компоненты и PostgreSQL

Сообщение debi12345 » 25.04.2012 23:21:32

котекст открытых DataSet-ов не теряется.
На самом деле - чего им терятсься? Данные то сфетчены...

Не удивлюсь, если дефолтный Постгрес так решает проблемы рефреша косвенно (черед БД-таблицы) зависимых датасетов - просто инвалидурует ВСЕ датасеты. ОгнеПтица, по словам Мартина - умеет это делать без переконнекта. Каким только образом - не сканит же запросы для сличения списков таблиц...

Добавлено спустя 4 минуты 5 секунд:
Кстати, очень удобный билд - постоянная транзакция на чтение, и кротовременно срабатывающая- на запись. Перечитывание - в коде - в около-коммитном событии. Сам перешел на этот режим для всех типов серверов - удобно в плане надежности и минимизации траффика.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5326
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLdb компоненты и PostgreSQL

Сообщение alexs » 26.04.2012 01:00:03

debi12345
Ты описываешь технолгию работы FireBird/Interbase - я сам на нём много чего делаю.
Сейчас работаю с постгре - там всёж реализация немного другая. По первому времени тоже хотел делать 2 транзакции...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: SQLdb компоненты и PostgreSQL

Сообщение debi12345 » 26.04.2012 02:12:08

По первому времени тоже хотел делать 2 транзакции...

А что сейчас мешает ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5326
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: SQLdb компоненты и PostgreSQL

Сообщение alexs » 26.04.2012 08:25:51

А зачем? Все основные выборки идут в режиме неявного старта и завершения. Для select-запросов самое то. Транзакции не висят лишние на сервере. Нет блокировок.
А редактирование критичных областей уже обртываю в явную транзакцию. И этот код стараюсь делать коротким. В нём нет никакого ожидания от пользователя. Т.о. тоже на сервере не остаются висящие транзакции...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: SQLdb компоненты и PostgreSQL

Сообщение debi12345 » 26.04.2012 08:34:00

Плохо то, что некоторые операции на клиентской части подразумевают - что список с данными может быть открыть долго. И всё это время будет висеть начатая транзакция. А это уже черевато тем, что могут возникнуть блокировки. Я с этим уже столкнулся.

В принципе, досточно отключить отrрытие транзакции при стратовом SELECT-е - то есть расширить функционал TSQLTRANSCTION через новую опцию "FAKE TRANSACTION" для читающих транзакций (здсь подразумеваются две паралельные транзакции - посоянно открытая читающая и сеансовая пищущая ), которая запретит выхов SQL-команд BEGIN & COMMIT для TSQLTRANSCTION при загрузке прогаммы и COMMIT[RETAINING].

ПС:
Скажу еще за SQLITE3 версий до кажется "3.4" (у которых не было вложенных транзакций и поэтому любой сбой мог вынести всю дневную работу) - этот режим оказался настоящим спасением :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5326
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru