powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / QSqlQuery + Firebird длительное ожидание ответа на query->next()
25 сообщений из 36, страница 1 из 2
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390577
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Даже не знаю, туда ли я написал.

Есть программа на Qt 4.8.1 (работает под виндой), Firebird 2.5.2. Драйвер собран из исходников Qt с использованием fbclient_ms.lib.

Есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE (
ADDR SMALLINT NOT NULL,
TAG SMALLINT NOT NULL,
VAL FLOAT,
DATE_TIME TIMESTAMP,
REQ_UPDATE INTEGER NOT NULL,
REAL_TIME INTEGER NOT NULL,
REQ_WRITE INTEGER NOT NULL,
CONSTRAINT UNQ_ADDR_TAG UNIQUE (ADDR,TAG)
)



Таблица имеет 7680 записей. 30 - ADDR на каждый приходится 256 - TAG

Выполняется запрос
Код: sql
1.
2.
3.
4.
SELECT TAG, VAL FROM RTTABLE 
    WHERE ADDR = 1 
              AND REAL_TIME = 1
              AND REQ_WRITE = 0



В целом быстродействие удовлетворяет, но при первом обращение, обычно после перезагрузки компа первое обращение может выполняться до 5 и более минут, а последующие обращения занимают миллисекунды.

И самое странное, что задержка возникает при вызове первого query->next();

Код следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    if(!query->prepare(
        "SELECT TAG, VAL FROM RTTABLE "
             "WHERE ADDR = :id_addr "
                    "AND REAL_TIME = 1 "
                    "AND REQ_WRITE = 0 "
        )
    ){
        qDebug() << "IRTPoolTags::getPoolIncTags query->prepare"
                 << query->lastError();
        return;
    }

    query->bindValue(":id_addr",curAddr);

    if(!query->exec()){
        qDebug() << "IRTPoolTags::getPoolIncTags query->exec"
                 << query->lastError();
        return;
    }

    while(query->next()){
        PoolTag poolTag;
        poolTag.tag = query->value(0).toInt();
        poolTag.val = query->value(1).toDouble();

        listTag.append(poolTag);
    }



Вот первый «query->next()» и тормозит дальше как по маслу.

query создается в конструкторе:
Код: plaintext
1.
query = new QSqlQuery(db);



Предварительно db создается и открывается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
bool IncPool::openDB()
{
    db =  QSqlDatabase::addDatabase("QIBASE",threadID);

    db.setDatabaseName ("INCBASE") ;
    db.setUserName ("sysdba") ;
    db.setPassword("masterkey") ;

    db.setHostName ("localhost") ;

    if (!db.open()) {

        qDebug() << lastError;
        return false;
    }
    return true;
}


где threadID поле получаемое следующим образом:
Код: plaintext
1.
2.
    threadID = QString::number(
                (qint32)QThread::currentThreadId(), 16).toUpper();



Поток пока одни REAL_TIME = 1 AND REQ_WRITE = 0 устанавливает другое приложение. В принципе все работает, но вот при первом включение такая засада.

Пробовал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    if(!query->first()){
        return;
    }

    do{
        PoolTag poolTag;
        poolTag.tag = query->value(0).toInt();
        poolTag.val = query->value(1).toDouble();

        listTag.append(poolTag);
    }while(query->next());



Таже задержка только query->first().

В общем, не могу понять, как с этим бороться. Может, кто что подскажет? Буду очень признателен.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390585
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaДаже не знаю, туда ли я написал.
Не, не туда. Тут про С++, а у вас что-то другое.
agodaпервое обращение может выполняться до 5 и более минут, а последующие обращения занимают миллисекунды
База локальная. Может антивирус проверяет базу в первый раз?
Потому что 7000 записей никак не могут считываться 5 минут - т.е. тут дело не в SQL, а в каких то посторонних факторах.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390616
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agoda,

Видимо, дело в бд, а не в клиенте.
Первый fetch - это просто выполнение запроса до стадии получения первой записи.
Попробуй проверить есть ли такой же эффект без использования этой программы, выполняя этот же запрос через какую-нибудь консоль.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390818
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyagodaДаже не знаю, туда ли я написал.
Не, не туда. Тут про С++, а у вас что-то другое.

Прошу прощения, но я не нашел подходящего форума для такого вопроса. Толи база, толи код на С++, толи как вы написали антивирус. Увидел задержку после query->next() и решил написать в С++.

Anatoly Moskovskyagodaпервое обращение может выполняться до 5 и более минут, а последующие обращения занимают миллисекунды
База локальная. Может антивирус проверяет базу в первый раз?
Потому что 7000 записей никак не могут считываться 5 минут - т.е. тут дело не в SQL, а в каких то посторонних факторах.

