|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Боюсь нарваться на критику, но все-же рискну спросить... После перевода большого проекта 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.
Из особенностей: Есть триггер на on_connect и on_disconnect, в котором имеется обращение к контекстным переменным и запись в журнал (таблицу) начала/конца пользовательской сессии с другими атрибутами, полученными с контекстных переменных. На 2.5 за все время эксплуатации таких проблем не было, даже при наличии триггера на on_connect с обращением внутри него к mon$. При переходе mon$ заменили на контекстные переменные. Виснет не всегда, но закономерности определить не смог, единственное что при таком зависании всегда есть fb-процесс, который грузит ядро процессора на ~ 100%. Пока отключил шедулеры и запретил другим разработчикам обращаться к mon$ Куда копать и на что еще обратить внимание? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 16:28 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Начните с замены 32-разрядного сервера Firebird на 64-разрядный. Как бы странно это не звучало. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 16:31 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Viktor_bs Стек любого из "зависших" процессов в каждом ФБ-процессе более одного потока, если их тоже показать - возможно будет не так "бесполезно" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 16:32 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
dimitr Viktor_bs Стек любого из "зависших" процессов в каждом ФБ-процессе более одного потока, если их тоже показать - возможно будет не так "бесполезно" MON$ таблицы видимо тут не причем ( Опять зависло все. В логах кроме INET/inet_error: read errno = 10054 такая вот ошибка: Код: plaintext 1. 2. 3. 4. 5. 6.
При 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 13:42 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Viktor_bs, по возможности UDF надо выкидывать и заменять на встроенные функции ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 13:57 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Viktor_bsТакже замечено падение UDF, написанных на Delphi (на 2.5 не падали) на функции trunc. вот это вот в самом разнообразном виде с кривыми udf происходит - поменяли классик на супер (или наоборот) - стало падать - переехали на новый сервер - стало падать - обновили версию ФБ - стало падать и т.д. кто его знает, как оно в памяти чего портило, или еще как. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 14:44 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
kdv, потому что люди в большинстве своём процесс миграции на новую версию очень упрощённо делают. backup -> restore. Проверяем вроде всё работает, ну и ладно. Я когда переводил БД с 1.5 -> 2.5. Потом ещё 3 месяца UDF выпиливал у которых есть аналоги встроенных функций. Последние окончательно ушли с переходом на 3.0, где недостающие просто переписал на PSQL функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 14:53 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Симонов Денис, с udf это немного не про то. Выпиливать - да, их надо, но когда "тут работало, а тут засбоило" - это про странности распределения памяти. Например, у людей функция с неправильным возвратом результата годами работала, а потом что-то поменяли, и хрясь, она начала выдавать лажу вместо правильных строк (как и должно было быть с самого начала). И таких случаев я помню приличное количество. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 15:23 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Симонов Денис потому что люди в большинстве своём процесс миграции на новую версию очень упрощённо делают. Та это все хорошо и понятно, но... У нас 3-ка используется давно, но на других базах, более мелких (гиг по 500...700) и с меньшей нагрузкой и проблем не наблюдалось. Перевод крупнейшей базы тянули до последнего и 2 недели тестировали и вот перевели на свою голову... Бог с тем падением удф, найдем причины и утечки, если они конечно же есть, хоть были написаны 100500 лет назад, пережили разные версии FB: interbase -> yaffil -> 1.5 -> 2.1 --> 2.5 Но 300 других коннектов лочатся, останавливается вся работа, процессы снимаются только через terminate, что чревато.... На обычных вызовах удф не падает, падает при сложной отработке кучи триггеров с использованием удф внутри них. P.S. Предрекая упрек в неправильном выборе СУБД для таких объемов при таких кривых руках скажу: В работе используем не только Firebird, но и другие СУБД, например Postgress с 12Тб базой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 15:24 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
kdvИ таких случаев я помню приличное количество. А что их помнить-то. Свежий случай: https://www.sql.ru/forum/actualthread.aspx?tid=1335997 Говнокод на говнокоде, работать может только чудом, но аффтар стоит на своём "работает годами". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 15:30 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Viktor_bs Но 300 других коннектов лочатся, останавливается вся работа, процессы снимаются только через terminate, что чревато.... На обычных вызовах удф не падает, падает при сложной отработке кучи триггеров с использованием удф внутри них. А это уже вопрос уязвимости и безопасности для архитектуры classic . какая бы кривая UDF или способы ее использования ни были, это не должно останавливать работу других пользователей для архитектуры classic ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 15:33 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Viktor_bs, кривая внешняя функция положит любую СУБД. Вопрос ещё на как эти внешние функции написаны. UDF в принципе не безопасны, любые исключения выброшенные в них наружу могу просто навернуть сервер. Да Влад там соломки подстелил. Но в принципе эта сам по себе не безопасный способ написания внешних функций. Не зря в 4.0 UDF объявили устаревшими и призывают переписать их на UDR. З.Ы. Использовать 32-разрядный сервер при таких размерах БД не самое разумное решение. Я так понимаю это вынужденное решение именно из за UDF. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 15:33 |
|
Firebird 3 & MON$
|
|||
---|---|---|---|
#18+
Симонов Денис Я так понимаю это вынужденное решение именно из за UDF. Именно из-за сложных удф, которые написаны 100500 лет назад. Если было бы так просто перейти на х64, давно бы там были. Понемногу юзаем udr на других базах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 15:37 |
|
|
start [/forum/topic.php?fid=40&msg=40069689&tid=1560033]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 252ms |
total: | 519ms |
0 / 0 |