powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 3 & MON$
13 сообщений из 13, страница 1 из 1
Firebird 3 & MON$
    #40069689
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь нарваться на критику, но все-же рискну спросить...
После перевода большого проекта 2Тб, ~300 коннектов на базу с FB2.5 (x86 classic) на FB3 (x86 classic) столкнулись с проблемой завиcания всех процессов при обращении кого-то к MON$ таблицам из под RDB$ADMIN (предположительно). Как таких обращений с ХП (тем более на триггерах) к ним нет, но есть несколько системных процессов, стартующих с планировщика раз в пол часа и собирающих статистику долго работающих запросов и транзакций.
Если в этот момент еще кто-то параллельно (под RDB$ADMIN) хочет отменить запрос или закрыть чужой коннект, получаем либо жуткие тормоза при обращении к MON$, либо зависание "всего и вся".

Стек любого из "зависших" процессов, но он наверное, бесполезен

Код: plaintext
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.
ntoskrnl.exe!KeSynchronizeExecution+0x2106
ntoskrnl.exe!KeWaitForMultipleObjects+0x135e
ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9
ntoskrnl.exe!KeWaitForMutexObject+0x373
ntoskrnl.exe!KeStallWhileFrozen+0x1feb
ntoskrnl.exe!__misaligned_access+0x13fd
ntoskrnl.exe!KeWaitForMultipleObjects+0x152f
ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9
ntoskrnl.exe!KeDelayExecutionThread+0xe14
ntoskrnl.exe!PsLookupThreadByThreadId+0xfc
ntoskrnl.exe!_setjmpex+0x6553
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x598
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x46e
wow64.dll!Wow64LdrpInitialize+0x23a
wow64.dll!Wow64LdrpInitialize+0x172
ntdll.dll!LdrInitShimEngineDynamic+0x23d5
ntdll.dll!memset+0xde9e
ntdll.dll!LdrInitializeThunk+0xe
ntdll.dll!ZwDelayExecution+0xc
firebird.exe!Thread::sleep+0xd
firebird.exe!Worker::shutdown+0x75
firebird.exe!SRVR_multi_thread+0x19e
firebird.exe!WinMain+0x230
firebird.exe!__tmainCRTStartup+0x150
KERNEL32.DLL!BaseThreadInitThunk+0x24
ntdll.dll!RtlInitializeExceptionChain+0x8f
ntdll.dll!RtlInitializeExceptionChain+0x5a


Из особенностей: Есть триггер на on_connect и on_disconnect, в котором имеется обращение к контекстным переменным и запись в журнал (таблицу) начала/конца пользовательской сессии с другими атрибутами, полученными с контекстных переменных.
На 2.5 за все время эксплуатации таких проблем не было, даже при наличии триггера на on_connect с обращением внутри него к mon$. При переходе mon$ заменили на контекстные переменные.

Виснет не всегда, но закономерности определить не смог, единственное что при таком зависании всегда есть fb-процесс, который грузит ядро процессора на ~ 100%.
Пока отключил шедулеры и запретил другим разработчикам обращаться к mon$

Куда копать и на что еще обратить внимание?
Спасибо.
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40069691
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начните с замены 32-разрядного сервера Firebird на 64-разрядный. Как бы странно это не звучало.
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40069694
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs
Стек любого из "зависших" процессов

в каждом ФБ-процессе более одного потока, если их тоже показать - возможно будет не так "бесполезно"
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40069968
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr
Viktor_bs
Стек любого из "зависших" процессов

в каждом ФБ-процессе более одного потока, если их тоже показать - возможно будет не так "бесполезно"

