![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длинные (несколько суток) читающие транзакции в FB. Как лучше ? [D7, IB6.x]
ari_9 © (2007-11-20 19:26:00)FireBird 1.5.4, Delphi 2005, FIBPlus 6.7
В приложении есть несколько запросов, постоянно
читающих из базы данных данные. Эти запросы обновляются по определенным условиям - накоплению некоторого числа эвентов от БД или таймеру - в среднем один раз в несколько секунд. Запросы открыты в читающей транзакции с параметрами read, nowait, rec_version, read_committed, время жизни - до 3-5 суток
Запросы в компонентах pFIBDataSet, свойство AutoCommit = False (по умолчанию)
Имеет ли смысл принудительно через какое-то время или количество выполненных запросов закрывать и снова стартовать транзакции ? Вообще есть какие-то особенные принципы работы с такими транзакциями или не заморачиваться ?
Andrey (2007-11-21 13:59:00) [1]>Виталий Панасенко(дом)
>Это позволяет избежать dead-lock
ну... скажем это один из механизмов, который косвенно уменьшает его вероятность. но не более.
на 100% можно избавится от дедлоков только применяя SNAPSHOT TABLE STABILITY с резервированием таблиц при старте транзакции, но очень мало кто использует этот уровень изоляции... очевидно в следствии того, что он не выставлен как умолчательный )))
Виталий Панасенко(дом) (2007-11-21 13:51:00) [2]
> stud © (21.11.07 12:12) [4]
>
> Виталий Панасенко(дом) (20.11.07 22:00) [3]
> вот для пишущей и нужно AutoCommit=TRUE
>
> зло это. надо явно самому управлять пишущими транзакциями,
> чтобы потом не удивляться...
Это позволяет избежать dead-lock(не знаю, на все 100 или нет, но очень существенно).. А с дуру можно и х.. поломать.. Не смотря на то, что это гидравлика..:-)
Johnmen (2007-11-21 13:08:00) [3]
> Andrey © (21.11.07 12:59) [7]
Я взлюкнул :)
Конечно же snapshot.
Andrey (2007-11-21 12:59:00) [4]>Johnmen © (21.11.07 12:53) [6]
>репитбл_рид не поддерживается, можно не обращать внимания...
эм...
"SNAPSHOT (константа concurrency) - уровень изоляции, эквивалентный Repeatable Read" (це) http://ibase.ru/devinfo/ibtrans.htm
или я опять промахнулся термином? )
Johnmen (2007-11-21 12:53:00) [5]
> Andrey © (21.11.07 12:25) [5]
репитбл_рид не поддерживается, можно не обращать внимания...
Andrey (2007-11-21 12:25:00) [6]>есть какие-то особенные принципы работы с такими транзакциями
С такими нет. Если бы они писали, или хотя бы были репитбл_рид, тогда ты бы уже обнаружил "необоснованый" рост базы. А так всё ок.
stud (2007-11-21 12:12:00) [7]Виталий Панасенко(дом) (20.11.07 22:00) [3]
вот для пишущей и нужно AutoCommit=TRUE
зло это. надо явно самому управлять пишущими транзакциями, чтобы потом не удивляться...
Виталий Панасенко(дом) (2007-11-20 22:00:00) [8]
> Запросы в компонентах pFIBDataSet, свойство AutoCommit =
> False (по умолчанию)
Вообще-то, это свойство используют при наличии ДВУХ транзакций - длинной читающей и короткой пишущей.. вот для пишущей и нужно AutoCommit=TRUE
ari_9 (2007-11-20 21:46:00) [9]Johnmen
ок, спасибо
Johnmen (2007-11-20 20:03:00) [10]
> Имеет ли смысл принудительно через какое-то время или количество
> выполненных запросов закрывать и снова стартовать транзакции ?
Нет.
> Вообще есть какие-то особенные принципы работы с такими
> транзакциями или не заморачиваться ?
Не заморачивайся.