Это происходит примерно после обеда, т.е. до обеда тормозов нет, после обеда есть.
Вот что имеем:
- Intebase 6 установлен на Windows 2000 Server. Ничего на сервере в последнее время не устанавливалось.
- 5 клиентов на Windows 2000/98
- Sweep Interval = 0
- Каждую ночь делается бэкап, gfix -sweep, иногда рестор (если база не занята)
- База вести ~300 мег
- Софт написан на Delphi 7, IBX 7.09
Раньше в приложении была одна транзакция с параметрами:
- read_committed, rec_version, nowait
ну и после Insert/Update/Delete делался CommitRetaining.
Работала эта схема 2002 года и все были довольны.
А как начало тормозить, после штудирования ibase.ru, я сделал для просмотра транзакции с параметрами
(1) read, read_committed, rec_version, nowait
а для изменения
(2) write, read_committed, rec_version, nowait
Результат: те-же тормоза.
Вот статистика, полученная IBAnalyst в момент тормозов
Код: Выделить всё
- Page size 4096
- ODS version 10.0
- Oldest transaction 1314
- Oldest active 1315
- Oldest snapshot 1315
- Next transaction 1552
- Bumped transaction 1
- Sequence number 0
- Next attachment ID 0
- Implementation ID 16
- Shadow count 0
- Page buffers 0
- Next header page 0
- Database dialect 3
- Creation date Sep 6, 2006 23:53:39
- Attributes force write
a) открывается диалоговое окно для ввода расходной с транзакцией (2)
b) заполняются номер накладной, дата и т.д., делается CommitRetainig
c) открывается форма с перечнем (DBGrid) имеющихся товаров с транзакцией (2)
d) клиент вводит нужное наименование, например "валенки", и запрос переоткрывается по таймеру с условием where Upper(Ware_Name) like '%ВАЛЕНКИ%'
Код: Выделить всё
select W.Ware_Name ...
from Wares W, Parts P
where (W.ID = P.Ware_ID)
and (Parts.Exist_Flag=1)
and Upper(W.Ware_Name) like '%ВАЛЕНКИ%'
order by W.Ware_Name
Раньше и до обеда все летает.
План запроса, до и во время тормозов, не меняется.
e) Клиент выбирает из списка нужный товар и вводит количество нажимает OK, делается CommitRetainig
И начиная с пункта (d) по (e) делается примерно раз 10-100
Эта операция (e)
1. добавляет запись в одну таблицу (Moves)
2. и изменят запись в другой таблице (Parts)
После того, как все товары внесены, нажимается главный OK, и пишущая транзакция (2) закрывается.
Больше пишущих транзакций открытых нет, есть только читающие (1)