Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
avenger
- Сообщения: 141
- Зарегистрирован: 25 окт 2005, 11:53
Сообщение
avenger » 25 сен 2006, 12:37
Есть БД на FB1.5
Код: Выделить всё
Database "C:\Web\Conference\data\CONFERENCE.GDB"
Database header page information:
Flags 0
Checksum 12345
Generation 294910
Page size 8192
ODS version 10.1
Oldest transaction 294808
Oldest active 294809
Oldest snapshot 294809
Next transaction 294810
Bumped transaction 1
Sequence number 0
Next attachment ID 4
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Jun 2, 2006 18:01:50
Attributes force write
Variable header data:
Sweep interval: 0
*END*
Есть программа, в которой идет частое ЧТЕНИЕ с помощью компонента
TpFIBQuery.
Код: Выделить всё
object trDataRead: TpFIBTransaction
DefaultDatabase = dbData
TimeoutAction = TACommit
Left = 80
Top = 8
end
object sqlDataR: TpFIBQuery
Transaction = trDataRead
Database = dbData
Left = 144
Top = 8
end
object sqlDataW: TpFIBQuery
Transaction = trDataWrite
Database = dbData
Left = 144
Top = 64
end
TPBMode = tpbReadCommitted.
После каждого селекта идет коммит.
В результате, после работы программы в течение двух суток нельзя корректно выгрузить программу, виснет на закрытие соединения с БД.
Может стоит делать RollBack? Или в чем может быть дело?
С уважением, Иван.
-
Ivan_Pisarevsky
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Сообщение
Ivan_Pisarevsky » 25 сен 2006, 13:15
В чем тайный смысл делать коммит после селекта?
Что мешает селектить в транзакции "рид, рид_коммитед, новэйт" и не коммитить ее никогда?
-
avenger
- Сообщения: 141
- Зарегистрирован: 25 окт 2005, 11:53
Сообщение
avenger » 25 сен 2006, 13:30
Ivan_Pisarevsky писал(а):В чем тайный смысл делать коммит после селекта?
Все так делают. Разве это не правильно?
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 25 сен 2006, 14:23
avenger писал(а):Все так делают. Разве это не правильно?
Я так не делаю. Уже не "все".

-
avenger
- Сообщения: 141
- Зарегистрирован: 25 окт 2005, 11:53
Сообщение
avenger » 25 сен 2006, 15:20
Попробую так:
Код: Выделить всё
TRParams.Strings = (
'read_committed'
'rec_version'
'nowait'
'read')
TPBMode = tpbDefault
и без коммит.
-
CyberMax
- Заслуженный разработчик
- Сообщения: 638
- Зарегистрирован: 31 янв 2006, 09:05
Сообщение
CyberMax » 25 сен 2006, 15:56
2 Avenger. Не надо постить все подряд в надежде, что что-то пригодиться. Маловероятно, что кто-то будет с ходу изучать твои портянки кода. В данном случае достаточно было последних предложений.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 25 сен 2006, 16:14
урезал лишнюю информацию. статистику сохранил.
-
avenger
- Сообщения: 141
- Зарегистрирован: 25 окт 2005, 11:53
Сообщение
avenger » 26 сен 2006, 10:04
CyberMax писал(а):Не надо постить все подряд в надежде, что что-то пригодиться.
Это ты к чему? За слишком большой первый пост приношу свои извинения.
После того, как я убрал Commit и сменил тип транзакции, приложение стало нормально выгружаться. (Я говорю о выгрузке после длительной работы > 24 часов).
С чем это может быть связано?