Страница 1 из 1

Транзакции...

Добавлено: 25 сен 2006, 12:37
avenger
Есть БД на 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? Или в чем может быть дело?

С уважением, Иван.

Добавлено: 25 сен 2006, 13:15
Ivan_Pisarevsky
В чем тайный смысл делать коммит после селекта?
Что мешает селектить в транзакции "рид, рид_коммитед, новэйт" и не коммитить ее никогда?

Добавлено: 25 сен 2006, 13:30
avenger
Ivan_Pisarevsky писал(а):В чем тайный смысл делать коммит после селекта?
Все так делают. Разве это не правильно?

Добавлено: 25 сен 2006, 14:23
WildSery
avenger писал(а):Все так делают. Разве это не правильно?
Я так не делаю. Уже не "все". :wink:

Добавлено: 25 сен 2006, 14:37
Dimitry Sibiryakov
А я так делаю. Но это ничего не значит, потому что нет у меня больше ДБ-аварии.

Добавлено: 25 сен 2006, 15:20
avenger
Попробую так:

Код: Выделить всё

    TRParams.Strings = (
      'read_committed'
      'rec_version'
      'nowait'
      'read')
    TPBMode = tpbDefault
и без коммит.

Добавлено: 25 сен 2006, 15:48
kdv
имхо никак с транзакциями это не связано. в таблицах никаких версий нет, да и в день стартует всего ~2500 транзакций

насчет "все так делают" - это кто не читал www.ibase.ru/devinfo/ibx.htm или www.ibase.ru/devinfo/ibtrans.htm (исключая Сибирякова, он сам себе голова).

Добавлено: 25 сен 2006, 15:56
CyberMax
2 Avenger. Не надо постить все подряд в надежде, что что-то пригодиться. Маловероятно, что кто-то будет с ходу изучать твои портянки кода. В данном случае достаточно было последних предложений.

Добавлено: 25 сен 2006, 16:14
kdv
урезал лишнюю информацию. статистику сохранил.

Добавлено: 26 сен 2006, 10:04
avenger
CyberMax писал(а):Не надо постить все подряд в надежде, что что-то пригодиться.
Это ты к чему? За слишком большой первый пост приношу свои извинения.

После того, как я убрал Commit и сменил тип транзакции, приложение стало нормально выгружаться. (Я говорю о выгрузке после длительной работы > 24 часов).

С чем это может быть связано?

Добавлено: 26 сен 2006, 10:15
Dimitry Sibiryakov
С багом. Либо сервера/клиента, либо твоего приложения (что вероятнее).