Метод Prepare и кластер MySQL Percona XtraDB

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Ответить
Stasonych
Сообщения: 2
Зарегистрирован: Вт 11 апр 2017 04:41

Метод Prepare и кластер MySQL Percona XtraDB

Сообщение Stasonych » Вт 11 апр 2017 05:08

Здравствуйте!
Столкнулся с очень интересной ситуацией... У меня имеется рабочий проект на Delphi XE2 в котором я использую компоненты UniDAC версии 6.2.8 для доступа к БД MySQL. Для повышения отказоустойчивости БД поднял кластер на движке Percona XtraDB. На виртуалках ось UBUNTU 16. Причем, организовал через nginx проксирование запросов для распределения нагрузки. Но суть не в этом...
В проекте я использую множество датасетов, в том числе и которые создаю динамически. Если я создаю датасет, затем описываю запрос, вызываю метод Prepare и делаю Open, то.. Вы не поверите.. Кластер благополучно крашится. Сначала выпадает одна нода из кластера, после очередного запроса - вторая, и т.д. Пока весь кластер не отключится. В логах ничего нет. Просто процесс MySQL вылетает из памяти и все. Знаю, что это немного не по теме. Но дело в том, что это связано именно с вызовом метода Prepare. Без него всё работает.
Если сервер MySQL на Win системе, то все нормально. Такой проблемы нет.
Я не понимаю как метод Prepare может положить процесс MySQL. Как работает Prepare в UniDAC? Что он может делать такого? Исходников модуля Uni.pas у меня нет, чтобы покопаться в коде. Читал, что метод Prepare парсит запрос для корректного принятия параметров, т.е. он по сути на сервер ничего не отправляет, а отрабатывает на стороне клиента. Есть подробная информация об этом?
Привожу пример простого кода динамически созданного Query. Аналогично используются и статичные датасеты и проблема та же

Код: Выделить всё

 Query_some:=TUniQuery.Create(self);
 Query_some.Connection:=UniConnection1;
 Query_some.SQL.Add('select * from some_tbl where id=:id');
 Query_some.Prepare;
 Query_some.ParamByName('id').AsString:=AIncident_Id;
 Query_some.Open;
 // ...
 Query_some.Free;

ViktorV
Devart Team
Сообщения: 199
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Метод Prepare и кластер MySQL Percona XtraDB

Сообщение ViktorV » Вт 11 апр 2017 11:02

При вызове метода TMyQuery.Prepare запрос препарируется на сервере. Поэтому, для получения более подробной информации по этому вопрос, пожалуйста, обратитесь к документации MySQL сервера или задайте соответствующий вопрос на профильных форумах.

Stasonych
Сообщения: 2
Зарегистрирован: Вт 11 апр 2017 04:41

Re: Метод Prepare и кластер MySQL Percona XtraDB

Сообщение Stasonych » Ср 12 апр 2017 06:48

Спасибо большое за оперативный ответ!

ViktorV
Devart Team
Сообщения: 199
Зарегистрирован: Чт 31 июл 2014 09:52

Re: Метод Prepare и кластер MySQL Percona XtraDB

Сообщение ViktorV » Ср 12 апр 2017 10:42

Спасибо за интерес к нашим продуктам.
Обращайтесь к нам, если у Вас возникнут вопросы по UniDAC.

Ответить