Уважаемые коллеги, здравствуйте.
Имею указанную в заголовке связку для работы из-под линукса с 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 из-под линукса.
Всем дочитавшим - спасибо.