Про антивирус я и не подумал, хотя на похожие грабли уже наступал. Спасибо, вечером попробую. База локальная.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyМожет антивирус проверяет базу в первый раз?

В этом случае тормоза были бы на connect.

Qt драйвер для Firebird вообще известен своей кривизной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390875
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAnatoly MoskovskyМожет антивирус проверяет базу в первый раз?

В этом случае тормоза были бы на connect.

Qt драйвер для Firebird вообще известен своей кривизной.
И как быть? Отказаться от Qt?
Я, правда, еще не проверил теорию с антивирусом…
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390881
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaИ как быть? Отказаться от Qt?
Лично я бы так и сделал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390917
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaИ как быть? Отказаться от Qt?
Лично я бы так и сделал.
Мне нужен толстый клиент для нескольких рабочих станций виндовых и линуховых. Я пробовал Лазарус, но там были глюки с полосами прокруток, хинтами и т.д. Плюс, то что работало в винде не всегда работало в линухе. Попробовал Qt. Гуй как-то менее глючный показался. Да и с базой работал, только вылезло вот это неприятное место.

А как на счет Qt SQL driver for Firebird with IBPP library qtfirebirdibppsqldriver? Я тут начал просматривать альтернативы…
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391022
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyМожет антивирус проверяет базу в первый раз?

В этом случае тормоза были бы на connect.

Необязательно если коннект (вернее то что за ним стоит) выполняется сервером асинхронно.
Как на самом деле - не знаю.

Dimitry SibiryakovQt драйвер для Firebird вообще известен своей кривизной.
Про кривизну драйвера - не буду спорить :)
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391348
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaА как на счет Qt SQL driver for Firebird with IBPP library
qtfirebirdibppsqldriver?
На него жалоб вроде бы как не было.

Anatoly MoskovskyНеобязательно если коннект (вернее то что за ним стоит)
выполняется сервером асинхронно.
Как на самом деле - не знаю.
Как оно на самом деле в сервере - я знаю. А вот Qt драйвер - тёмная лошадка.

А вообще-то при такой длинной задержке это всё должно тривиально проверяться с помощью
штатного Firebird-овского isql. Если он ведёт себя так же - нужно копать сервер. Работает
нормально - приложение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391360
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы знаете что на Qt можно писать вообще без использования QSQL модуля и без этих кривых драйверов. Вся мощь ODBC или какой-нибудь native library к вашим услугам.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391579
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlА вы знаете что на Qt можно писать вообще без использования QSQL модуля и без этих кривых драйверов. Вся мощь ODBC или какой-нибудь native library к вашим услугам.Спасибо за рекомендацию.

Я посмотрел, что в виндовой Qt 4.8.1 драйвер QODBC также нужно было собирать, и решил собрать QIBASE. Все заработало и ничего кроме fb не пришлось на машину ставить. Мне ничего другого не требовалось. Но вот наткнулся на такую проблему.

У меня пока нет доступа к той машине, где приложение работает. Проверю теорию с антивирусом. Если не поможет, подумаю, чем воспользоваться ODBC или qtfirebirdibppsqldriver. Мне нужно, что бы и под виндой и под линухом одинаково работало.

А можно ссылку на то как работать с ODBC без QtSql?
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391582
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaА можно ссылку на то как работать с ODBC без QtSql?
С ODBC работать так:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx
С Firebird работать так: http://www.ibphoenix.com/files/60ApiGuide.zip
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391588
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaА как на счет Qt SQL driver for Firebird with IBPP library
qtfirebirdibppsqldriver?
На него жалоб вроде бы как не было.Попробую, если отключение антивируса не поможет.
Dimitry SibiryakovА вообще-то при такой длинной задержке это всё должно тривиально проверяться с помощью
штатного Firebird-овского isql. Если он ведёт себя так же - нужно копать сервер. Работает
нормально - приложение.


Дело в том, что такая задержка выскакивает не постоянно. Обычно при первом доступе после перезагрузки компа, но не всегда. У меня этот запрос выполняется в цикле и занимает до десяти миллисекунд. И только иногда такое происходит. В принципе подождать и дальше все работает. Но когда ждать нужно до пяти минут закрадывается сомнение, и люди нервничают.

В общем я isql-ем пробовал у меня такой длительности не получалось но учитывая что у меня и в приложении это происходит не часто я не могу быть уверенным.