MON$ таблицы видимо тут не причем (

Опять зависло все.
В логах кроме INET/inet_error: read errno = 10054
такая вот ошибка:

Код: plaintext
1.
2.
3.
4.
5.
6.
MORION_2019  Thu May 13 12:17:03 2021
   Floating-point invalid operand.
    An indeterminant error occurred during a
    floating-point operation.
  This exception will cause the Firebird server
  to terminate abnormally.

При BugcheckAbort = 1 в логах винды следующее
---------------------------------------------------------
Имя сбойного приложения: firebird.exe, версия: 3.0.8.33463, метка времени: 0x6090a204
Имя сбойного модуля: Engine12.DLL, версия: 3.0.8.33463, метка времени: 0x6090a1cb
Код исключения: 0xc0000090
Смещение ошибки: 0x0016b41a
Идентификатор сбойного процесса: 0x4c94
Время запуска сбойного приложения: 0x01d747e007cc9569
Путь сбойного приложения: C:\Firebird3\firebird.exe
Путь сбойного модуля: C:\Firebird3\plugins\Engine12.DLL
Идентификатор отчета: 6b9570d8-b3d3-11eb-80c8-e4434b212a35
Полное имя сбойного пакета:
Код приложения, связанного со сбойным пакетом:
---------------------------------------------------------
Беглый поиск 0xc0000090 привел к
https://support.microsoft.com/en-us/topic/fix-you-receive-an-error-message-or-an-exception-when-you-compile-or-run-an-application-that-has-some-compiler-options-turned-on-in-visual-studio-2008-sp1-642c9d1b-4634-ae29-bf23-49d328e76aae
но что с этой инфой делать не ясно (

Дамп памяти, и стеки во вложении
https://drive.google.com/file/d/1j6kyvdQwqv6iTCGnfGUmnUfNl_ABlUIm

Также замечено падение UDF, написанных на Delphi (на 2.5 не падали) на функции trunc.
Гугл приводит к такому:
https://stackoverflow.com/questions/22210233/invalid-floating-point-operation-calling-trunc

О падении УДФ с зависанием сервера я уже поднимал тему, и Влад правил
https://www.sql.ru/forum/1335563/zavisanie-padaushhego-processa-firebird3

P.S. Windows Server 2012 R2 Standart
CPU: Interl Xeon Gold 6136
Firebird x86 3.0.8.33463
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40069972
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

по возможности UDF надо выкидывать и заменять на встроенные функции
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40069997
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bsТакже замечено падение UDF, написанных на Delphi (на 2.5 не падали) на функции trunc.
вот это вот в самом разнообразном виде с кривыми udf происходит
- поменяли классик на супер (или наоборот) - стало падать
- переехали на новый сервер - стало падать
- обновили версию ФБ - стало падать
и т.д.
кто его знает, как оно в памяти чего портило, или еще как.
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40070001
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

потому что люди в большинстве своём процесс миграции на новую версию очень упрощённо делают.
backup -> restore. Проверяем вроде всё работает, ну и ладно.

Я когда переводил БД с 1.5 -> 2.5. Потом ещё 3 месяца UDF выпиливал у которых есть аналоги встроенных функций.
Последние окончательно ушли с переходом на 3.0, где недостающие просто переписал на PSQL функции.
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40070019
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

с udf это немного не про то. Выпиливать - да, их надо, но когда "тут работало, а тут засбоило" - это про странности распределения памяти.
Например, у людей функция с неправильным возвратом результата годами работала, а потом что-то поменяли, и хрясь, она начала выдавать лажу вместо правильных строк (как и должно было быть с самого начала). И таких случаев я помню приличное количество.
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40070020
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис

потому что люди в большинстве своём процесс миграции на новую версию очень упрощённо делают.

Та это все хорошо и понятно, но...
У нас 3-ка используется давно, но на других базах, более мелких (гиг по 500...700) и с меньшей нагрузкой и проблем не наблюдалось.
Перевод крупнейшей базы тянули до последнего и 2 недели тестировали и вот перевели на свою голову...
Бог с тем падением удф, найдем причины и утечки, если они конечно же есть, хоть были написаны 100500 лет назад, пережили разные версии FB: interbase -> yaffil -> 1.5 -> 2.1 --> 2.5
Но 300 других коннектов лочатся, останавливается вся работа, процессы снимаются только через terminate, что чревато....
На обычных вызовах удф не падает, падает при сложной отработке кучи триггеров с использованием удф внутри них.

P.S. Предрекая упрек в неправильном выборе СУБД для таких объемов при таких кривых руках скажу:
В работе используем не только Firebird, но и другие СУБД, например Postgress с 12Тб базой.
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40070022
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvИ таких случаев я помню приличное количество.

А что их помнить-то. Свежий случай: https://www.sql.ru/forum/actualthread.aspx?tid=1335997
Говнокод на говнокоде, работать может только чудом, но аффтар стоит на своём "работает
годами".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40070023
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs

Но 300 других коннектов лочатся, останавливается вся работа, процессы снимаются только через terminate, что чревато....
На обычных вызовах удф не падает, падает при сложной отработке кучи триггеров с использованием удф внутри них.

А это уже вопрос уязвимости и безопасности для архитектуры classic . какая бы кривая UDF или способы ее использования ни были, это не должно останавливать работу других пользователей для архитектуры classic
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40070024
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

кривая внешняя функция положит любую СУБД.

Вопрос ещё на как эти внешние функции написаны. UDF в принципе не безопасны, любые исключения выброшенные в них наружу могу просто навернуть сервер. Да Влад там соломки подстелил. Но в принципе эта сам по себе не безопасный способ написания внешних функций. Не зря в 4.0 UDF объявили устаревшими и призывают переписать их на UDR.

З.Ы. Использовать 32-разрядный сервер при таких размерах БД не самое разумное решение.
Я так понимаю это вынужденное решение именно из за UDF.
...
Рейтинг: 0 / 0
Firebird 3 & MON$
    #40070025
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис

Я так понимаю это вынужденное решение именно из за UDF.

Именно из-за сложных удф, которые написаны 100500 лет назад. Если было бы так просто перейти на х64, давно бы там были.
Понемногу юзаем udr на других базах.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 3 & MON$
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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