Название: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: baka от Декабрь 28, 2007, 12:53 Здравствуйте, происходит такая ошибка
Lost connection to MySQL server during query QMYSQL: Unable to execute query и такая MySQL server has gone away QMYSQL : Unable to execute query происходят они не всегда а только если я обращаюсь к БД из параллельного потока и главного одновременно. ( внутри MyThread::run() происходит выборка из одной таблицы.) т.е. из двух потоков отправляем запросы к QSqlDatabase, а она берет и отваливается :o Что делать? Куда смотреть? Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: ритт от Декабрь 28, 2007, 14:53 тролли на этот счёт советуют работать с бд из главного потока, т.к. с разными бд получаются разные побочные эффекты
в твоём случае, как вариант: QSqlDatabase создавай не с дефолтным именем, а с каким-нибудь ууидом, во втором потоке тоже создавай QSqlDatabase с ууидом (этот ууид запоминаешь) и открывай это новое соединение, по завершению работы потока просто закроешь соединение и удалишь QSqlDatabase по сохранённому ууиду Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: baka от Декабрь 29, 2007, 12:46 спасибо,
вроде заработало. Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: DpoHro от Февраль 14, 2008, 19:53 Аналогичная ситуация (ошибки) у меня происходит когда истекает установленное на сервере время подключения, сервер просто разрывает соединение и последующие запросы не проходят.
У меня все выборки идут в потоке и тесно связаны с сигналами виджетов. То есть если перед каждой выборкой открывать, а после закрывать соединение, то получится довольно много соединений за короткий промежуток времени, сдается мне это не есть гуд... ??? Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: Вячеслав от Февраль 14, 2008, 20:07 Гы .... а выполнить по таймеру холостой запрос,когда ничего не делаем ?
Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: DpoHro от Февраль 14, 2008, 20:15 Гы .... а выполнить по таймеру холостой запрос,когда ничего не делаем ? Вы верите в правильность такого решения?вариант 1) Если вдруг блондинко оператор использующая мою прогу подвесит комп на те самые 30 сек. то события от таймера могут и не прийти... вернее могут прийти с опозданием. вариант 2) Может оказаться так, что канал будет сильно загружен (сервер в интернете) и какой-то запрос подлвиснет, может и на 30 сек. следующий запрос выполнится? Это вопрос, я сам не знаю =) Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: DpoHro от Февраль 14, 2008, 20:19 У меня рисуется перспектива на 500-700 пользователей онлайн, я вот думаю как сократить количество запросов к БД ...
Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: Вячеслав от Февраль 14, 2008, 21:43 1) За мускул не скажу,но у того-же птица (firebird) есть KeepAlive настройки - сервер сам проверяет жив клиент или нет ;) Это окромя таймаута для запросов.... Может у мускула что-нибудь такое есть ;)
2)про блондинко - кто мешает создать поток с Реал-тайм приоритетом со свой QSQLDatabase и дергать его через мутекс (WaitForSingleObject) который будет дергать сервер ? В лоб но ой - работает ;) 3) А в сторону трехзвенки не посмотреть ? Может оно менее прожорливо по ресурсам \соединениям будет ? Да и 700 соединений - это далеко не показатель...Cоединение оно что делает - тупой запрос типа select count(*) from my table или запускает пересчет квартальной статистики ?? ;) И обязательно _одна_ БД (сервер) ? Запаралелить низя ? Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: DpoHro от Февраль 14, 2008, 21:57 Да, но мне кажется с таймером это скорее как временное решение, хотя нет ничего постоянней чем временное =)
Есть несколько функций у программы ресурсоемких - это статистика, но оно не часто, а так восновном 20-25 селектов за 1 расчет для блондинко нескольких цифарок, ну впринципе то таблицы небольшие, тут думаю не особо отожрутся ресурсы, но программа разрастается быстро... и запросов все больше... Но не суть, мне важнее разобраться с потерей коннекта. Вобщем то я все что навыбирал из БД храню в QSqlQuery никуда не перекидываю. Очень не хочется мне делать свои структуры для хранения полученной информации ... Но происходит следующее: после потери соединения - выдается ошибка, пытаюсь при ее возникновении пересоздать соединение и тут уже я не могу работать с ранее созданными объектами QSqlQuery. Замкнутый круг... Мне то собственно и не нужно перманентное соединение с БД, но если я буду закрывать соединение и потом снова его создавать, то не смогу работать с кверями нормально (( Трехзвенка, простите мою темноту, это что? Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: Вячеслав от Февраль 15, 2008, 00:09 Трехзвенка - клиент <-> сервер приложений <-> сервер БД ;)
Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: Tonal от Февраль 15, 2008, 08:09 Мы всегда перегоняем ответы сервера в кеш объектов на клиенте, поэтому глубоко фиолетово в каком коннекте что получено. :)
P.S. [off]2 Вячеслав нихт нужно в конце предложения ставить - так баще будет. :) [/off] Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: DpoHro от Февраль 15, 2008, 09:04 С трехзвенкой ясно...
Мы всегда перегоняем ответы сервера в кеш объектов на клиенте... Если можно поподробнее, как это реализуется?Дублирующий набор? И всеже странно, раньше все работало, более того, я сейчас взял предыдущую версию программы, и там не теряется коннект!!! С чем это может быть связано, я чтото напортачил видимо ... Цитировать P.S. [off]2 Вячеслав нихт нужно в конце предложения ставить - так баще будет. :-) [/off] Да меня тоже подпись порадовала 5+Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: Вячеслав от Февраль 15, 2008, 10:22 Мы всегда перегоняем ответы сервера в кеш объектов на клиенте, поэтому глубоко фиолетово в каком коннекте что получено. :-) ГЫ ;) кэш это сила .... особенно в СКВ ;) ;)P.S. [off]2 Вячеслав нихт нужно в конце предложения ставить - так баще будет. :-) [/off] нихт в конце - это по правилам немецкой грамматики ;) В свое время даже хохма была на одной конференции, когда товарисч оттуда говорит _очень_ длинную фразу ( по частям, для синхронного перевода) и в конце звучит магическое 'нихт' ... Переводчик думал не долго - "Так вот - все выше сказаанное (маленькая пауза) - неправда ;)" PS Сорри за офф - праздник вчера удался ;) ;D ;D ;D Название: Re: Lost connection to MySQL server during query QMYSQL: Unable to execute query Отправлено: DpoHro от Февраль 15, 2008, 12:17 Сделал так:
Код: QSqlQuery qq = db.exec("SET NAMES 'cp1251'"); И овцы целы и волки сыты =) И всеже странно почему раньше работало, хм... |