FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.

Игорь_UUS
Дата: 02.08.2019 12:03:46
Добрый день.

субд MSSQL 2016

Суть проблемы заключается в том что программа зависает, если в компоненте TFDConnection стоит автоматическое восстановление связи при потере соединения (делая разные тесты "ноги растут" похоже от туда). Жалуются пользователи начиная с момента когда сделал переход с XE6 на DX10.2... сейчас уже стоит DX10.3.1 и проблема с зависаниями похоже не решается в лучшую сторону. 2 проблемы, посоветуйте что можно посмотреть... не могу отрицать, что в свойствах TFDConnection мог что-то упустить..

Код настройки автоматического переподключения:

  try
    // Соединение с БД.
    FConnection                               := TFDConnection.Create(nil);
    // Свобода действий.  Не накладывает никаких ограничений на взаимодействие
    // транзакций. Обеспечивает лучшую производительность и максимальный
    // параллелизм. Возможен случай чтения "грязных" данных.
    FConnection.TxOptions.Isolation           := xiDirtyRead;
    // Загрузка полного набор данных.
    FConnection.FetchOptions.Mode             := fmAll;

    // Строка коннекции.
    FConnection.ConnectionString              := FBranchConnection;

    FConnection.LoginPrompt                   := False;
    // Флаг автоматического восстановления соединения.
    FConnection.ResourceOptions.AutoReconnect := True;
    // Флаг тихого выполнения хранимых процедур и запросов.
    FConnection.ResourceOptions.SilentMode    := True;
    FConnection.Open;
    FConnection.Connected := True;
  except
    on E: Exception do
    begin
      if Assigned(FConnection)             then
        FreeAndNil(FConnection);

      MessageBox(Handle, PChar(E.Message), nil, MB_OK Or MB_ICONERROR);
      Exit;
    end;
  end;


Проблема 1-я: Полная потеря соединения.
Провоцирую очень просто... выключаю mssql и на машине в локальной сети "кидаю" запрос.. далее очень длительное ожидание (2-ве, может больше, минут) до момента появления ошибки соединения (возможно так и должно быть.. тут маленький вопрос а можно уменьшить время ожидания?), не восстанавливая соединения с MSSQL закрываю программу, она как бы закрылась, но через диспетчер задач поток продолжает висеть в памяти. В логе виндовс что-то непонятное:
Имя сбойного приложения: test.exe, версия: 0.0.0.0, метка времени: 0x5d43e410
Имя сбойного модуля: KERNELBASE.dll, версия: 10.0.17763.615, метка времени: 0x832170f2
Код исключения: 0x0eedfade
Смещение ошибки: 0x0011fd62
Идентификатор сбойного процесса: 0x36c8
Время запуска сбойного приложения: 0x01d5490a62890496
Путь сбойного приложения: C:\ProgramData\testcomp\test1\test.exe
Путь сбойного модуля: C:\WINDOWS\System32\KERNELBASE.dll
Идентификатор отчета: 56d901d3-492c-40b6-a765-5df1246e030c
Полное имя сбойного пакета: 
Код приложения, связанного со сбойным пакетом: 

Поток программы не зависает если разъединения с БД не было, пробовал всякими средствами всегда корректное закрытие.

Теперь 2-я проблема (думаю с первой есть взаимосвязь.)
Провоцирую след. образом... выключаю mssql и на машине в локальной сети "кидаю" запрос, далее сразу включаю MSSQL... идёт корректное переподключение программа не сбоит и работает как надо... но в мониторе ресурсов mssql вижу лишний поток подключения с программой. До момента момента обрыва связи 2 пары, 1-я пара используется TFDConnection, 2-я пара используется TFDEventAlerter (использую для уведомлений со стороны MSSQL) а 3-я пара появляется "магическим" образом в момент переподключения. Далее выключаю программа... она как бы закрылась, но её поток весит в памяти... в жунале виндовс та же ошибка.

Я делал тест немного по другому... выключил MSSQL и включил его, со стороны машины в сети запрос не кидал... в этом случае изначально идёт автоматическое соединение компонента TFDEventAlerter (вижу 1-ю пару в мониторе ресурсов mssql, переподключается автоматически), а вот подключение компонента TFDConnection происходит в момент если кинуть запрос на MSSQL через программу (вижу вторую пару подключения)... в этом случае третьей пары подключения нет и закрывая программу она выгружается без проблем, поток в памяти не весит.

Попытался расписать очень подробно... может у кого есть идеи что можно посмотреть?
Игорь_UUS
Дата: 06.08.2019 15:08:21
Добрый день.


Пару дней "каверзных" тестов привели меня к тому, что не правильная работа автоматического соединения TFDConnection из за использования TFDEventAlerter.

Что с этим делать вообще непонятно... такое ощущение что TFDEventAlerter создаёт свой собственный TFDConnection, который живёт в каком-то своём потоке, которым управлять не получается((

Победить правильную работу автоматического восстановления связи в случае "DX 10.3.1 + FireDAC + MSSQL" с использованием TFDEventAlerter - не получилось, механизм приводит к зависанию программы по её завершению (только если были обрывы связи с БД) при этом появляется лишнее соединение, которое видно в "мониторе активности" менеджмент студии (в случае восстановления связи после обрыва).
Мимопроходящий
Дата: 06.08.2019 15:22:42

06.08.2019 15:08, Игорь_UUS пишет:
> Пару дней "каверзных" тестов привели меня к тому, что не правильная работа автоматического соединения TFDConnection из за использования TFDEventAlerter.

не пользуй эту хрень

Posted via ActualForum NNTP Server 1.5

X-Cite
Дата: 06.08.2019 15:27:53
https://quality.embarcadero.com/browse/RSP-24411

Оно?

Пофиксили в 10.3.2
Игорь_UUS
Дата: 06.08.2019 16:00:46
X-Cite
https://quality.embarcadero.com/browse/RSP-24411

Оно?

Пофиксили в 10.3.2


бррр.. а 10.3.2 уже вышла... или ещё тестируется?
Игорь_UUS
Дата: 06.08.2019 16:01:31
Мимопроходящий
06.08.2019 15:08, Игорь_UUS пишет:
> Пару дней "каверзных" тестов привели меня к тому, что не правильная работа автоматического соединения TFDConnection из за использования TFDEventAlerter.

не пользуй эту хрень


Если не эта "хрень" то какая есть альтернатива?
Мимопроходящий
Дата: 06.08.2019 16:09:27

06.08.2019 16:01, Игорь_UUS пишет:
> Если не эта "хрень" то какая есть альтернатива?

IBX

Posted via ActualForum NNTP Server 1.5

Игорь_UUS
Дата: 06.08.2019 16:12:53
Мимопроходящий
06.08.2019 16:01, Игорь_UUS пишет:
> Если не эта "хрень" то какая есть альтернатива?

IBX


)) InterBase не вариант... использую mssql
X-Cite
Дата: 06.08.2019 18:00:37
Игорь_UUS
X-Cite
https://quality.embarcadero.com/browse/RSP-24411

Оно?

Пофиксили в 10.3.2


бррр.. а 10.3.2 уже вышла... или ещё тестируется?

Уже как две недели вышла..
Игорь_UUS
Дата: 07.08.2019 12:23:27
Поставил апдейтом 10.3.2 бага осталась, лучше не стало... вижу изменения в размерах bpl... вроде как обновилось

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

Стоит пробовать полный снос и установку с нуля?