powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обновление БД и селективность индексов
25 сообщений из 48, страница 1 из 2
Обновление БД и селективность индексов
    #40054588
Alex Truhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня столкнулся с забавной проблемой. Нужно было добавить в БД маленькую, простую sp, сделал, проверил работу на 2 клиентах, запустил массовое обновление. Через час звонки о жутких тормозах у некоторых клиентов. Выяснилось, что на примерно 10% баз, firebird сделал жуткий план. Решилось обновлением статистики индексов и пересозданием процедуры.

Не доводилось с таким сталкиваться раньше. Смущает то, что если индексы пересчитать не проблема, то возможность, массово пере компилировать/обновит процедуры отсутствует. Т.е. на разных данных мы получаем по разному работающие sp.
Сталкивался ли кто с такой проблемой? Какие решения? Рекомендации?
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054601
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Truhin,

перекомпилировать процедуры - чтобы что? Типа, в них план записан? нет, не записан.
Процедура при первом вызове загружается в память, для ее запросов строятся планы.
Потом всё это торчит в памяти до тех пор, пока не закроется последний коннект, обращавшийся к этой
процедуре.

Решение проблемы? Проблема - это когда коннект к базе из приложения бесконечно долго длится.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054603
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17.03.2021 14:50, Alex Truhin пишет:
> Какие решения? Рекомендации?

пользуй CS

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054624
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Alex Truhin,

перекомпилировать процедуры - чтобы что? Типа, в них план записан? нет, не записан.

Чтобы из кэша её (с неверным планом) выбить.
Можно еще переконнектиться, других вариантов нет.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054627
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше в трекер написать "пересчёт статистики индекса должен выбивать из кэша процедуры,
использующие данную таблицу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054634
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17.03.2021 15:51, Dimitry Sibiryakov пишет:
> Лучше в трекер написать "пересчёт статистики индекса должен выбивать из кэша процедуры,
> использующие данную таблицу.

+1
дайте две! ©
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054648
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

17.03.2021 15:51, Dimitry Sibiryakov пишет:
> Лучше в трекер написать "пересчёт статистики индекса должен выбивать из кэша процедуры,
> использующие данную таблицу.

+1
дайте две! ©


пересчет статистики любого индекса
должен выбивать вообще весь кеш метаданных
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054664
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex Truhin
Какие решения? Рекомендации?


Решение: забыть про inner join; использовать left или right join или подзапросы. И нервные клетки сэкономите и никакую статистику не надо будет пересчитывать.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054667
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory

Решение: забыть про inner join; использовать left или right join или подзапросы. И нервные клетки сэкономите и никакую статистику не надо будет пересчитывать.


Мдя...
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054668
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка
ggreggory

Решение: забыть про inner join; использовать left или right join или подзапросы. И нервные клетки сэкономите и никакую статистику не надо будет пересчитывать.


Мдя...
Мне кажется, в такой ситуации лучше уже забыть о программировании вообще, как минимум с использованием СУБД.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054711
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor
пересчет статистики любого индекса
должен выбивать вообще весь кеш метаданных
Это "шоб слоники бегали"? Добавили в базу метаданые местечкового "справочничечка", проинитили данными, пересчитали по нему селективности... нафига при этом вышибать ВСЕХ?
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054782
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky
pastor
пересчет статистики любого индекса
должен выбивать вообще весь кеш метаданных
Это "шоб слоники бегали"? Добавили в базу метаданые местечкового "справочничечка", проинитили данными, пересчитали по нему селективности... нафига при этом вышибать ВСЕХ?


цена вопроса вышибания кеша метаданных?
насколько мс просядет производительность первого запроса в серии?
насколько часто добавляют местечковые справочники на клиентских БД?

вместо того, чтобы отделять агнцев от козлищ, бегать по зависимостям и пр. не проще ли прибить всех одним чохом?
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054801
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Старый плюшевый мишка

Мдя...


YuRock
Мне кажется, в такой ситуации лучше уже забыть о программировании вообще, как минимум с использованием СУБД.


А вы просеките тему! ТС написал "Через час звонки о жутких тормозах у некоторых клиентов. Выяснилось, что на примерно 10% баз, firebird сделал жуткий план." . Но он просто не является лицом, оценивающем и принимающем решения и не понимает сути происходящих в его конторе процессов. А на самом деле всё было так: "Через час звонки о жутких тормозах у некоторых клиентов. Выяснилось, что на примерно 10% баз, firebird сделал жуткий план. Еще 10% клиентов из-за возникшей перегруженности суппорта просто до него не дозвонились, послали сиё изделие нах и ушли к конкурентам .". Для ТС это "забавная" проблема. Но я лично ничего забавного здесь не вижу.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054808
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

