powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
22 сообщений из 22, страница 1 из 1
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39844544
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

субд MSSQL 2016

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
  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 закрываю программу, она как бы закрылась, но через диспетчер задач поток продолжает висеть в памяти. В логе виндовс что-то непонятное:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Имя сбойного приложения: 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 через программу (вижу вторую пару подключения)... в этом случае третьей пары подключения нет и закрывая программу она выгружается без проблем, поток в памяти не весит.

Попытался расписать очень подробно... может у кого есть идеи что можно посмотреть?
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39845895
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.


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

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

Победить правильную работу автоматического восстановления связи в случае "DX 10.3.1 + FireDAC + MSSQL" с использованием TFDEventAlerter - не получилось, механизм приводит к зависанию программы по её завершению (только если были обрывы связи с БД) при этом появляется лишнее соединение, которое видно в "мониторе активности" менеджмент студии (в случае восстановления связи после обрыва).
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39845902
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.08.2019 15:08, Игорь_UUS пишет:
> Пару дней "каверзных" тестов привели меня к тому, что не правильная работа автоматического соединения TFDConnection из за использования TFDEventAlerter.

не пользуй эту хрень
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39845906
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://quality.embarcadero.com/browse/RSP-24411

Оно?

Пофиксили в 10.3.2
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39845928
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite https://quality.embarcadero.com/browse/RSP-24411

Оно?

Пофиксили в 10.3.2

бррр.. а 10.3.2 уже вышла... или ещё тестируется?
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39845929
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий06.08.2019 15:08, Игорь_UUS пишет:
> Пару дней "каверзных" тестов привели меня к тому, что не правильная работа автоматического соединения TFDConnection из за использования TFDEventAlerter.

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


Если не эта "хрень" то какая есть альтернатива?
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39845935
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.08.2019 16:01, Игорь_UUS пишет:
> Если не эта "хрень" то какая есть альтернатива?

IBX
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39845938
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий06.08.2019 16:01, Игорь_UUS пишет:
> Если не эта "хрень" то какая есть альтернатива?

IBX


)) InterBase не вариант... использую mssql
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846005
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSX-Cite https://quality.embarcadero.com/browse/RSP-24411

Оно?

Пофиксили в 10.3.2

бррр.. а 10.3.2 уже вышла... или ещё тестируется?
Уже как две недели вышла..
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846283
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поставил апдейтом 10.3.2 бага осталась, лучше не стало... вижу изменения в размерах bpl... вроде как обновилось

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

Стоит пробовать полный снос и установку с нуля?
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846295
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSПоставил апдейтом 10.3.2 бага осталась, лучше не стало... вижу изменения в размерах bpl... вроде как обновилось

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

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

Удаляете 10.3.1 затем ставите 10.3.2

Как по мне, из-за того что они меняют системные bpl, а версионирования нет, как в .Net то лучше все сносить, чистить реестр, папки, и ставить с нуля все.

Я сначала все сделал с сохранением реестра, но получил кривизну в GetIt
Delphi думала что пакеты стоят, хотя их нет. На это кстати и ругалась. В итоге в GetIt отображались оба компонента типа старый и новый... при чем старый типа установлен, а новый нет. И удалить старый нельзя и поставить новый нельзя.
Да и где гарантия что адресация методов в системных bpl не изменилась, из-за чего могут потом всплыть баги при сборке проектов со сторонними либами.

Поэтому я снес 10.3.2. со всеми приблудами (codesite express + interbase server)
Почистил реестр тут и тут (удалил ветки)
HKEY_CURRENT_USER\Software\Embarcadero\
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Embarcadero\

Почистил папки со всеми bpl в
c:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\
c:\Users\Public\Documents\Embarcadero\Studio\20.0\DCP\
c:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\

Перезагрузил комп
Поставил свежую 10.3.2 и пересобрал все что требовалось для проектов.
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846299
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite,

ещё заметил... если зайти в скомпиленный в 10.3.1 стоит "FireDAC = 17.0.0 (Build 93731)" и то же самое в 10.3.2

Вы можете посмотреть у себя, какая у Вас сборка фаердака?? буду очень признателен... я посмотрел через стандартную форму подключения к базе данных, на вкладке Info
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846337
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FireDAC.Stan.Consts.pas
Код: pascal
1.
2.
const
  C_FD_Version = '17.0.0 (Build 93731)';



