|
Временные таблицы в PgrSQL, оптимизация
|
|||
---|---|---|---|
#18+
Добрый день! Подскажите, пожалуйста, если кто-то сталкивался. Пытаюсь заполнить и сделать upd ate из временной таблицы в PgrSQL. Но из-за того что и сама temp строится путем выборки из нескольких таблиц с большим количеством данных, и таблицы t, f тоже состоят из сотен тысяч строк, медленно отрабатывает. Как можно оптимизировать эту процедуру, чтобы она эффективно отрабатывала под нагрузкой? Может ли кто-то подсказать, как, например, встроить UPDATE по сегментам или есть какие-то еще более удачные решения? ----------- CREATE OR REPLACE FUNCTION public.F() RETURNS void AS $$ DECLARE sql_str text; begin --Создание temp sql_str := 'DR OP TABLE IF EXISTS Temp; CREATE temporary TABLE Temp( Field1 uuid, Field2 uuid, Field3 uuid, Field4 uuid, Field5 text, Field6 text, Field7 text, Field8 text, Field9 int, Field10 int, Field11 int, Fiels12 int);'; execute sql_str; --Заполнение temp sql_str := 'ins ert into Temp sel ect distinct on (-- перечень полей -- fr om t left join c on t.id =c.uid --объединение нескольких таблиц с десятками тысяч строк-- where --перечень нескольких условий--; execute sql_str; --Заполнение таблицы t на основе temp sql_str := 'INS ERT IN TO public.t (--перечень полей--) sele ct --перечень полей-- from Temp; execute sql_str; --Обновление таблицы f на основе temp sql_str := 'UPDATE public.f SE T --перечень полей-- fr om Temp wh ere --перечень условий--; execute sql_str; return; END; $$ LANGUAGE plpgsql; ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 22:06 |
|
Временные таблицы в PgrSQL, оптимизация
|
|||
---|---|---|---|
#18+
NatM, 1)после заполнения временной таблицы надо её analyze сделать перед использованием 2)поднять temp_buffers/work_mem чтобы временные файлы не писались. 3)сделат руками запросы из хранимки через explain (analyze,costs,buffers,timing) и посмотреть где тормозит после чего приходить с конкретными планами и описанием проблем(ы). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 22:43 |
|
Временные таблицы в PgrSQL, оптимизация
|
|||
---|---|---|---|
#18+
Имелось в виду, как можно вообще уйти от использования временных таблиц и заменить их на что-то другое. Тормозят они не из-за кривого селекта в запросе, а из-за того что сам по себе, видимо, подход с временными таблицами не лучший, если данных много. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 23:27 |
|
Временные таблицы в PgrSQL, оптимизация
|
|||
---|---|---|---|
#18+
NatM Имелось в виду, как можно вообще уйти от использования временных таблиц и заменить их на что-то другое. Тормозят они не из-за кривого селекта в запросе, а из-за того что сам по себе, видимо, подход с временными таблицами не лучший, если данных много. Вот далеко не факт что проблема в временных таблицах... Без explain данных не узнать. А так через writable CTE это всё в 1 запрос пишется легко. (но сильно не факт что станет быстрее заметно). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2021, 23:34 |
|
Временные таблицы в PgrSQL, оптимизация
|
|||
---|---|---|---|
#18+
NatM Имелось в виду, как можно вообще уйти от использования временных таблиц и заменить их на что-то другое. Тормозят они не из-за кривого селекта в запросе, а из-за того что сам по себе, видимо, подход с временными таблицами не лучший, если данных много. не сказжу за постгрес но в мс-скл мне как раз нравплось разбивать мегасложные запросы на несколько использовая темп. табилцы подкрутьи было проще если что - да и ошибку найти и по времени посмотерть где тормозить возможно пробелма тут не в этом а то что запросы формируются динамически - и соответсвенно план м.б разным короче без кодов конкретных тормознутыз запросов - дальше гадать только ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2021, 16:08 |
|
|
start [/forum/search_topic.php?author=Garlendik&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
get settings: |
7ms |
get forum list: |
10ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 20239ms |
total: | 20403ms |
0 / 0 |