|
|
|
Транзакции, мусор, QIBASE
|
|||
|---|---|---|---|
|
#18+
Доброго всем здоровья Как-то, мной была создана тема о том, что при перезапуске моей программы, QSqlQuery не возвращает долго (очень долго) запрос. Тема тут: http://www.sql.ru/forum/1045901/qsqlquery-firebird-dlitelnoe-ozhidanie-otveta-na-query-next В виду того, что это не основная работа, время шло, программу старались не перезапускать, а когда деваться было некуда, делали бекап/ресторе. В принципе особо не напрягало. Но вот появилась минутка, и что я накопал. Проблема была в том, что в базе было много мусора, о чем говорила огромная разница между Oldest transaction и Next transaction. Я попробовал делать просто sweep. Но когда программа запущена, он эффекта не давал, а при закрытой программе, все стартовало быстро и хорошо, как после бекап/ресторе. Поскольку я прочитал, что копии создаются при INSERT и UPDATE я закомментировал, все записи в базу и запустил программу, которая просто из базы читала. Число Next transaction все равно быстро увеличивалось. Примерно на 1000 в 15 секунд. Я посмотрел сервисом Trace and audit и увидел, что, несмотря на то, что у меня один экземпляр класса, который использует одну и туже QSqlQuery и один объект QSqlDatabase, постоянно стартуются и коммитятся транзакции. Параметр транзакций CONCURRENCY | WAIT | READ_WRITE В драйвере QIBASE, собранном из исходников нет возможности управлять транзакциями. Собственно прошу совета, правильно ли я понимаю, что смогу решить вопрос, если применю API или другую библиотеку, при помощи которой я смогу создать читающую транзакцию read committed с параметром read only. А для записи создать отдельную, и ей писать. Или есть другой способ решить проблему? Вообще, задача в целом, такая: - при старте программа из базы читает настройки; - затем создает параллельные потоки, в зависимости от количества подключенных линий RS485 (на практике, пока, работал только один); - каждый поток читает из базы, какие адреса и регистры удаленных устройств нужно прочесть, читает их и пишет в базу (добавляет новую запись и обновляет информацию об устройствах UPDATE-ом). Читает из базы данные другая программа, она же, может поменять настройки. Раньше я работал через файлы, но возникла потребность пользоваться читающей программой удаленно из сети. Поэтому и сунул туда Firebird, и все вроде бы получилось. Вот только проблема с перезапуском. Как концептуально ее решить? За ранние всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 02:29:46 |
|
||
|
Транзакции, мусор, QIBASE
|
|||
|---|---|---|---|
|
#18+
agodaкопии создаются при INSERTвраки. agodaдругую библиотеку, при помощи которой я смогу создать читающую транзакцию read committed с параметром read only.Вроде сишники хвалили (если сравнить с с остальными "плачами ярослвны" относительно остального) ibpp и его форки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 10:14:00 |
|
||
|
Транзакции, мусор, QIBASE
|
|||
|---|---|---|---|
|
#18+
agodaНо вот появилась минутка, и что я накопал. Проблема была в том, что в базе было много мусора, о чем говорила огромная разница между Oldest transaction и Next transaction.Эта разница ничего не говорит о кол-ве мусора. agodaЯ попробовал делать просто sweep. Но когда программа запущена, он эффекта не давалЗначит в программе есть активная долгоиграющая тр-ция, которая и не даёт свипу работать. Её элементарно увидеть в мониторинге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 10:44:54 |
|
||
|
Транзакции, мусор, QIBASE
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyВроде сишники хвалили (если сравнить с с остальными "плачами ярослвны" относительно остального) ibpp и его форки. Ты когда-нибудь слышал "плачи Ярославны" от использующих библиотеку fbclient?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 14:04:18 |
|
||
|
Транзакции, мусор, QIBASE
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТы когда-нибудь слышал "плачи Ярославны" от использующих библиотеку fbclient?..В диком виде это ты да еще пара человек, а ну да у нас сишная линуксовая часть ПО тоже на АПИ (это по аудитории нашего раздела), много эта троица-квартет "наплачет"? К тому же все участники прошли "порог вхождения", плакать уже поздно "либо работает, либо ниасилили". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2014, 14:31:04 |
|
||
|
Транзакции, мусор, QIBASE
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо, особенно hvlad. Все мои Query живут мало, поэтому проблемы не создают. Проблему создает QSqlTableModel. Я в ней отобразил небольшой списочек настроек, который пользователь может обновить и, похоже, метод select стартовал транзакцию, и она висела все время. А смешное то, что программа в основном свернута в трей и эта таблица может понадобиться раз в месяц. После того как я ее убрал разница между Next transaction и Oldest snapshot небольше 40 при каждом повторном сборе статистики. Все так просто, а столько геморрою. Еще раз, всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2014, 14:24:27 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=103&tid=1563885]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
208ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 554ms |

| 0 / 0 |
