Читающая транзакция FDTransaction [сообщение #3725] |
Wed, 15 November 2023 00:11 |
sashaua01
Сообщений: 26 Зарегистрирован: July 2022
|
Junior Member |
|
|
Добрый день подскажите пожалуйста, прочитал на просторах интернета.
На старте апки создают и стартуют общую для всех читающую транзакцию с параметрами
Result.Options.Isolation:=xiReadCommitted;
Result.Options.ReadOnly:=True;
Result.Options.Params.Add('read read_commited rec_version');
и такую транзакцию используют для чтения данних с базы (показ данных в гриде и т.п.)
Цитата:Транзакция с такими параметрами в Firebird может быть открытой сколь угодно долгое время (дни, недели, месяцы), без блокирования других транзакций или влияния на накопление мусора в базе данных
завершают и уничтожают при закрытии апки.
Насколько такой подход имеет право на жизнь? Создавать такую транзакцию в сингелтоне и когда надо использовать ее.
|
|
|
|
|
|
|
Re: Читающая транзакция FDTransaction [сообщение #3766 является ответом на сообщение #3731] |
Mon, 20 November 2023 14:26 |
shalamyansky
Сообщений: 150 Зарегистрирован: August 2022
|
Senior Member |
|
|
МП писал(а) Wed, 15 November 2023 16:48
тогда когда тебе нужны АКТУАЛЬНЫЕ данные вместо "протухших".
Так read_commited транзакция всегда вернет актуальные данные, нет разве? Актуальные вернуть проще, что подтверждено, то и актуально. Это же не snapshot, чтобы заморачиваться реперными точками и т.п.
ИМХО разница лишь в том, что делать старт/стор - хорошая привычка брать ресурс ровно настолько, сколько он нужен, и отпускать после. А не хватать и класть в долгий ящик "на всякий случай". Но если накладные расходы на старт/стор сравнимы уже с основными расходами, то можно, конечно, задуматься и о второй стратегии. Измерять надо.
|
|
|
|
|
|
|
|
Re: Читающая транзакция FDTransaction [сообщение #3782 является ответом на сообщение #3778] |
Mon, 20 November 2023 20:29 |
shalamyansky
Сообщений: 150 Зарегистрирован: August 2022
|
Senior Member |
|
|
МП писал(а) Mon, 20 November 2023 18:07
для этого нужно просто рассмотреть вопрос ЗАЧЕМ ввели режим READ CONSISTENCY.
Хорошо, давайте рассмотрим. С Вашего позволения я буду рассматривать, а Вы рассказывать.
Но перед этим на всякий случай давайте проверим тезис, а то есть подозрение, что рассуждения в сторону ушли. Мое утверждение состоит в том, что
транзакция read_only read_commited (+-read_consistency) всегда читает актуальные данные, безотносительно момента её старта. Под актуальными данными подразумеваем последние в принципе доступные (подтвержденные) на момент запроса.
Если Вы согласны с этим, то предмета спора нет, и я с большим интересом (никакой иронии) почитаю о причинах введения read_consistency. Если не согласны, то прошу объяснений.
|
|
|
|
|
|
|
Re: Читающая транзакция FDTransaction [сообщение #3825 является ответом на сообщение #3795] |
Wed, 22 November 2023 15:29 |
SD
Сообщений: 410 Зарегистрирован: August 2022
|
Senior Member |
|
|
МП писал(а) Tue, 21 November 2023 11:11
при построении отчётов в больших системах (по типу OLAP) каждый запрос может выполняться до десятков минут. и запросов таких в одном отчёте обычно N-е множество.
Именно поэтому read committed даже с read consistency для отчётов бесполезен. Если только не идти по ораклятому пути и не впихивать всю-всю выборку в один-единственный мегазапрос для которого эта consistency таки сработает.
|
|
|