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

Хорошо, зайдём с другой стороны: поскольку проблема возникает после перезагрузки сервера,
озаботься сбором полной статистики о базе (с помощью gstat) сразу после его перезагрузки.
Анализ этой информации (которым вообще-то должен заниматься DBA по собственной инициативе
гораздо чаще) может показать если приложение с базой криво работает.

PS: Уж не кнопкой ли Reset перезагружают тот сервер?..
PPS: Это уже тема не для этого раздела.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38393719
trdm_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovagodaмашина, где это проявляется, у заказчика и географически далеко расположена. И
перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.

Тогда вопрос на засыпку: а ты действительно абсолютно уверен, что тормозит именно вызов
next?..

Профайлинг может это показывает.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38396565
Фотография MedEx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agoda
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    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;
    }


Код: 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.
28.
29.
30.
31.
32.
33.
//query.setForwardOnly(true);???
query.exec(QString(
                "SELECT TAG, VAL FROM RTTABLE "
             "WHERE ADDR = %1 "
                    "AND REAL_TIME = 1 "
                    "AND REQ_WRITE = 0 "
                .arg(curAddr)
                .toUtf8());

            if(query.isActive())
            {
		if(!query.isForwardOnly())
		{
			if(query.size() == 0)QDebug() << "query size = 0";
		}
		else
		if(query->first())
		{
			do
			{
				PoolTag poolTag;
        			poolTag.tag = query->value(0).toInt();
        			poolTag.val = query->value(1).toDouble();
        			listTag.append(poolTag);
			}
			while(query->next());
		}
		else QDebug() << "query size = 0";             	 
            }
            else
            {
                QDebug() << query.lastError().text();                
            }



agoda
Код: plaintext
1.
query = new QSqlQuery(db);



Код: plaintext
1.
QSqlQuery query(db);
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38423870
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MedEx
Код: plaintext
1.
//query.setForwardOnly(true);???


Я не устанавливал, по умолчанию false, спасибо попробую.
MedEx
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
query.exec(QString(
                "SELECT TAG, VAL FROM RTTABLE "
             "WHERE ADDR = %1 "
                    "AND REAL_TIME = 1 "
                    "AND REQ_WRITE = 0 "
                .arg(curAddr)
                .toUtf8());


Вряд ли bindValue влияет на выполнение next()
MedEx
Код: plaintext
1.
2.
            if(query.isActive())
            {


Чем это отличается от проверки результата exec?
MedEx
Код: plaintext
1.
2.
3.
4.
5.
		if(!query.isForwardOnly())
		{
			if(query.size() == 0)QDebug() << "query size = 0";
		}
		else


Если я установлю setForwardOnly(true) эту проверку делать, наверное, не надо?
MedEx
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
		if(query->first())
		{
			do
			{
				PoolTag poolTag;
        			poolTag.tag = query->value(0).toInt();
        			poolTag.val = query->value(1).toDouble();
        			listTag.append(poolTag);
			}
			while(query->next());
		}
		else QDebug() << "query size = 0"; 


Согласно доке по next(): «If the result is currently located before the first record, e.g. immediately after a query is executed, an attempt is made to retrieve the first record.»
а про exec сказано:
«After the query is executed, the query is positioned on an invalid record and must be navigated to a valid record before data values can be retrieved (for example, using next()).»

Так что конструкция
Код: plaintext
1.
2.
3.
while(query->next()){
…
}


сразу после exec() вполне корректна, да и я сначала пробовал с first() – тормозило на first()

MedEx
Код: plaintext
1.
QSqlQuery query(db);


А это-то как может влиять?


А вообще, я наконец-то добрался до своей базы.
Отключение антивируса ничего не дало. Вот только за месяц пока я добирался, база выросла до 3 гиг, и при запуске программа в этом месте зависала так, что «отвисания» дожидаться уже не хотелось. Причем после минут 30 программа проходила это место, а дальше все шло как по маслу и при перезапуске программы в том числе. А вот спустя какое-то время повторялось и повторялось при перезапуске. В один из затыков (хрошо, что зависло на долго, и я еще не далеко отьехал) я схватил ISQL и написал такой же запрос. ISQL задумался на долго. После чего я сделал бекап/ресторе и все побежало. Дня три как бегает, программу перезапускали, и таких длительных затыков не было. Мне не понятно, ведь таблица, к которой я обращаюсь, маленькая, в базе растет другая таблица. Может делать две базы одну для настроек, другую для данных?.. Но это точно не в этой ветке нужно обсуждать.

А setForwardOnly(true) я вставлю, хоть, пока, тормозов не наблюдаю, но потестить насколько эта штука помогает надо.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424448
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaМне не понятно
Если непонятно, бери в руки базу в которой оно тормозит, gstat и смотри что там с этой
твоей таблицей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424497
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaМне не понятно
Если непонятно, бери в руки базу в которой оно тормозит, gstat и смотри что там с этой
твоей таблицей.

Да я это понял еще с предыдущих постов, только база от меня далеко и оказаться в нужном месте в нужный момент не так просто. Как получу какую-то статистику, думаю, уже с ней обращусь в раздел Firebird, InterBase.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424566
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaбаза от меня далеко и оказаться в нужном месте в нужный момент не так
просто
Не пойму о чём ты говоришь. Когда ты "сделал бекап/ресторе" у тебя на руках должно было
быть две базы: старая, в которой запрос тормозит и новая в которой "все побежало". Первую
и надо было закинуть себе на винт для опытов. Почему ты этого не сделал?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424816
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПочему ты этого не сделал?
Еще через месяц узнаем :)
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38427230
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovagodaбаза от меня далеко и оказаться в нужном месте в нужный момент не так
просто
Не пойму о чём ты говоришь. Когда ты "сделал бекап/ресторе" у тебя на руках должно было
быть две базы: старая, в которой запрос тормозит и новая в которой "все побежало". Первую
и надо было закинуть себе на винт для опытов. Почему ты этого не сделал?
По глупости. Под рукой не оказалось флешки, а инет в том месте такой, что 3 гига будут месяц передаваться.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38427232
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дай угадаю: по той же глупости ты эту старую базу стёр, чтобы уже никто никогда не мог
узнать в чём же была проблема. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38427266
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovДай угадаю: по той же глупости ты эту старую базу стёр, чтобы уже никто никогда не мог
узнать в чём же была проблема. Ню-ню...
Именно. Но, учитывая, что я уже делал бекап/ресторе до этого и вопрос возник, есть надежда, что проблема повторится.
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / QSqlQuery + Firebird длительное ожидание ответа на query->next()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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