Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как лучше заканчивать транзакцию на чтение? [IB6.x, Рё клоны]


kaif ©   (2003-09-10 22:19:00) 

Приложение часто делает мелкие запросы на чтение в отдельных транзакциях (только SELECT). Можно такие транзакции заканчивать с помощью commit, а можно rollback. Что экономнее для ресурсов сервера? Или все равно?
Буду признателен за любые соображения.


Alexandr   (2003-09-12 14:53:00) [1]

ну дык. тогда и ресурсов с чего бы ему много жрать...


kaif   (2003-09-12 14:45:00) [2]

2 Alexandr © (12.09.03 14:42) [18]
Я как правило работаю в оптимистической модели (задачи учета).
У меня два юзера как правило одни и те же данные не редактируют. Хотя для пессимистической модели ты прав.


Alexandr   (2003-09-12 14:42:00) [3]

дык зато между чтением и последующей записью в snapshop
никто не вклинится со своим апдейтом считанных тобой данных.
и в результате юзер будет уверен, что он поменял именно то что видит, на то, что хочет.


kaif   (2003-09-12 14:35:00) [4]

snapshot вроде (где-то читал) много ресурсов жрет, так что я его редко применяю, разве что для строгих отчетов, требующих "снимка базы".


Deniz   (2003-09-12 08:46:00) [5]

> Alexandr © (12.09.03 07:22) [15]
>а вот это лучше в snapshot делать

А вот это(snapshot) для отчетов.


Alexandr   (2003-09-12 07:22:00) [6]


> и отдельные недолгие read_committed nowait транзакции для
> апдейтов или селектов, могущих закончиться апдейтами.


а вот это лучше в snapshot делать


Sergey_Masloff   (2003-09-11 23:30:00) [7]

Johnmen © (11.09.03 16:19) [13]
>Лично я именно так и делаю :)
Думаешь ты один? ;-)


Johnmen   (2003-09-11 16:19:00) [8]

>kaif © (11.09.03 16:15)

Лично я именно так и делаю :)


kaif   (2003-09-11 16:15:00) [9]

Что же, вырисовывется даже некоторая неплохая идеология...
Одна длинная readonly для всякой всячины и отдельные недолгие read_committed nowait транзакции для апдейтов или селектов, могущих закончиться апдейтами.


Zacho   (2003-09-11 16:07:00) [10]


> kaif © (11.09.03 16:00) [10]

Имхо, долгая read_committed read - вполне нормально, и никаких доп. нагрузок, неудобств, удержания версий и т.п. не приносит.


kaif   (2003-09-11 16:00:00) [11]

спасибо
Romkin © (11.09.03 11:56) [8] и
Alexandr © (11.09.03 12:38) [9]

Попробовал readonly транзакции. Очень здорово работают. Есть ощущение легкости работы. К тому же одну мою глобальную транзакцию сделал readonly и сейчас легко отлавливаю все те места в программе, где имелись неявные старты с апдейтами (система очень большая).

Теперь такой вопрос. У меня в системе много мелких транзакций на чтение, создаваемых runtime. Однако есть и одна глобальная, с которой (исторически так получилось) много мелких таких запросов работает.
Что правильнее?
Иметь одну долгую глобальную транзакцию readonly read_committed для таких дел или лучше вообще не иметь долгих транзакций, даже readonly?


Alexandr   (2003-09-11 12:38:00) [12]

дык и так readonly транзакции есть в FB, Yaffil
Interbase 6.5 и выше не смотрел. не знаю. Но что-то мне подсказывает, что скорее есть, чем нет.


Romkin   (2003-09-11 11:56:00) [13]

2kaif read read_committed rec_version nowait - типовая самая легкая транзакция (практически ее нет), просто читаешь данные


kaif   (2003-09-11 11:50:00) [14]

Всем спасибо!
Я инстинктивно использовал везде commit.

2 Alexandr © (11.09.03 09:33) [5]
Интересно про readonly транзакции... Хотя я стараюсь не закладываться на определенный тип сервера. У меня программа на рынок.

2 stone © (11.09.03 09:28) [4]
Явные старты мне пришлось применять, так как если транзакция стартовала неявно и кроме select-а что-то делалось (тем не менее), то с некоторой вероятностью при многопользовательской работе в сети у меня сервер зацикливался (Yaffil-821). Поэтому я все старты переделал на явные. К сожалению, причина зацикливания сервера в этом. Хотя это эмпирический, но уже факт, подтвержденный многократно...


jack128   (2003-09-11 11:29:00) [15]

при определенных параметрах трансакции (read only и еще что, точно не помню) не создается версий записи, а транзакция стартует УЖЕ в commit - состоянии. firebird и yaffil если в трансакции были только select запросы, то rollback автоматом заменяется на commit).. Все описано на ibase.ru


Alexandr   (2003-09-11 09:33:00) [16]

в firebird есть реадонли транзакция. Самое то для селектов.
А завершать лучше по коммит.


stone   (2003-09-11 09:28:00) [17]

А зачем вообще в этом случае стартовать явную транзакцию? Разве неявные транзакции уже отменили?


Johnmen   (2003-09-11 09:14:00) [18]

Commit оптимальнее, если тр-ия только читающая.


Evgeny V   (2003-09-11 06:22:00) [19]

При select лучше commit, по накладным расходам, ссылка - книга "Мир InterBase" авторы Ковязин и Востриков


Sergey_Masloff   (2003-09-10 23:08:00) [20]

Если только SELECT то ИМХО абсолютно параллельно что коммит что роллбэк. При selecte версии записей не создаются так что накладные расходы на завершение минимальны.


Наверх

Титульная страница Поиск, карта сайта Написать письмо