|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
Это опять мы со своей мега базой. Предыдущая серия закончилась на том, что мы перешли с супер сервера на классик. Версия ФБ 3.0.5.33172. Прекратились рандомные повреждения БД с частотой где-то раз в два месяца. Но, теперь напоролись на другую неприятную вещь. Дано, 1) размер БД сразу после восстановления 290 Гб, в процессе работы размер файла 340 Гб 2) 256 одновременных подключений Проблема: Один из запросов перестал выполняться. Запрос простой, выборка из одной таблицы с джоином на нее же. На копии базы этот запрос выполняется за несколько секунд. На рабочей базе он запускается и висит часами без ответа. Если запустить несколько таких запросов, то они все зависнут. Причем другие запросы, в том числе и включающие в выборку данную таблицу, выполняются. Только медленнее. Изучение монитора ресурсов операционной системы показывает наличие нескольких процессов фб, которые непрерывно что-то пишут на диск со скоростью 0.5-2.5 МБ/сек. В логе файреберда нет ничего, кроме нескольких ошибок 10054, обрыв сетевого соединения. К этим запросам они не относятся, т.к. идут с других машин. Header page: Database header page information: Flags 0 Generation 409227000 System Change Number 1881 Page size 8192 ODS version 12.0 Oldest transaction 405174855 Oldest active 405174856 Oldest snapshot 404420671 Next transaction 408104131 Sequence number 0 Next attachment ID 1119966 Implementation HW=AMD/Intel/x64 little-endian OS=Windows CC=MSVC Shadow count 0 Page buffers 2000 Next header page 0 Database dialect 3 Creation date Sep 28, 2019 11:23:37 Attributes force write Variable header data: Database backup GUID: {48F2911F-B2DA-46F5-D7AE-FD80BB5F8F93} Sweep interval: 0 *END* Кто виноват и что делать?? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 12:26 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22Кто виноват и что делать?? может тот кто написал этот неоптимальный запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 12:36 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, варианты следующие 1. базы данных не одинаковые по метаданным 2. на рабочей базе накопился мусор в этой таблице и вы напарываетесь на его чистку. На копии ясен пень мусора нет. Судя по вашей статистике с управлением транзакциями у вас плохо З.Ы. Переходи на 4.0, он хотя бы частично компенсирует косяки с управлением транзакциями ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 12:40 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
К сожалению, запрос оптимизировать уже дальше некуда. Он извлекает список головных организаций по заданному списку торговых агентов. Структура данных такая: у организации может быть несколько магазинов, в магазине могут быть подразделения. За магазином или подразделением закреплены свои торговые агенты. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
PLAN SORT (JOIN (DEP INDEX (USR$FKGD_CONTACT1221, USR$FKGD_CONTACT1221, USR$FKGD_CONTACT1221), CON INDEX (GD_X_CONTACT_LB, GD_X_CONTACT_RB))) Весь справочник GD_CONTACT это 64 000 записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 12:47 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
15.06.2021 12:47, sysdba22 пишет: > > Весь справочник GD_CONTACT это 64 000 записей. а натуралом если выбирать? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 12:52 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, собери статистику по таблицам которые в запросе участвуют на зависающей БД. Обязательно с ключиком r Тогда хоть поймём это из-за сборки мусора или в другом месте искать надо ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 12:54 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, База создана 626 дней назад. Всего было 408 млн транзакций, т.е. в среднем 651 тысяча транзакций в сутки. Не сильно большая нагрузка. При этом OAT застряла от Next аж на 3 миллиона транзакций. То есть, есть какая-то активная транзакция, которая длится уже 4.5 дней. В этом случае надо смотреть джойн mon$attachments и mon$transactions, и смотреть, какой негодяй это делает (с какой машины, из какого приложения, и т.д. В этом случае вы однозначно напарываетесь на версии (но пока еще не на мусор) из-за чего запрос и тормозит. Нужна полная статистика gstat -r ... чтобы понять, где идет накопление версий. Собственно, когда эту активную транзакцию прикончите, версии превратятся в мусор, и начнется сборка мусора, что тоже будет тормозить. Надо разбираться, что там с этими транзакциями. Вполне может быть, что "программист заснул в IBexpert" на рабочей базе. sysdba22 dep.USR$CONTRADEAGENTKEY IN (280465811, 798186753, 875701130) поскольку из плана видно что по этому столбцу есть FK, в зависимости от распределения данных может помочь dep.USR$CONTRADEAGENTKEY+0 IN (... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:00 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22Весь справочник GD_CONTACT это 64 000 записей. значит, можно посмотреть - на размер файла сортировки этого запроса (на рабочей базе) - gstat database -r -t GD_CONTACT, чтобы понять ее реальный размер. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:03 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, и еще - кто у вас там такие ФК создает - USR$FKGD_CONTACT1221 ? - явно нет индекса на contacttype (хотя может и есть, но с хреновой селективностью) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:12 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
Раз уж пошло гадание по самым идиотским ошибкам, добавлю от себя транзакцию RC NO_REC_VERSION для этого запроса. Будем делать ставки?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:16 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
kdv - кто у вас там такие ФК создает - USR$FKGD_CONTACT1221 ? платформа )) kdv - явно нет индекса на contacttype (хотя может и есть, но с хреновой селективностью) типов возможных меньше десяти. редко когда по этому полю что-то выбирается, и в индексе нет особого смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:16 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
аккуратно отключили пользователей и перегрузили сервер. запрос выполняется но целых 11 минут... у нас на копии бд пару секунд. файл со статистикой прикреплен. пока, будем ориентировать клиента на бэкап-восстановление на выходных и обновление сервера до ФБ 3.0.8. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:20 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
кхм. Я кажется въехал что это за запрос. В общем видимо структура этой таблицы была спроектирована в бородатые коды когда ФБ/ИБ не поддерживал рекурсивные запросы. То есть если я правильно понимаю это для того чтобы вытаскивать древовидную структуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:21 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, а если второй раз запрос запустить? Статистика снята после выполнения тормозящего запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:23 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Раз уж пошло гадание по самым идиотским ошибкам, добавлю от себя транзакцию RC NO_REC_VERSION для этого запроса. Будем делать ставки?.. rec_version read_committed nowait ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:23 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, статистика бессмысленная, т.к. вы уже всех отрубили, мусор (вероятно) собрался, и т.д. Так-то таблица 45 мегабайт, записей там 72,7 тысячи, а не 64. Ну и запись длинная, 200 байт. И заполнение не очень - 33%. Видимо, версии там были. sysdba22запрос выполняется но целых 11 минут.. он, вестимо, мусор и собрал. А потом статистику собрали... p.s. не надо делать так, как вы делаете. Сначала надо понять что там с транзакциями и версиями, решить что с этим делать, а уж если совсем "ничего не понятно" - отрубать юзеров и перегружать сервер. А с нынешним подходом вы так и будете "перегружать сервер" каждую неделю. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:25 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
Симонов Денис sysdba22, а если второй раз запрос запустить? Статистика снята после выполнения тормозящего запроса? повторно выполняется тоже больше 10 мин. на незагруженном сервере. Сейчас пошли подключаться пользователи и уже время увеличивается... Один запрос висит 15 минут уже. Файлы сортировки все по 0Кб. Пока хватает оперативной памяти винде все кэшировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:26 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
Симонов ДенисСтатистика снята после выполнения тормозящего запроса? Судя по всему да, но остаётся два забвных момента. Average record length: 194.54, total records: 72763 Average version length: 0.00, total versions: 0, max versions: 0 Таблица чиста, но: Index GD_X_CONTACT_LB (3) Root page: 37544832, depth: 3, leaf buckets: 1118, nodes: 655844 Количество нод в индексе на порядок больше, чем записей для них. Это очень сильное колдунство, тут Влад нужен. PS: Хотя, конечно, я и сам знаю пару способов такую хрень наплодить, но они в основном уже пофикшены (как минимум в четвёрке). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:27 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
да таблица фрагментирована пипец как. Пустых страниц много, значит мусор там точно был. И походу этой таблице делают частые апдейты. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:29 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, у вас таблица сильно фрагментирована. Что-то у меня подозрение что и обычный Код: sql 1.
будет тормозить ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:32 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
Симонов Денис sysdba22, у вас таблица сильно фрагментирована. Что-то у меня подозрение что и обычный Код: sql 1.
будет тормозить count(*) выполняется моментально. более того, он выполнялся моментально даже в той ситуации, когда к этой таблице висели несколько вышеуказанных запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:33 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22Файлы сортировки все по 0Кб. Пока хватает оперативной памяти винде все кэшировать. господи помилуй... у файлов с 0кб надо СВОЙСТВА ФАЙЛА смотреть :-) Там реальный размер виден. В темпе что там, файлов много? Диск с темпом не тормозной (по записи)? ну почти всё, что можно, сделал наоборот :-) Dimitry SibiryakovКоличество нод в индексе на порядок больше, чем записей для них. количество ключей обычно от количества записей до количество_записей+версии. Там да, у двух индексов ключей по 655 тысяч, что говорит о том, что - версий было дофигища, в 10 раз больше записей. - сборка мусора еще не кончилась, видимо (индексы не прочистились). или надо сделать ALTER INDEX ... ACTIVE индексам GD_X_CONTACT_RB и GD_X_CONTACT_LB ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:34 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
sysdba22, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
думаю насчёт dep.USR$CONTRADEAGENTKEY+0 IN kdv прав И ещё советую обновить статистику по индексам ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:43 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
kdv - сборка мусора еще не кончилась, видимо (индексы не прочистились). или надо сделать ALTER INDEX ... ACTIVE индексам GD_X_CONTACT_RB и GD_X_CONTACT_LB вот, это помогло! теперь работает быстро. будем искать долгую транзакцию и кто мог сделать массовый апдейт по таблице контактов. ВСЕМ СПАСИБО! )) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:45 |
|
FB3 классик зависают отдельные процессы
|
|||
---|---|---|---|
#18+
kdvсборка мусора еще не кончилась, видимо (индексы не прочистились). Кончилась. Просто в их версии живёт баг, который оставляет висячие ноды если поле изменялось несколько раз в одной транзакции. Что, однако, очень странно для таблицы, похожей на справочник. kdvили надо сделать ALTER INDEX ... ACTIVE индексам GD_X_CONTACT_RB и GD_X_CONTACT_LB По-моему их вообще надо убить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2021, 13:47 |
|
|
start [/forum/topic.php?fid=40&msg=40077634&tid=1560010]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 254ms |
total: | 516ms |
0 / 0 |