powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB3 классик зависают отдельные процессы
25 сообщений из 28, страница 1 из 2
FB3 классик зависают отдельные процессы
    #40077613
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это опять мы со своей мега базой. Предыдущая серия закончилась на том, что мы перешли с супер сервера на классик. Версия ФБ 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*



Кто виноват и что делать??
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077616
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22Кто виноват и что делать??

может тот кто написал этот неоптимальный запрос?
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077617
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

варианты следующие

1. базы данных не одинаковые по метаданным
2. на рабочей базе накопился мусор в этой таблице и вы напарываетесь на его чистку. На копии ясен пень мусора нет. Судя по вашей статистике с управлением транзакциями у вас плохо

З.Ы. Переходи на 4.0, он хотя бы частично компенсирует косяки с управлением транзакциями
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077620
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, запрос оптимизировать уже дальше некуда. Он извлекает список головных
организаций по заданному списку торговых агентов.

Структура данных такая: у организации может быть несколько магазинов, в магазине могут быть
подразделения. За магазином или подразделением закреплены свои торговые агенты.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select DISTINCT con.id 
from
  gd_contact dep JOIN gd_contact con ON dep.LB >= con.LB and dep.RB <= con.RB
where
  dep.USR$CONTRADEAGENTKEY IN (280465811, 798186753, 875701130) 
  and 
  dep.contacttype = 4 
  and 
  con.contacttype = 3



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 записей.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077621
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.06.2021 12:47, sysdba22 пишет:
>
> Весь справочник GD_CONTACT это 64 000 записей.

а натуралом если выбирать?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077622
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

собери статистику по таблицам которые в запросе участвуют на зависающей БД. Обязательно с ключиком r

Тогда хоть поймём это из-за сборки мусора или в другом месте искать надо
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077626
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 (...
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077627
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22Весь справочник GD_CONTACT это 64 000 записей.
значит, можно посмотреть
- на размер файла сортировки этого запроса (на рабочей базе)
- gstat database -r -t GD_CONTACT, чтобы понять ее реальный размер.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077631
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

и еще
- кто у вас там такие ФК создает - USR$FKGD_CONTACT1221 ?
- явно нет индекса на contacttype (хотя может и есть, но с хреновой селективностью)
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077632
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз уж пошло гадание по самым идиотским ошибкам, добавлю от себя транзакцию RC
NO_REC_VERSION для этого запроса.

Будем делать ставки?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077633
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv

- кто у вас там такие ФК создает - USR$FKGD_CONTACT1221 ?


платформа ))

kdv

- явно нет индекса на contacttype (хотя может и есть, но с хреновой селективностью)


типов возможных меньше десяти. редко когда по этому полю что-то выбирается,
и в индексе нет особого смысла.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077634
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
аккуратно отключили пользователей и перегрузили сервер.

запрос выполняется но целых 11 минут... у нас на копии бд пару секунд.

файл со статистикой прикреплен.

пока, будем ориентировать клиента на бэкап-восстановление на выходных и обновление сервера до ФБ 3.0.8.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077635
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кхм. Я кажется въехал что это за запрос.

В общем видимо структура этой таблицы была спроектирована в бородатые коды когда ФБ/ИБ не поддерживал рекурсивные запросы.
То есть если я правильно понимаю это для того чтобы вытаскивать древовидную структуру.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077637
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

а если второй раз запрос запустить? Статистика снята после выполнения тормозящего запроса?
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077638
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Раз уж пошло гадание по самым идиотским ошибкам, добавлю от себя транзакцию RC
NO_REC_VERSION для этого запроса.

Будем делать ставки?..


rec_version
read_committed
nowait
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077640
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

статистика бессмысленная, т.к. вы уже всех отрубили, мусор (вероятно) собрался, и т.д.
Так-то таблица 45 мегабайт, записей там 72,7 тысячи, а не 64. Ну и запись длинная, 200 байт.
И заполнение не очень - 33%. Видимо, версии там были.

sysdba22запрос выполняется но целых 11 минут..
он, вестимо, мусор и собрал. А потом статистику собрали...