Если сравнивать изменения в FireDAC.Phys.pas
то поменялось примерно следующее...
В TFDPhysEventThread.DoTimeout; TFDThread.Synchronize заменился на TFDThread.Queue
А в TFDPhysEventAlerter.Register; и TFDPhysEventAlerter.Unregister; убрали TFDPhysConnection.Lock/Unlock

Если у вас приложение без Link With Runtime, то вы можете этот файл подложить в проект и залогировать весь TFDEventAlerter и попытаться понять где же зависает... Подправить и использовать измененный или написать в QC, что не починилось...
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846364
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite FireDAC.Stan.Consts.pas
Код: pascal
1.
2.
const
  C_FD_Version = '17.0.0 (Build 93731)';



Если сравнивать изменения в FireDAC.Phys.pas
то поменялось примерно следующее...
В TFDPhysEventThread.DoTimeout; TFDThread.Synchronize заменился на TFDThread.Queue
А в TFDPhysEventAlerter.Register; и TFDPhysEventAlerter.Unregister; убрали TFDPhysConnection.Lock/Unlock

Если у вас приложение без Link With Runtime, то вы можете этот файл подложить в проект и залогировать весь TFDEventAlerter и попытаться понять где же зависает... Подправить и использовать измененный или написать в QC, что не починилось...


сейчас у меня вот такой код:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
{-------------------------------------------------------------------------------}
procedure TFDPhysEventThread.DoTimeout;
begin
  if Active and (FAlerter.GetOptions.Timeout > -1) then
    if FAlerter.GetOptions.Synchronize then
      TFDThread.Queue(nil, FAlerter.DoTimeout)
    else
      FAlerter.DoTimeout;
end;



я так полагаю как раз последней версии? т.е. устанавливать с "0"-ля особого смысла нет?
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846367
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS т.е. устанавливать с "0"-ля особого смысла нет?
Это зависит от того, насколько вы перфекционист..
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846385
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-CiteИгорь_UUS т.е. устанавливать с "0"-ля особого смысла нет?
Это зависит от того, насколько вы перфекционист..

вот "блин" незадача...
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846390
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite,

решил пойти по тяжёлому пути... удалим всё как вы сказали и поставим студию с "0"-ля... потом пересоберу все компоненты
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846809
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite,

Добрый день. Всё поставили с "0"-ля... на мой взгляд ничего не поменялось, бага присутствует и в 10.3.2.


Но Вы не поверите)) дело было в драйвере... на компе в сети стоял драйвер ms sql native client 10... поставил native client 11... всё стало работать как часики. И восстановление связи отрабатывает корректно и при закрытии программа не липнет в памяти (проверял несколько раз, все успешны).

Могу предположить, что FireDAC работает немного по разному сравнивая "native client 10" и "native client 11"
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846861
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учитывая что у вас MSSQL 2016 не думаете поставить ODBC 13.0?
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846862
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUSX-Cite,
Но Вы не поверите)) дело было в драйвере... на компе в сети стоял драйвер ms sql native client 10... поставил native client 11... всё стало работать как часики. И восстановление связи отрабатывает корректно и при закрытии программа не липнет в памяти (проверял несколько раз, все успешны).

Могу предположить, что FireDAC работает немного по разному сравнивая "native client 10" и "native client 11"

Можно кстати запостить в QC...
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39846949
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-CiteИгорь_UUSX-Cite,
Но Вы не поверите)) дело было в драйвере... на компе в сети стоял драйвер ms sql native client 10... поставил native client 11... всё стало работать как часики. И восстановление связи отрабатывает корректно и при закрытии программа не липнет в памяти (проверял несколько раз, все успешны).

Могу предположить, что FireDAC работает немного по разному сравнивая "native client 10" и "native client 11"

Можно кстати запостить в QC...

Я бы сказал нужно))) Но тут важна обязательная связка с TFDEventAlerter... без него всё работает корректно... и конечно же "native client 10"

Скажите, зачем ODBC 13.0? Вообще говоря вроде как есть и 16-й и 17-й ODBC... а главное при установке MSSQL 2016 ставиться именно native client 11 и я его считаю как основной драйвер...
...
Рейтинг: 0 / 0
FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
    #39847093
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

Да, я имел ввиду 17-ый....
Ну просто если использовать фишки которые появились только в 16 или 17, то SQLNCLI11 про них ничего не знает же...
Но он универсальный и со стандартными возможностями справляется, не спорю...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDAC на DX 10.3.1 + MSSQL2016 - зависание программы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]