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

Запросы, планы, оптимизация запросов, ...

Модераторы: 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 писал(а):Все так делают. Разве это не правильно?
Я так не делаю. Уже не "все". :wink:

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 25 сен 2006, 14:37

А я так делаю. Но это ничего не значит, потому что нет у меня больше ДБ-аварии.

avenger
Сообщения: 141
Зарегистрирован: 25 окт 2005, 11:53

Сообщение avenger » 25 сен 2006, 15:20

Попробую так:

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 сен 2006, 15:48

имхо никак с транзакциями это не связано. в таблицах никаких версий нет, да и в день стартует всего ~2500 транзакций

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

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 часов).

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

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 26 сен 2006, 10:15

С багом. Либо сервера/клиента, либо твоего приложения (что вероятнее).

Ответить