кеш метаданных это не только план запроса, это дерево его выполнения.
Думаю производительность в многопользовательской системе упадёт весьма сильно.

Тем более вышибить его целиком во всех соединениях вообще мало реально.
Пока объект используется из кеша ты его не вышибешь.
Или ты предлагаешь чтобы пересчёт селективности стал практически операцией требующей монопольного доступа?

А ты не думал что ещё существуют планы по автоматическому частичному пересчёту статистики?
А ещё что статистика в будущем может быть сильно расширена и собираться не только для индексов?
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054824
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
pastor,

кеш метаданных это не только план запроса, это дерево его выполнения.
Думаю производительность в многопользовательской системе упадёт весьма сильно.


на первый запрос.
чем это принципиально будет отличаться от первого включения системы?
на 20 мс? перетопчемся.
у меня требования по железу 300 мсек, по реакции для пользователя 2 сек.

на неправильном индексе производительность проседает в десятки раз. и это проблема, о которой сигнализирует ТС.

Тем более вышибить его целиком во всех соединениях вообще мало реально.
Пока объект используется из кеша ты его не вышибешь.
Или ты предлагаешь чтобы пересчёт селективности стал практически операцией требующей монопольного доступа?


у нас пока так, да. как и все изменение метаданных.
в качестве прицела на дробовике обычно используют компас (с)

А ты не думал что ещё существуют планы по автоматическому частичному пересчёту статистики?
А ещё что статистика в будущем может быть сильно расширена и собираться не только для индексов?

кому нужна пересобранная, но неиспользуемая статистика?

мы с Вами, уважаемый, исходим из разных парадигм.
у меня - стадо малообразованных, но трудолюбивых обезъян клиентов на куче относительно однотипных объектов с минимальными требованиями по сохранности данных, но чувствительных к скорости обслуживания и времени простоя.

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

PS. за последние годы у нас несколько сменилась философия программирования.
вместо разгребания зависимостей в большинстве случаев быстрее и НАДЕЖНЕЕ пересобрать/перезапустить все.
железо позволяет.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054836
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

У меня статистика не может быть сегодня 10/50, а завтра 50/10.
Статистику надо обновлять до того как новая или обновлённая таблица идёт в продакшн.
А не когда запустили, залили данные. Ой план не тот.

Админа в конторах которые я обслуживаю можно сказать нет, по крайней мере тех, кто шарит в Firebird.
Я разработчик и администратор Firebird в одном лице. Причём в нескольких разных конторах.
Когда происходят проблемы я сам их разруливаю по удалёнке. Местный админ занимается сетью, настройками ОС, рабочими местами, железом, но не Firebird.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054848
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
pastor,

У меня статистика не может быть сегодня 10/50, а завтра 50/10.
Статистику надо обновлять до того как новая или обновлённая таблица идёт в продакшн.
А не когда запустили, залили данные. Ой план не тот.

Админа в конторах которые я обслуживаю можно сказать нет, по крайней мере тех, кто шарит в Firebird.
Я разработчик и администратор Firebird в одном лице. Причём в нескольких разных конторах.
Когда происходят проблемы я сам их разруливаю по удалёнке. Местный админ занимается сетью, настройками ОС, рабочими местами, железом, но не Firebird.


у нас не меньше 300 действующих объектов. в двух предметных областях.
на постоянной поддержке - пара-тройка десятков.
персонально ведется три-пять.

всякая бывает статистика. вменяемая - через месяц после старта объекта.
пересчитываем, перезапускаем всех.

основной тип обновления - перенос данных в чистую эталонную БД следующей версии.

экстренный - апдейтп с текстом пары-тройки процедур. с типовым обновлением в ближайшем окне.


прогнать стадо слоников быстрее и дешевле :), чем докапываться до каждого червяка.

Апдейт всему! (с)
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054861
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, что напомнили. Я же хотел винду переставить...
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054863
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я всё пропустил...
про сантиметры было уже?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054886
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

я всё пропустил...
про сантиметры было уже?


про слоников. они вне конкуренции.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054910
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисПока объект используется из кеша ты его не вышибешь.

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

И таки да, кэш метаданных можно вообще убить, переложив его функции на обычный страничный
кэш. В этом случае проблема версионности метаданных тоже решится и можно будет избавиться
от костылей типа "нельзя смешивать DDL и DML в одной транзакции".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054945
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory

