|
21.04.2022, 16:08 | #1 |
Участник
|
D365FO Ошибка "Временная проблема с подключением к базе данных"
Есть кастомный SSRS отчет "Инвентарные списки".
До декабря 2021 г. отчет формировался без ошибки. Сейчас возникает ошибка, пока только в одной компании, по одной модели учета, при отсутствии ограничения выборки основных средств из таблицы RAssetTable. Текст ошибки: «Невозможно создать запись в Инвентарные списки (RAssetInventorySheetTmp). Возникла временная проблема с подключением к базе данных. Повторите попытку позже.» При уменьшении количества выбранных основных средств путем задания фильтра в параметрах отчета по группе ОС отчет формируется без ошибок. При формировании отчета используются временные таблицы. Кто нибудь встречался с подобной ошибкой? Не подскажете в какую сторону смотреть. |
|
21.04.2022, 18:19 | #2 |
Участник
|
подозреваю, что вылетает исключение - Exception::TransientSqlConnectionError (https://docs.microsoft.com/en-us/dyn...nnection-error),
Но судя потому, что у вас отваливается регулярно и легко воспроизводится, получается превышается какой то порог по времени выполнения, вариантов не много, либо как то оптимизировать (например, запускать в несколько потоков), либо искать таймаут и его увеличивать, если это возможно.
__________________
Sergey Nefedov |
|
22.04.2022, 08:30 | #3 |
Участник
|
Да вылетает по Exception::TransientSqlConnectionError.
Обработка этого исключения в код добавлена, но это никак не повлияло на возникновение ошибки. Отчет формируется долго, в ошибку вылетает примерно через 45-50 мин. Но с уменьшенной выборкой данных формируется без ошибки за 2,5 часа. Как-то не похоже что это по таймауту, может достигается порог по какому-то другому ресурсу ? |
|
22.04.2022, 01:16 | #4 |
Участник
|
В 10.0.27 добавили анонсировали такой фикс, может быть он поможет
Цитата:
665562
Spike in "Tempdb table not present in database" after enabling fix for issue 642842 on the enviroment. |
|
22.04.2022, 11:17 | #5 |
Moderator
|
Таблица RAssetInventorySheetTmp имеет тип InMemory, хранится в памяти/диске AOS и вообще не должна иметь отношения к базе данных.
Есть вариант что у вас просто кончается место на локальном диске облачного AOS, а поскольку среда исполнения не очень осознает различия в обработке настоящих временных таблиц БД и временных таблиц, она выдает диагностику Exception::TransientSqlConnectionError. (Хотя дело вообще не в базе данных). Я бы попробовал сделать клон таблицы, сделать его TableType = TempDB и переделал бы отчет на использование этой таблицы. (Ну и класс отчета переделал бы на наследование от класса SrsReportDataProviderPreProcessTempDB ) |
|
22.04.2022, 12:27 | #6 |
Участник
|
Отчет полностью кастомный, и таблица имеет тип TempDB, а класс отчета является наследником SrsReportDataProviderPreProcessTempDB.
Кроме этого ради эксперимента пробовали использовать таблицу с типом Regular. Но проблема с ошибкой временного подключения к базе данных такая же. |
|
22.04.2022, 12:52 | #7 |
Moderator
|
Цитата:
|
|
22.04.2022, 13:54 | #8 |
Участник
|
Отчет полностью не стандартный, и реально используемая таблица именуется примерно так: XXX_RAssetInventorySheetTmp с TableType = TempDB
|
|
25.04.2022, 08:47 | #9 |
Участник
|
Да может конечно и другие какие то проблемы. Обычно какие-нибудь ошибки по месту выглядят как то более вразумительно, но исключать разумеется нельзя.
Насколько я понимаю отчет строится по принципу обхода query и в цикле идет вставка по одной записи или используется recordinsertlist ? Интересно про 2.5 часа и regular - из 2.5 часов это все время идет обращение к бд, какое время занимает вывод уже готовых данных ? Номер строки один и тот же на котором идет падение (возможно ли это как то проанализировать, например задав статическую сортировку в основном запросе ? ) С фильтрами по группам - по всем группам формируется отчет без ошибок ? Я это к чему, возможно вы фильтрами выбиваете какие специфические данные, либо с фильтрами обращение к бд идет менее 45-50 минут. В целом про какой объем строк в отчет идет речь ?
__________________
Sergey Nefedov |
|
25.04.2022, 08:52 | #10 |
Участник
|
А разве через метод setTempDB нельзя сделать tempDB, или этот вызов работает только для регулярных таблиц ?
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: fed (2). |
25.04.2022, 09:39 | #11 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: SRF (1). |
Теги |
d365fo |
|
|