Back
...
- [8] RU.DELPHI Borland DELPHI (2:461/256) --------------
RU.DELPHI -
Msg : 172 of 187 -171
From : Alexey Kats 2:463/201.9 Fri 01 Nov 96 00:40
To : Oleg Fyodorov
Subj : Запpосы и pdoxusrs.lck
--------------------------------------------------------------------------------
Hello, Oleg!
Following up a message from Alexey Kats to Oleg Fyodorov:
OF> Ситуация: в одном каталоге с
пpогpаммой лежит паpа табличек, по
OF> котоpым _очень_ часто
выполняются однообpазные запpосы.
Чеpез
OF> некотоpое вpемя пpи выполнении
очеpедного запpоса возникает
OF> exception: 'Lock file has grown too large'. Смотpим
и офигеваем:
OF> файл pdosusrs.lck, создавшийся в том
же каталоге пpи стаpте
OF> пpогpаммы, достиг pазмеpа 27 мег. И
все это пpи том, что у запpосов
OF> RequestLive=False.
OF> Кто-нибудь с этим боpолся?
AK> Попробуйте использовать TDatabase и
поставить .TransIsolation в
AK> DirtyRead
Просто если там будет стоять
RepeatableRead, то ВСЕ запрошенные записи
лочатся.
Вот отрывки из доки по Информиксу
(на всякий случай перевожу):
Dirty Read - Простейший уровень
изоляции. Когда программа выбирает
строки, то
не ставит своих блокировок и не
обращает внимания на чужие; она
просто копирует
строки из базы, невзирая на то, что
делают другие программы. Программа
всегда
получает полный набор строк, однако
программа читает обновлённые
данные ДО
того,
как они будут подтверждены. Если
другая программа выполнила откат,
то в
результате запроса могут быть
данные, которых реально никогда не
существовало.
Committed Read - Гарантирует, что
программа никогда не получит
данных, которые
не были подтверждены. Перед
выборкой строки сервер определяет:
поставил ли
процесс обновления данных
блокировку на строку или нет. Если
нет, то он
возвращает строку. Поскольку на
обновлённые, но неподтверждённые
строки
устанавливается блокировка. такая
проверка не даёт возможности
программе
считать
неподтверждённые данные. Этот
уровень изоляции не ставит реально
блокировок на
считываемую строку, поэтому он так
же эффективен, как и Dirty Read.
Repeatable Read - Этот уровень изоляции
указывает серверу накладывать
блокировку на каждую строку,
которую программа проходит или
выбирает.
Блокировки
накладываются: разделяемые - для
обычных курсоров и исключительные -
для
обновляемых курсоров. Блокировки
накладываются индивидуально на
каждую
использованную строку(!). Они не
освобождаются до тех пор, пока не
завершится
транзакция (!!!). Этот уровень
позволяет программе, использующей
двунаправленный
(scrollable) курсор, читать запрошенные
строки многократно и быть при этом
уверенной, что эти строки не будут
удалены или изменены между
повторными
чтениями.
Hадеюсь, это поможет. ;-)
With best regards. Alexey Kats.
--- GEcho 1.20/Pro
* Origin: А мы тут мышками промышляем ...
(2:463/201.9)
23.01.99 20:00:15