А вы просеките тему! ТС написал "Через час звонки о жутких тормозах у некоторых клиентов. Выяснилось, что на примерно 10% баз, firebird сделал жуткий план." . Но он просто не является лицом, оценивающем и принимающем решения и не понимает сути происходящих в его конторе процессов. А на самом деле всё было так: "Через час звонки о жутких тормозах у некоторых клиентов. Выяснилось, что на примерно 10% баз, firebird сделал жуткий план. Еще 10% клиентов из-за возникшей перегруженности суппорта просто до него не дозвонились, послали сиё изделие нах и ушли к конкурентам .". Для ТС это "забавная" проблема. Но я лично ничего забавного здесь не вижу.


Я бы посоветовал прежде чем приступать к поучениям просечь вот какую тему. В FB есть два способа прибить план к запросу по получению пересечения множеств гвоздиком, а не строить их объединение и потом обрезать его ножнями по краям. Но этими способами тоже нужно пользоваться с умом, там, где это действительно требуется по двум причинам. Первая и основная - в базе исторически налеплена и используется в необозримых портянках кода, сдуру или для оптимизации некоторых запросов, куча условно полезных индексов (в зависимости от распределения значений в индексе и накладываемых на эти поля запросами условий), просто бесполезных и откровенно вредных. Обычно это касается композитных индексов. От чего у оптимизатора едет крыша. Вторая - оптимизатор, как и всё в этом мире, не идеален, он развивается, как правило, в хорошую сторону, но бывает что некоторые, для большинства разработчиков приложений экзотические, запросы при этом начинает обслуживать хуже. А почему с умом - надо всегда помнить, что сочинять жёсткие планы надо не на пустых таблицах, просто глядючи на структуру, а имея в виду не только прогнозируемые объёмы данных, но и тенденции распределения значений в индексах по мере роста этих объёмов. Оптимальный на голой структуре план при увеличении объёмов на 3-4 порядка может стать так себе, а на 8-10 просто чудовищным. Даже без зависимости от конкретных значений. И при регулярно обновляемой статистике оптимизатор с развязанными руками будет адаптироваться к этим изменениям, в 80-90% случаев именно в смысле оптимизации. Во всяком случае на односегментных индексах с более-менее ровным распределением значений. Односегментных - потому что композит, содержащий уникальное поле, всегда будет с точки зрения существующего подхода к статистике идеальным индексом и оптимизатор будет его тыкать куда ни попадя.

Резюме - вопли "шеф, всё пропало, гипс снимают, клиент уезжает" в 80-90% случаев являются следствием наложения на кривую структуру данных кривых или рискованных индексов и строительства кривых запросов. Я не утверждаю что всегда это из-за того, что разработчик приложения рановато отбросил хвост и слез с дерева, много чего в развитии предметной области либо невозможно предугадать, либо требует неприемлемых затрат времени на стадии предварительного исследования этой области и построения её модели. Долгоживущие большие системы неизбежно рано или поздно превращаются в лоскутные одеяла из заплаток, мешающих друг другу, и наступает момент перетрахивания, по-научному рефакторинга. Оставшиеся 20-10% казусов с "внезапно" возникающими тормозами относятся к случаю - в индексе мульён значений 0 и сотня 1. Когда ищется значение 1, индекс просто конфетка. А вот если карта легла так, что тот же запрос стреляет по 0 - ууууу... Вот в этом случае и приходится прибивать план гвоздиком. А не городить объединения вместо пересечений. Компрене ву?
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054953
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
А вы просеките тему!
О том и речь. Вы вообще не понимаете, о чем говорите.
Предлагаете лечить ветрянку ампутацией органов, на которых выскочили прыщи. Польза от такого решения будет соответствующая.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054960
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor
у нас не меньше 300 действующих объектов. в двух предметных областях.
на постоянной поддержке - пара-тройка десятков.
персонально ведется три-пять.

всякая бывает статистика. вменяемая - через месяц после старта объекта.
пересчитываем, перезапускаем всех.
У меня таких объектов тысячи на поддержке.
Статистика пересчитывается ежедневно ночью. При любом обновлении - понятно, перекомпиляция всех процедур.
В целом проблем нет.
Но бывают, конечно (я с пол года назад тут похожую тему создавал). Хотелось бы, чтобы пересчет статистики по возможности выбразывал из кэша то, что стало неактуальным и возможно выбросить.
Но не более того. Гораздо хуже будет, если пересчет статистики не отработает.
Но в целом проблем нет. А если случаются - перезапускаем/перекомпиливаем то, что нужно. Но это редчайшие случаи. Несколько раз за годы.
...
Рейтинг: 0 / 0
Обновление БД и селективность индексов
    #40054963
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
.
И таки да, кэш метаданных можно вообще убить,


Вопрос философский.
Когда-то экономили битики, потом мегабайтики.

Время наработки нового кеша не сильно больше отслеживания зависимостей/версий и пр.
И гораздо проще в разработке.
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обновление БД и селективность индексов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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