Медленные запросы при использовании MySQL в качестве связанного сервера с SQL Server (соединение ODBC) - PullRequest
1 голос
/ 13 февраля 2012

Я наблюдаю очень низкую производительность запросов при запуске хранимой подпрограммы на связанном сервере MySQL с SQL Server. Запрос запускается с SQL Server

select * from OPENQUERY(COGNOS, 'call reporting.sr_vendor_location_report(''2011-06-13 00:00:00'',''2012-01-18 00:00:00'',1,''0,1'',28,''(All)'',''(All)'',1,''(All)'')')

занимает 15 секунд, но если я проверяю журнал запросов mysql или запускаю его непосредственно на сервере, я вижу, что это занимает всего 7 секунд.

Я читал в другом месте, что MySQL ODBC соединения медленные, но я не видел ни одного предлагаемого решения. Я попытался настроить MySQL-прокси (просто запустив его с перенаправлением - без сценариев LUA), но не увидел никаких улучшений. Я использую MySQL ODBC Connector 5.1 и запускаю MySQL версии 5.5 на сервере.

Буду очень признателен за любые идеи о том, что попробовать.

UPDATE

Оказывается, openquery запускает каждый запрос дважды на сервере MySQL, в первый раз, вероятно, для получения метаданных. Есть ли способ избежать этого?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Оказывается, что использование RPC вместо OPENQUERY решает проблему генерации двумя запросами SQL Server.

например,

select * from OPENQUERY(COGNOS, 'call reporting.sr_vendor_location_report(''2011-06-13 00:00:00'',''2012-01-18 00:00:00'',1,''0,1'',28,''(All)'',''(All)'',1,''(All)'')')

становится

exec('call ...') at COGNOS
0 голосов
/ 13 февраля 2012

попытайтесь настроить провайдер на запуск вне процесса (щелкните правой кнопкой мыши на провайдере и снимите флажок разрешить в процессе).

Это не совсем параметр, связанный с производительностью, но я видел хороший прирост производительности в некоторых случаях с Oracle, возможно, он работает и с MySQL.

...