powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужна помощь с оптимизацией запроса
7 сообщений из 32, страница 2 из 2
Нужна помощь с оптимизацией запроса
    #35713662
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey NaydenЯ уже дропнул индекс и закрыл консоль до завтра. Завтра днем сделаю снова и кину сюда.
Спасибо :-) До завтра
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией запроса
    #35713663
Alexey Nayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_FalconAlexey NaydenЯ уже дропнул индекс и закрыл консоль до завтра. Завтра днем сделаю снова и кину сюда.
Спасибо :-) До завтраВсе-таки решил сделать сегодня :) Вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
HashAggregate  (cost= 400143 . 50 .. 400378 . 94  rows= 11772  width= 41 ) (actual time= 94838 . 546 .. 94838 . 627  rows= 25  loops= 1 )
   ->  Merge Join  (cost= 1149 . 28 .. 395709 . 48  rows= 221701  width= 41 ) (actual time= 19775 . 373 .. 94576 . 975  rows= 91182  loops= 1 )
         Merge Cond: (pl.id = pg.platform_id)
         ->  Index Scan using platforms_pkey on platforms pl  (cost= 0 . 00 .. 177006 . 65  rows= 11772  width= 31 ) (actual time= 426 . 644 .. 2751 . 449  rows= 412  loops= 1 )
               Filter: ((getting_seo_status_id <>  123 ) AND (platform_id_to_getting_seo_status_id(id) <>  123 ))
         ->  Index Scan using index_pages_on_platform_id on pages pg  (cost= 0 . 00 .. 185821 . 62  rows= 12344139  width= 14 ) (actual time= 0 . 157 .. 71318 . 518  rows= 12343907  loops= 1 )
 Total runtime:  94838 . 838  ms
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией запроса
    #35713666
Alexey Nayden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_FalconКак-то резко он в количестве строк ошибается. VACUUM ANALYZE platforms делали? можно попробовать просто ANALYZE platforms, чтобы не ждать VACUUM .
После VACUUM ANALYZE platforms, ANALYZE pages:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
HashAggregate  (cost= 234904 . 75 .. 235141 . 37  rows= 11831  width= 41 ) (actual time= 106029 . 178 .. 106029 . 268  rows= 24  loops= 1 )
   ->  Merge Join  (cost= 1149 . 36 .. 230448 . 13  rows= 222831  width= 41 ) (actual time= 22847 . 965 .. 105762 . 867  rows= 91491  loops= 1 )
         Merge Cond: (pl.id = pg.platform_id)
         ->  Index Scan using platforms_pkey on platforms pl  (cost= 0 . 00 .. 11504 . 01  rows= 11831  width= 31 ) (actual time= 117 . 945 .. 2925 . 312  rows= 411  loops= 1 )
               Filter: (getting_seo_status_id <>  123 )
         ->  Index Scan using index_pages_on_platform_id on pages pg  (cost= 0 . 00 .. 185837 . 82  rows= 12345215  width= 14 ) (actual time= 0 . 239 .. 82194 . 300  rows= 12344233  loops= 1 )
 Total runtime:  106029 . 433  ms

...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией запроса
    #35713677
eddie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плаировщик ошибается в 30 раз с оценкой сканирования по platforms, в этом судя по всему одна из причин выбора неоптимального плана.
вторая причина, как мне кажется, неоптимальные настройки. стоит попробовать повысить cpu_tuple_cost и/или seq_page_cost/random_page_cost.
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией запроса
    #35713752
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Nayden
Код: plaintext
1.
2.
         ->  Index Scan using platforms_pkey on platforms pl  (cost= 0 . 00 .. 177006 . 65  rows= 11772  width= 31 ) (actual time= 426 . 644 .. 2751 . 449  rows= 412  loops= 1 )
               Filter: ((getting_seo_status_id <>  123 ) AND (platform_id_to_getting_seo_status_id(id) <>  123 ))
         ->  Index Scan using index_pages_on_platform_id on pages pg  (cost= 0 . 00 .. 185821 . 62  rows= 12344139  width= 14 ) (actual time= 0 . 157 .. 71318 . 518  rows= 12343907  loops= 1 )
Получается, плюёт он на наш индекс с высокой колокольни. Вероятно, он раскрыл нашу функцию.
А что, если функцию объявить как plpgsql:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create function platform_id_to_getting_seo_status_id( plat_id int4 ) returns int4
language plpgsql as $$
declare
  res int4
begin
  res:= select getting_seo_status_id from platforms where id = plat_id;
  return res;
end;
$$
IMMUTABLE; 
А кроме того, попробуй построить частичный индекс на platform:
Код: plaintext
1.
2.
create index platforms_ix_status_not_123 on platforms 
( id, getting_seo_status_id ) 
where getting_seo_status_id <>  123 
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией запроса
    #35713990
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eddie.... неоптимальные настройки. стоит попробовать повысить cpu_tuple_cost и/или seq_page_cost/random_page_cost.

Найстройки стоит сбросить, по моему мнению, "по умолчанию"
При поиске "на неравество" оптимизатор подрузумевает большое количество данных (в старых версиях было так). А реально по данным это не так. Любопытно взгянуть на план после совета



eddieА кроме того, попробуй построить частичный индекс на platform:
Код: plaintext
1.
2.
create index platforms_ix_status_not_123 on platforms 
( id, getting_seo_status_id ) 
where getting_seo_status_id <>  123 
...
Рейтинг: 0 / 0
Нужна помощь с оптимизацией запроса
    #35714051
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
соберите самую подробную статистику по таблицам, потом покажите explain analyze

set default_statistics_target to 1000;
analyze platforms;
analyze pages;
explain analyze select ...
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Нужна помощь с оптимизацией запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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