powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизация запросов с большим количеством вставок и удалений
25 сообщений из 37, страница 1 из 2
Оптимизация запросов с большим количеством вставок и удалений
    #39999837
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня. Есть хп, которая делает очень много расчетов, во время этих расчетов что-то пишет и удаляет во временные таблицы.
До определенного момента все работает очень быстро, но вот чем больше проходит вставок и удалений, производительность падает в геометрической прогрессии. Проблема решается простым дроблением вызова процедуры не за один большой период, а за меньшие, при которых база не тормозит.
Так вот вопрос, почему так происходит? Это такие проблемы архитектуры субд, или есть какие то алгоритмы при которых сервак не будет уходить в себя? Или может быть в 4-ке будет лучше с этим.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999844
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если временные таблицы - это GTT, то
а) не надо ничего из них удалять - это пустая трата времени и памяти
б) нужно обеспечить чтобы ненужные на данном этапе (старые) записи не попадали в новые запросы
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999845
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992Так вот вопрос, почему так происходит?

Потому что автор процедуры не потрудился проанализировать её план на реальных данных
большого объёма.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999846
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, тут программист нужен. (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999870
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992Так вот вопрос, почему так происходит?

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

demon1992Это такие проблемы архитектуры субд

это скорее проблемы архитектуры вашего алгоритма расчётов. Мне GTT для буферизации промежуточных расчётов потребовалась всего 2 раза. И эти процедуры работают пулей и не тормозят.

demon1992Или может быть в 4-ке будет лучше с этим.

там много чего улучшили, но опять же не увидев что вы именно делаете трудно сказать
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999954
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992,

если сбор данных во временные таблицы и их последующая обработка идут в одной транзакции, то индексы по этим таблицам не используются - на них нет статистики, а планы выполнения строятся на prepare.

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

на моих объемах с 30 мин до 2 сек.

на время создания и отладки - обычный текст, потом в ES
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999976
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pastor,
В одной транзакции.
Спасибо за подсказку, попробую.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999986
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor
если сбор данных во временные таблицы и их последующая обработка идут в одной транзакции, то индексы по этим таблицам не используются - на них нет статистики, а планы выполнения строятся на prepare.
PK должны использоваться, iirc.

pastor
обработку данных переписал на EXECUTE STATEMENT внутри процедуры - они препарятся перед выполнением
Статистика от этого не появляется. Разве что кардинальность таблиц отличается от нулевой.

pastor
на моих объемах с 30 мин до 2 сек.
Верю. Но диагноз - не правильный ;)
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #39999999
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorто индексы по этим таблицам не используются - на них нет статистики
на них она нулевая, типа "ключей в индексе нет", но - индексы используются. По крайней мере на обычных таблицах.
Ну и да, оптимизатор может выкинуть индекс, если есть индекс по ПК "получше".
Короче, план надо смотреть.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000141
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
pastor
если сбор данных во временные таблицы и их последующая обработка идут в одной транзакции, то индексы по этим таблицам не используются - на них нет статистики, а планы выполнения строятся на prepare.
PK должны использоваться, iirc.

pastor
обработку данных переписал на EXECUTE STATEMENT внутри процедуры - они препарятся перед выполнением
Статистика от этого не появляется. Разве что кардинальность таблиц отличается от нулевой.

pastor
на моих объемах с 30 мин до 2 сек.
Верю. Но диагноз - не правильный ;)


это уже обсуждалось. в том числе с тобой.

https://www.sql.ru/forum/1198849/ispolzovanie-indeksov-na-vremennyh-tablicah-vnutri-procedur-s-i-bez-execute-statement

выводы я тогда сделал, возможно, неправильные, но эффективные.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000164
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor

если сбор данных во временные таблицы и их последующая обработка идут в одной транзакции, то индексы по этим таблицам не используются - на них нет статистики, а планы выполнения строятся на prepare.

Не знаю почему, но у меня индексы используются
откуда такой вывод Ситуация была аналогичная ситуации ТС
Решилось все ровно тем что посоветовал ТСу hvlad
hvlad
Если временные таблицы - это GTT, то
а) не надо ничего из них удалять - это пустая трата времени и памяти
б) нужно обеспечить чтобы ненужные на данном этапе (старые) записи не попадали в новые запросы

Для обеспечения пункта б)
добавил в таблицы новое поле ("номер порции") , добавил индекс по этому полю ну и во всех запросах добавил условие "номер порции" = :"номер порции"
(ну мне повезло, "номер порции" не надо было искуственно придумывать, он по сути и так существовал)
Все.
Этого было достаточно.

на всякий, решил сейчас все перепроверить
Убираю индекс - время выполнения ~30минут
Добавляю индекс - время выполнения ~2минуты

...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000173
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,

потому что я не совсем точно выразился

1. накопление и обработка - в одной процедуре

2. подхватывать нужно было не PK/FK, а специально сделанный индекс
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000182
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor
1. накопление и обработка - в одной процедуре

