Книга: Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil
Разделенные транзакции: уникальная возможность избежать Deadlock. Режим AutoCommit
Разделенные транзакции: уникальная возможность избежать Deadlock. Режим AutoCommit
CategoriesDataSet позволяет автоматически подтверждать сделанные изменения, если задать свойство AutoCommit в True. Теперь после вызова метода Post компонент CategoriesDataSet будет автоматически вызывать CategonesTransaction CommitRetainmg, сохраняя сделанные пользователем изменения и не закрывая при этом сам запрос. Такой подход уже снижает вероятность Deadlock, который возможен при наличии длинных незакрытых транзакций, в контекст которых производились изменения данных.
Тем не менее, FIBPlus предлагает другую возможность, которая сводит вероятность возникновения Deadlock практически к нулю. TpFIBDataSet может работать одновременно в контексте двух транзакций. Одна длинная транзакция, в контексте которой данные только читаются, и другая короткая транзакция, в контексте которой выполняются все модифицирующие запросы.
Переименуем CategoriesTransaction в CategoriesReadTransaction и добавим еще один компонент CategoriesWriteTransaction. После этого зададим свойство UpdateTransaction у CategoriesDataSet в CategoriesWriteTransaction. Таким образом, теперь CategoriesDataSet подключен сразу к двум компонентам TpFTBTransaction (рис. 2.26).
Рис 2.26. Разделение читающей и пишущей транзакций
После вызова метода Post компонент CategoriesDataSet будет вызывать метод Commit у компонента CategoriesWriteTransaction. Однако, учитывая, что данные читаются в контексте совсем другой транзакции (CategoriesReadTransaction), это не вызовет закрытия всего CategoriesDataSet. To есть, используя FIBPlus, мы имеем настоящий режим AutoCommit, который уменьшает вероятность Deadlock и не мешает "видеть" нам актуальные значения всех записей. При использовании BDE в режиме AutoCommit вы не могли бы узнать реальные значения записей, пока не переоткроете запрос.
Кроме того, как уже упоминалось, для InterBase до версии 6.5 слишком частый вызов CommitRetaining мог привести к значительному "захвату" ресурсов сервером. При использовании механизма разделенных транзакций вы можете использовать режим AutoCommit без потерь производительности сервера для любых версий InterBase.
- Подключение к базе данных, выполнение простых запросов
- Управление транзакциями
- Использование стандартных визуальных db-компонентов совместно с FIBPIus
- Как сделать запрос редактируемым? Автоматическая генерация модифицирующих запросов в design-time и run-time
- Правильный способ использования auto-increment полей в FIBPIus
- Разделенные транзакции: уникальная возможность избежать Deadlock. Режим AutoCommit
- Резервное копирование при работе InterBase в режиме 24x7
- 8.5.3. Режимы энергосбережения
- Режим обратной совместимости
- 2.6. Термостабилизация режима каскада на биполярном транзисторе
- DEADLOCK TIMEOUT
- 10.5. Транзакции и пути доступа меню
- 33.1. Интерактивный и неинтерактивный режим работы
- 4. Режимы работы экспертных систем
- 1.1 Режимы ядра и пользователя Windows
- Работа с документами в режиме оффлайн
- Как избежать случайного нажатия клавиши Caps Lock?
- Кризис – это возможность. 10 стратегий, которые позволят вам процветать в эпоху перемен Скотт Стейнберг