Russian Qt Forum

Qt => Базы данных => Тема начата: titan83 от Сентябрь 20, 2016, 09:17



Название: [Решено] QODBC + linux + unixODBC + freetds = скорость работы
Отправлено: titan83 от Сентябрь 20, 2016, 09:17
Уважаемые коллеги, здравствуйте.
Имею указанную в заголовке связку для работы из-под линукса с MSSQL 2008. Принципиально все работает, но не устраивает скорость работы по сравнению с нативными драйверами (в Windows, конечно), когда только начинал, то использовал версии из репозитария Debian где-то от 2011 года, тогда была совсем тоска, но и объем данных был небольшой - устраивало. Потом стало больше и ждать по 30 секунд получения пары сотен записей стало не комильфо, обновил unixODBC и freetds до версий от 2015 года, стало существенно лучше (в разы), но по сравнению с нативными приложение под windows все равно медленнее в 8-10 раз.
Все эксперименты проводятся в локальной сети, действующие лица подключены к одному роутеру.
Код примерно такой:
Код:
        _query->setForwardOnly(true);
        if (_query->exec(query))
            while (_query->next()) {
                qDebug() << QTime::currentTime().toString("mm:ss.zzz") << i++;
                result.append(_query->record());
            }
Время обработки каждой записи отличается для разных запросов, т.е. для простых запросов навроде
Код:
SELECT SGroupId FROM [SERVICEGROUP] 
имеем:
Код:
"53:09.463" 0
"53:09.465" 1
"53:09.467" 2
"53:09.469" 3
"53:09.470" 4
А если запрос посложнее, например,
Код:
SELECT S.SampleCode, T.TestCode, R.sTag, R.tTag, R.Result, R.LockId, R.Style, R.Source, \
                                           R.SrcRead, R.Notes, R.RdStatus, R.ModifiedTm \
                                           FROM WS_HEAD H \
                                           INNER JOIN WS_TEST T ON T.WshCode = H.WshCode \
                                           INNER JOIN WS_SAMPLE S ON S.WshCode = H.WshCode \
                                           INNER JOIN WS_RESULTS R ON R.WshCode = H.WshCode AND R.tTag = T.tTag                   AND R.sTag = S.sTag \
                                           WHERE H.WshCode = %WshCode% AND (%TestId%) AND (ColType != 10)
то и время обработки каждой записи возрастает:
Код:
"49:05.404" 75
"49:05.412" 76
"49:05.416" 77
"49:05.424" 78
"49:05.432" 79
"49:05.440" 80

Вопрос: есть ли возможность увеличить (кратно) скорость доступа к серверу MSSQL из-под линукса.
Всем дочитавшим - спасибо.


Название: Re: QODBC + linux + unixODBC + freetds = скорость работы
Отправлено: qate от Сентябрь 20, 2016, 13:17
раз помогло обновление freetds до 2015 года, то может еще обновиться до 2016 ? )
сам я не работал с mssql


Название: Re: QODBC + linux + unixODBC + freetds = скорость работы
Отправлено: titan83 от Сентябрь 20, 2016, 18:39
раз помогло обновление freetds до 2015 года, то может еще обновиться до 2016 ? )
сам я не работал с mssql
Вы отчасти правы - посоны зарелизили версию 1.0 freetds. И я обновился. Правда безрезультатно, хотя changelog у них внушительный и обновляться стоило бы в любом случае.
Но реально мне помогло-таки это: http://www.freetds.org/userguide/seemtooslow.htm
У меня был с давних времен максимальный лог всей работы freetds - набежало аж 90 мегабайт за год, ну и запись в файл тормозила работу очень прилично. Сейчас быстрее в 5(!) раз стало, что меня абсолютно устраивает.