Возможно что как-бы в этом и проблема (Но у меня по этому поводу есть сомнения),
У меня процедура одна, в ней в цикле вызов другой процедуры с "номером порции", которая в свою очередь вызывает другие и т.д и т.п. "заполнение" и "чтение" в основном разнесены по разным процедурам
pastor
2. подхватывать нужно было не PK/FK, а специально сделанный индекс

Ну таки да, подхватывается специально сделанный индекс
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000188
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь два принципиально разных сценария работы.

а) простой - у pastor'а - когда данные в GTT накапливаются и потом используются один (или пару) раз в тр-ции, причём использование данных требует их индексирования, отличного от ПК
Тут проблема с планом того запроса, который использует данные, и вынесение его препарирования (с помощью ES) на тот момент, когда таблицы не пусты, влияет на план в лучшую сторону.

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

б) чуть более сложный - у demon1992 и m7m - когда данные накапливаются, используются и удаляются многократно в одной тр-ции.
Тут проблема с накоплением мусора, который невозможно очистить в одной тр-ции, и поэтому каждый следующий select постоянно читает старые ненужные данные.
Может наложиться проблема и с планом запроса, как в (а), но проблему мусора решение из (а) не устранит.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000189
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Напомню: для маленьких таблиц оптимизатор может не использовать индексы, т.к. в этом часто нет смысла.
Но когда таблица чуть больше - оптимизатор может решить взять индекс, даже если статистика пуста.

Ну вот и все для меня прояснилось.
Спасибо!!!
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000266
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОсобо подчеркну - влияет не статистика индексов (которой нет в любом случае), а
кардинальность таблицы - которая реально отличается.

Статистики индексов нет только у того, кто поленился один раз её пересчитать с
заполненными временными таблицами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000275
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

hvladОсобо подчеркну - влияет не статистика индексов (которой нет в любом случае), а
кардинальность таблицы - которая реально отличается.

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


1. нормально совмещать DDL с DML в одной транзакции?

2. пока расчехлял склероз, уже напомнил, что речь об одном ОПЕРАТОРЕ (SP, EB).

да и проблема, грят, не в индексах, а кардинальная.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000279
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor1. нормально совмещать DDL с DML в одной транзакции?

Нормально. Но нужно хорошо понимать что ты делаешь и не совать "SET STATISTICS" куда
попало. Повторяю медленно: ОДИН РАЗ .
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000284
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

pastor1. нормально совмещать DDL с DML в одной транзакции?

Нормально. Но нужно хорошо понимать что ты делаешь и не совать "SET STATISTICS" куда
попало. Повторяю медленно: ОДИН РАЗ .


до первого рестора?
после морковкиного заговенья?
на святого Проньку?

только в присутствии сисадмина?


и каким местом это повлияет на кардинальность?
на момент старта ХП - таблицы пусты

при одновременной работе нескольких пользователей - что будет?


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

Пофиг. Статистика индексов глобальна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000287
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

pastorна момент старта ХП - таблицы пусты

Пофиг. Статистика индексов глобальна.


насколько я понял Влада - статистика не при чем.
оптимизатор кладет на нее, если таблицы пустые
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000315
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m
hvlad
Напомню: для маленьких таблиц оптимизатор может не использовать индексы, т.к. в этом часто нет смысла.
Но когда таблица чуть больше - оптимизатор может решить взять индекс, даже если статистика пуста.

Ну вот и все для меня прояснилось.
Спасибо!!!

Хотя, с прояснилось малость погорячился
Чего-то я думал что при препарировании процедуры, происходит препарирование
и всех используемых процедур, и это у меня теперь не укладывается с "когда таблица чуть больше - оптимизатор может решить взять индекс"
Когда-же происходит препарирование вложенных процедур??
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000318
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m
m7m
пропущено...

Ну вот и все для меня прояснилось.
Спасибо!!!

Хотя, с прояснилось малость погорячился
Чего-то я думал что при препарировании процедуры, происходит препарирование
и всех используемых процедур, и это у меня теперь не укладывается с "когда таблица чуть больше - оптимизатор может решить взять индекс"
Когда-же происходит препарирование вложенных процедур??


все права, планы и пр. при препарировании запроса. в т.ч. вложенных, рекурсивных и пр.

в этом месте наступаем себе на эти самые.

логика, зависящая от данных, при отсутствии этих данных.

Dimitry Sibiryakov советует использовать память предыдущих перерождений, в нашем же случае, карма очищается полностью и колесо сансары делает полный оборот.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000326
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m
Чего-то я думал что при препарировании процедуры, происходит препарирование
и всех используемых процедур
Так и есть, только если они не были загружены в кеш раньше.
В чём сомнения ?
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000345
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorDimitry Sibiryakov советует использовать память предыдущих перерождений, в нашем же
случае, карма очищается полностью и колесо сансары делает полный оборот.

И вот как тут не будешь грубым с такой вот общественностью?..

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


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