Попытка получить данные со связанного сервера - Потеряно соединение с MySQL сервером при «ожидании начального пакета связи», системная ошибка: 10060 " - PullRequest
0 голосов
/ 20 января 2020

У меня есть приложение, которое подключает и хранит данные в базе данных MySQL, мне нужно подключиться и извлечь эти данные в виде из другого приложения, которое использует серверную базу данных SQL. Моя попытка справиться с этим состояла в том, чтобы создать связанный сервер, который подключается к MySQL серверу на SQL сервере.

Это, похоже, сработало, все соединения прошли, и если я выполню следующие запросы

SELECT * FROM MYSQLLINK...table1` or `SELECT * FROM OPENQUERY(MYSQLLINK, 'SELECT * FROM table1')

Я получаю результаты.

Проблема

Проблема в том, что я хочу создать представление, которое объединяет довольно много справочных таблиц (на самом деле у меня есть 20 объединений, но оно присоединяется к одной и той же таблице, потому что это большая справочная таблица.) но при выполнении на SELECT или CREATE VIEW я получаю следующую ошибку.

Поставщик OLE DB "MSDA SQL" для связанного сервера "MYSQLLINK" вернул сообщение Msgstr "[MySQL] [Драйвер ODB C 5.1] Потеряно соединение с MySQL сервером при 'ожидании начального пакета связи', системная ошибка: 10060". Сообщение 7303, уровень 16, состояние 1, строка 4 Не удается инициализировать объект источника данных поставщика OLE DB "MSDA SQL" для связанного сервера "MYSQLLINK".

Completion time: 2020-01-19T22:00:00.1759949-04:00

Я не уверен, почему это происходит, был бы признателен, если бы кто-то мог помочь выяснить это и помочь в смягчении этой ошибки, которая позволит моему представлению быть созданным и опрошенным.

Я заметил, если я закомментирую 85% объединений запрос не терпит неудачу. Где бы я увеличил на этот раз упомянутый том?

Я должен также упомянуть, что MySQL находится на сервере AWS, а сервер SQL на моем локальном хосте.

1 Ответ

0 голосов
/ 20 января 2020

Я не мог воссоздать тестовый случай сбоя на моем локальном конце, но то, что вы упомянули, наводит нас на следующие указатели:

  • Ваше соединение с подключенным сервером истекает (вероятно)
  • Потенциальной причиной тайм-аута может быть большое время ответа на запрос (представление, которое объединяет довольно много справочных таблиц)

Как насчет изменения подхода:

  • Может Вы создаете представление на MySQL, а не на SQL Сервере?
  • Является ли материализация результата представления опцией?
  • Или, альтернативно, как насчет написания хранимой процедуры на SQL Конец сервера и последовательное объединение ваших таблиц по одному (или столько, сколько разумно за один раз) с использованием временных таблиц для хранения промежуточных результатов?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...