Жаль, сегодня не получилось добраться до машины с приложением, очень хочется, что бы это был антивирус.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391594
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaА можно ссылку на то как работать с ODBC без QtSql?
С ODBC работать так:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx
С Firebird работать так: http://www.ibphoenix.com/files/60ApiGuide.zip
Спасибо, посмотрел. Чтобы не сильно менять уже готовое приложение придется написать свой врапер с интерфейсами, как у QSql. Или предстоит крутой рефакторинг.

Если отключение антивируса не поможет, сразу попробую qtfirebirdibppsqldriver. Если там все плохо буду пробовать… :(

Спасибо за то, что осветили путь.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391600
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaDimitry Sibiryakovпропущено...

На него жалоб вроде бы как не было.Попробую, если отключение антивируса не поможет.
Dimitry SibiryakovА вообще-то при такой длинной задержке это всё должно тривиально проверяться с помощью
штатного Firebird-овского isql. Если он ведёт себя так же - нужно копать сервер. Работает
нормально - приложение.


Дело в том, что такая задержка выскакивает не постоянно. Обычно при первом доступе после перезагрузки компа, но не всегда. У меня этот запрос выполняется в цикле и занимает до десяти миллисекунд. И только иногда такое происходит. В принципе подождать и дальше все работает. Но когда ждать нужно до пяти минут закрадывается сомнение, и люди нервничают.

В общем я isql-ем пробовал у меня такой длительности не получалось но учитывая что у меня и в приложении это происходит не часто я не могу быть уверенным.

Жаль, сегодня не получилось добраться до машины с приложением, очень хочется, что бы это был антивирус.


Так может это банально кэш набивается ...
Кэш субд.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391601
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaDimitry Sibiryakovпропущено...

С ODBC работать так:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx
С Firebird работать так: http://www.ibphoenix.com/files/60ApiGuide.zip
Спасибо, посмотрел. Чтобы не сильно менять уже готовое приложение придется написать свой врапер с интерфейсами, как у QSql. Или предстоит крутой рефакторинг.

Если отключение антивируса не поможет, сразу попробую qtfirebirdibppsqldriver. Если там все плохо буду пробовать… :(

Спасибо за то, что осветили путь.

Не делай ничего, пока не выяснишь причину.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391603
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТак может это банально кэш набивается ...
Кэш субд.
Он набивается при execute, не при fetch.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391756
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivagodaпропущено...
Попробую, если отключение антивируса не поможет.
пропущено...


Дело в том, что такая задержка выскакивает не постоянно. Обычно при первом доступе после перезагрузки компа, но не всегда. У меня этот запрос выполняется в цикле и занимает до десяти миллисекунд. И только иногда такое происходит. В принципе подождать и дальше все работает. Но когда ждать нужно до пяти минут закрадывается сомнение, и люди нервничают.

В общем я isql-ем пробовал у меня такой длительности не получалось но учитывая что у меня и в приложении это происходит не часто я не могу быть уверенным.

Жаль, сегодня не получилось добраться до машины с приложением, очень хочется, что бы это был антивирус.


Так может это банально кэш набивается ...
Кэш субд.А как это проверить?
Да и иногда запрос не возвращает ни одной записи, а тормоза все равно присутствуют. Хуже то, что та машина, где это проявляется, у заказчика и географически далеко расположена. И перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.
Спасибо за советы. Я теперь хоть знаю, куда смотреть в случае чего. Переделывать, конечно, сразу не буду бросаться. Как че узнаю, сюда напишу, чем дело закончилось.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392154
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaмашина, где это проявляется, у заказчика и географически далеко расположена. И
перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.

Тогда вопрос на засыпку: а ты действительно абсолютно уверен, что тормозит именно вызов
next?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392161
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Со слов бухгалтера :)
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392234
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivТак может это банально кэш набивается ...
Кэш субд.
Он набивается при execute, не при fetch.


Это ни ты, ни я не знаем, когда он набивается.
Но я тебе точно скажу, на 100%, fetch тоже может помещать данные в кэш. И если напр. ты не вызовешь лишний раз fetch, кэш останется нетронутым.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392274
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто ни ты, ни я не знаем, когда он набивается.
Мы говорим не о MS SQL, а о Firebird, не забывай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392416
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovagodaмашина, где это проявляется, у заказчика и географически далеко расположена. И
перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.

Тогда вопрос на засыпку: а ты действительно абсолютно уверен, что тормозит именно вызов
next?..
Уверен, у меня есть лог, в котором записаны времена выполнения каждой функции.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392433
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyDimitry Sibiryakov,

Со слов бухгалтера :):)
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / QSqlQuery + Firebird длительное ожидание ответа на query->next()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]