p.s. не надо делать так, как вы делаете. Сначала надо понять что там с транзакциями и версиями,
решить что с этим делать, а уж если совсем "ничего не понятно" - отрубать юзеров и перегружать сервер.
А с нынешним подходом вы так и будете "перегружать сервер" каждую неделю.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077641
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
sysdba22,

а если второй раз запрос запустить? Статистика снята после выполнения тормозящего запроса?


повторно выполняется тоже больше 10 мин. на незагруженном сервере. Сейчас пошли подключаться пользователи и уже время увеличивается... Один запрос висит 15 минут уже.

Файлы сортировки все по 0Кб. Пока хватает оперативной памяти винде все кэшировать.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077642
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисСтатистика снята после выполнения тормозящего запроса?

Судя по всему да, но остаётся два забвных момента.
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: Хотя, конечно, я и сам знаю пару способов такую хрень наплодить, но они в основном уже пофикшены (как минимум в четвёрке).
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077643
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да таблица фрагментирована пипец как. Пустых страниц много, значит мусор там точно был. И походу этой таблице делают частые апдейты.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077644
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

у вас таблица сильно фрагментирована. Что-то у меня подозрение что и обычный

Код: sql
1.
select count(*) from gd_contact



будет тормозить
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077646
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
sysdba22,

у вас таблица сильно фрагментирована. Что-то у меня подозрение что и обычный

Код: sql
1.
select count(*) from gd_contact



будет тормозить



count(*) выполняется моментально. более того, он выполнялся моментально даже в той ситуации, когда к этой таблице висели несколько вышеуказанных запросов.
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077647
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22Файлы сортировки все по 0Кб. Пока хватает оперативной памяти винде все кэшировать.
господи помилуй... у файлов с 0кб надо СВОЙСТВА ФАЙЛА смотреть :-) Там реальный размер виден.
В темпе что там, файлов много? Диск с темпом не тормозной (по записи)?
ну почти всё, что можно, сделал наоборот :-)
Dimitry SibiryakovКоличество нод в индексе на порядок больше, чем записей для них.
количество ключей обычно от количества записей до количество_записей+версии.
Там да, у двух индексов ключей по 655 тысяч, что говорит о том, что
- версий было дофигища, в 10 раз больше записей.
- сборка мусора еще не кончилась, видимо (индексы не прочистились).
или надо сделать ALTER INDEX ... ACTIVE индексам
GD_X_CONTACT_RB и GD_X_CONTACT_LB
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077652
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    Index USR$FKGD_CONTACT1221 (18)
	Root page: 25444756, depth: 2, leaf buckets: 56, nodes: 74315
	Average node length: 3.74, total dup: 74244, max dup: 53287
	Average key length: 1.29, compression ratio: 1.20
	Average prefix length: 1.55, average data length: 0.00
	Clustering factor: 14045, ratio: 0.19
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 4
	    40 - 59% = 34
	    60 - 79% = 5
	    80 - 99% = 13

думаю насчёт dep.USR$CONTRADEAGENTKEY+0 IN kdv прав

И ещё советую обновить статистику по индексам
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077654
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv

- сборка мусора еще не кончилась, видимо (индексы не прочистились).
или надо сделать ALTER INDEX ... ACTIVE индексам
GD_X_CONTACT_RB и GD_X_CONTACT_LB


вот, это помогло! теперь работает быстро.

будем искать долгую транзакцию и кто мог сделать массовый апдейт по таблице контактов.

ВСЕМ СПАСИБО! ))
...
Рейтинг: 0 / 0
FB3 классик зависают отдельные процессы
    #40077655
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvсборка мусора еще не кончилась, видимо (индексы не прочистились).

Кончилась. Просто в их версии живёт баг, который оставляет висячие ноды если поле
изменялось несколько раз в одной транзакции. Что, однако, очень странно для таблицы,
похожей на справочник.

kdvили надо сделать ALTER INDEX ... ACTIVE индексам
GD_X_CONTACT_RB и GD_X_CONTACT_LB

По-моему их вообще надо убить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB3 классик зависают отдельные процессы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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