SQLRU.net
Разработка приложений баз данных

Начало » Программирование » Delphi » Читающая транзакция FDTransaction
Читающая транзакция FDTransaction [сообщение #3725] Wed, 15 November 2023 00:11 Переход к следующему сообщению
sashaua01 в настоящее время не в онлайне  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 [сообщение #3728 является ответом на сообщение #3725] Wed, 15 November 2023 15:30 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 417
Зарегистрирован: August 2022
Senior Member
В современных условиях - нинасколько. После внедрения промежуточной сборки мусора пользы от него уже нет, а вред в виде глюков неконсистентного чтения - в полный рост.
Re: Читающая транзакция FDTransaction [сообщение #3729 является ответом на сообщение #3728] Wed, 15 November 2023 15:43 Переход к предыдущему сообщениюПереход к следующему сообщению
sashaua01 в настоящее время не в онлайне  sashaua01
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
На каждий запрос своя транзакция. Start/Stop когда надо ?  
Re: Читающая транзакция FDTransaction [сообщение #3731 является ответом на сообщение #3729] Wed, 15 November 2023 16:48 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
тогда когда тебе нужны АКТУАЛЬНЫЕ данные вместо "протухших".

зы: версия сервера тоже влияет.
Re: Читающая транзакция FDTransaction [сообщение #3732 является ответом на сообщение #3729] Wed, 15 November 2023 17:03 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
учти, что количество компонентов FDTransaction не тождественно количеству транзакций порождаемых приложением за время работы.
Re: Читающая транзакция FDTransaction [сообщение #3766 является ответом на сообщение #3731] Mon, 20 November 2023 14:26 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
МП писал(а) Wed, 15 November 2023 16:48

тогда когда тебе нужны АКТУАЛЬНЫЕ данные вместо "протухших".
Так read_commited транзакция всегда вернет актуальные данные, нет разве? Актуальные вернуть проще, что подтверждено, то и актуально. Это же не snapshot, чтобы заморачиваться реперными точками и т.п.

ИМХО разница лишь в том, что делать старт/стор - хорошая привычка брать ресурс ровно настолько, сколько он нужен, и отпускать после. А не хватать и класть в долгий ящик "на всякий случай". Но если накладные расходы на старт/стор сравнимы уже с основными расходами, то можно, конечно, задуматься и о второй стратегии. Измерять надо.
Re: Читающая транзакция FDTransaction [сообщение #3769 является ответом на сообщение #3766] Mon, 20 November 2023 15:58 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
shalamyansky
Так read_commited транзакция всегда вернет актуальные данные, нет разве?
до эпохи диалектического материализма и введения режима READ COMMITTED READ CONSISTENCY (в 4.0) имеются все шансы получить "рассогласованное" состояния набора данных при построении "долгоиграющих" отчётов.
Re: Читающая транзакция FDTransaction [сообщение #3772 является ответом на сообщение #3769] Mon, 20 November 2023 17:30 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
Для отчетов нужны snapshots. Read_consistency - это маленький snapshot в рамках одного select. Поэтому как раз read_commited read_consistency может привести к получению в некотором роде "неактуальных" данных, в отличие от чистого read_commited. И это никак не связано со start/stop транзакции, в которой этот select выполнен. Я так вижу.
Re: Читающая транзакция FDTransaction [сообщение #3774 является ответом на сообщение #3772] Mon, 20 November 2023 17:39 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
shalamyansky писал(а) Mon, 20 November 2023 17:30
Для отчетов нужны snapshots. Read_consistency - это маленький snapshot в рамках одного select. Поэтому как раз read_commited read_consistency может привести к получению в некотором роде "неактуальных" данных, в отличие от чистого read_commited. И это никак не связано со start/stop транзакции, в которой этот select выполнен. Я так вижу.
напрасно.
Re: Читающая транзакция FDTransaction [сообщение #3776 является ответом на сообщение #3774] Mon, 20 November 2023 17:45 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
Буду признателен за возможность увидеть с другого ракурса.
Re: Читающая транзакция FDTransaction [сообщение #3778 является ответом на сообщение #3776] Mon, 20 November 2023 18:07 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
shalamyansky писал(а) Mon, 20 November 2023 17:45
Буду признателен за возможность увидеть с другого ракурса.
Ок.
для этого нужно просто рассмотреть вопрос ЗАЧЕМ ввели режим READ CONSISTENCY.
Re: Читающая транзакция FDTransaction [сообщение #3782 является ответом на сообщение #3778] Mon, 20 November 2023 20:29 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
МП писал(а) Mon, 20 November 2023 18:07

для этого нужно просто рассмотреть вопрос ЗАЧЕМ ввели режим READ CONSISTENCY.
Хорошо, давайте рассмотрим. С Вашего позволения я буду рассматривать, а Вы рассказывать.

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

транзакция read_only read_commited (+-read_consistency) всегда читает актуальные данные, безотносительно момента её старта. Под актуальными данными подразумеваем последние в принципе доступные (подтвержденные) на момент запроса.

Если Вы согласны с этим, то предмета спора нет, и я с большим интересом (никакой иронии) почитаю о причинах введения read_consistency. Если не согласны, то прошу объяснений.
Re: Читающая транзакция FDTransaction [сообщение #3795 является ответом на сообщение #3782] Tue, 21 November 2023 13:11 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
у "классического" READ COMMITED есть одна засада: по мере выборки данных, он подхватывает в том числе и те изменения, которых не было на момент старта запроса.
т.е. которые "появились" уже после того, как запрос был запущен, но ещё не завершен.
при построении отчётов в больших системах (по типу OLAP) каждый запрос может выполняться до десятков минут. и запросов таких в одном отчёте обычно N-е множество.
если при этом OLTP-система параллельно продолжает порождать "новые данные" имеем все шансы получить не срез данных, а суперпозицию.
абстрактно утрируя: голова отчёта за понедельник, а хвост за вторник.
Re: Читающая транзакция FDTransaction [сообщение #3797 является ответом на сообщение #3795] Tue, 21 November 2023 13:46 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
Это Вы к объяснению, зачем появился read_consistency? Да, это понятно, спасибо. Но тут есть более тонкий момент - чем для составления таких отчетов не устраивал старый добрый snapshot?

Изначальный вопрос с read_commited и актуальными данными, я так понял, закрыли взаимным согласием?
Re: Читающая транзакция FDTransaction [сообщение #3798 является ответом на сообщение #3797] Tue, 21 November 2023 13:55 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
я с самого начала вот тут писал, что версия сервера имеет значение.
Re: Читающая транзакция FDTransaction [сообщение #3799 является ответом на сообщение #3798] Tue, 21 November 2023 14:08 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
И как именно влияет? Вы уж раскрывайте, пожалуйста.
Re: Читающая транзакция FDTransaction [сообщение #3825 является ответом на сообщение #3795] Wed, 22 November 2023 15:29 Переход к предыдущему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 417
Зарегистрирован: August 2022
Senior Member
МП писал(а) Tue, 21 November 2023 11:11

при построении отчётов в больших системах (по типу OLAP) каждый запрос может выполняться до десятков минут. и запросов таких в одном отчёте обычно N-е множество.
Именно поэтому read committed даже с read consistency для отчётов бесполезен. Если только не идти по ораклятому пути и не впихивать всю-всю выборку в один-единственный мегазапрос для которого эта consistency таки сработает.
Предыдущая тема: подскажите по HTTPRIO и OnAfterExecute
Следующая тема: Динамический SQL запрос
Переход к форуму:
  


Текущее время: Sat Dec 21 19:35:39 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01358 секунд