powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Оптимизация запросов с большим количеством вставок и удалений
37 сообщений из 37, показаны все 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
Оптимизация запросов с большим количеством вставок и удалений
    #40000370
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorоптимизатор кладет на нее, если таблицы пустые
что, прямо для всех таблиц NATURAL использует? Нет же.
...
Рейтинг: 0 / 0
Оптимизация запросов с большим количеством вставок и удалений
    #40000445
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
m7m
Чего-то я думал что при препарировании процедуры, происходит препарирование
и всех используемых процедур
Так и есть, только если они не были загружены в кеш раньше.
В чём сомнения ?

Да вот,
m7m
не укладывается с "когда таблица чуть больше - оптимизатор может решить взять индекс"

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


Решил все-же в IBE посмотреть Вот таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE GLOBAL TEMPORARY TABLE RCALC_TEMP_ACCOUNT_ABON (
    CODE            TCODENN NOT NULL /* TCODENN = INTEGER NOT NULL */,
    ACCOUNT_CODE    TACCOUNT /* TACCOUNT = BIGINT */,
    CALC_PD_FROM    TCODE /* TCODE = INTEGER */,
    CALC_PD_TILL    TCODE /* TCODE = INTEGER */,
    SERVICE_CODE    TCODE /* TCODE = INTEGER */,
    CALC_DATE_FROM  TDATE /* TDATE = DATE */,
    CALC_DATE_TILL  TDATE /* TDATE = DATE */,
    HOUSE_CODE      TCODE /* TCODE = INTEGER */
) ON COMMIT DELETE ROWS;

ALTER TABLE RCALC_TEMP_ACCOUNT_ABON ADD CONSTRAINT PK_RCALC_TEMP_ACCOUNT_ABON PRIMARY KEY (CODE);

CREATE INDEX RCALC_TEMP_ACCOUNT_ABON_IDX1 ON RCALC_TEMP_ACCOUNT_ABON (HOUSE_CODE);



Вот запрос
Код: sql
1.
2.
3.
4.
select L10.Account_Code, L10.Calc_Pd_From
        from Rcalc_Temp_Account_Abon L10
        where L10.Service_Code = :A_Service_Code
          and L10.House_Code = :A_House_Code

и вот его план
Код: sql
1.
PLAN (L10 INDEX (RCALC_TEMP_ACCOUNT_ABON_IDX1))



(Это реальная таблица и реальные запрос, ну разве что INTO убрал)

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

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

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

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

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

pastorDimitry Sibiryakov советует использовать память предыдущих перерождений, в нашем же
случае, карма очищается полностью и колесо сансары делает полный оборот.

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

Я предложил ровно то, что предложил: предоставить оптимизатору статистику индексов,
собранную в подходящий момент на типичных данных. Что там у тебя очищается колесом -
циферке в системных таблицах сугубо всё равно.


с наших эмпиреев некоторые вещи виднее.
пересобирание индексов после рестора, пересобирание всех индексов одним чохом по кнопке пользователя и пр.

динамический параметр эфемерной сущности

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

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


это ещё зачем, или вы рестор с переключателем -i делаете?

зачем людям база с данными и несобранной статистикой?

90% - поломали - mend - backup(ignore) - restore.
в запущенных случаях - перенос в чистую БД, со сбором статистики :)

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

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

при ресторе индексы создаются неактивными, а потом строятся (активируются). После построения индекса статистика в них всегда наисвежайшая.


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

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

причём тут временные таблицы? Они после рестора данными сами не наполнятся


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


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