powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не могу получить план выполнения запроса
18 сообщений из 18, страница 1 из 1
не могу получить план выполнения запроса
    #39301426
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT version()
PostgreSQL 9.2.10 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit


SELECT reltuples FROM pg_class 
WHERE relname = 'reports_tripadvisor_auction_overview_daily2'

6.14957e+08



запрос:
Код: plsql
1.
 EXPLAIN select * from metasearch.reports_tripadvisor_auction_overview_daily2 WHERE id > 85637180 ORDER BY id ASC LIMIT 100



план
Код: plsql
1.
2.
3.
Limit  (cost=0.00..97.23 rows=100 width=306)
  ->  Index Scan using pk_reports_tripadvisor_auction_overview_daily2_id on reports_tripadvisor_auction_overview_daily2  (cost=0.00..548166308.21 rows=563782632 width=306)
        Index Cond: (id > 85637180)



увеличиваем параметр в 10 раз:
Код: plsql
1.
EXPLAIN select * from metasearch.reports_tripadvisor_auction_overview_daily2 WHERE id > 856371800 ORDER BY id ASC LIMIT 100



дождаться не могу (больше 15 мин)



Попробовал
Код: sql
1.
2.
ALTER TABLE metasearch.reports_tripadvisor_auction_overview_daily2  ALTER  COLUMN id SET STATISTICS 100;
analyze metasearch.reports_tripadvisor_auction_overview_daily2(id);



не помогло.

Кто виноват? И что делать?

Спасибо.
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39301459
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_,

В логах что-то есть, особенно на тему statistics collector?
И приведите не-умолчательные настройки базы.
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39301591
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_,

Странно очень.

1) Приведите explain (analyze, costs, buffers, timing) для:
select * from metasearch.reports_tripadvisor_auction_overview_daily2 WHERE id > 85637180 ORDER BY id ASC LIMIT 100

2)Недавно из таблицы много не удаляли (или не вставляли)?

3)autovacuum точно включен?

4)что дает
\x
select * from pg_stats where tablename='reports_tripadvisor_auction_overview_daily2' and attname='id';

5)что дает
\x
select * from pg_stat_user_tables where relname= 'reports_tripadvisor_auction_overview_daily2'


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39301633
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_,

можно еще проверить предположение Максима, сделав

Код: sql
1.
set enable_mergejoin = off;



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

хотя вру, невнимательно прочитал. врядли мой совет тут поможет раз всего одна таблица в запросе и min/max из индекса для построения плана все равно наверное будет читаться. не нашел правда в исходниках где именно это делается.
можно попробовать измерить скорость выполнения запроса

Код: sql
1.
select max(id) from metasearch.reports_tripadvisor_auction_overview_daily2



если он быстро отрабатывает то дело в чем-то другом.
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39301703
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexiusAlexius,

хотя вру, невнимательно прочитал. врядли мой совет тут поможет раз всего одна таблица в запросе и min/max из индекса для построения плана все равно наверное будет читаться. не нашел правда в исходниках где именно это делается.
можно попробовать измерить скорость выполнения запроса

Код: sql
1.
select max(id) from metasearch.reports_tripadvisor_auction_overview_daily2



если он быстро отрабатывает то дело в чем-то другом.

Вообще вероятность что min/max будут тормозить очень высокая.
Я бы рекомендовал бы после всего что я написал сделать vacuum verbose analyze на эту таблицу
и посмотреть что он умного написал.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39301892
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov, Maxim Boguk,Alexius,
спасибо!

Начну пользоваться советами с конца:

min - работает
max - не дождался.

Табличка InsertOnly - но не давно несколько COPY упало.
Очень вероятно, что autovacuum до нее еще не добрался.
Буду делать vacuum verbose analyze metasearch.reports_tripadvisor_auction_overview_daily2

после set enable_mergejoin = off;
дождаться плана не смог.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
explain (analyze, costs, buffers, timing) 
select * from metasearch.reports_tripadvisor_auction_overview_daily2 WHERE id > 85637180 ORDER BY id ASC LIMIT 100

Limit  (cost=0.00..99.28 rows=100 width=306) (actual time=100.700..122.985 rows=100 loops=1)
  Buffers: shared read=10
  ->  Index Scan using pk_reports_tripadvisor_auction_overview_daily2_id on reports_tripadvisor_auction_overview_daily2  (cost=0.00..576544686.80 rows=580727990 width=306) (actual time=100.696..122.965 rows=100 loops=1)
        Index Cond: (id > 85637180)
        Buffers: shared read=10
Total runtime: 123.062 ms



select * from pg_stats where tablename='reports_tripadvisor_auction_overview_daily2' and attname='id';

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
schemaname             | metasearch
tablename              | reports_tripadvisor_auction_overview_daily2
attname                | id
inherited              | f
null_frac              | 0
avg_width              | 4
n_distinct             | -1
most_common_vals       |
most_common_freqs      |
histogram_bounds       | {60014,7738879,15812113,23296015,31093423,40250929,4801
6461,55183598,62148706,103202520,110916130,117848757,124909647,131369750,1388142
34,146287519,154403211,162344426,169955559,210970236,219107062,227231304,2350901
51,247785897,255576036,262854790,269623142,296435933,302767868,311469210,3192921
28,326847719,334652257,341893349,348744849,355552439,362106057,375381723,3828630
23,390949870,398377787,406215160,414187978,421368361,429489136,436080415,4438561
50,451222612,458817065,465923570,473533959,481415635,489401193,497460888,5045770
08,512072063,520170110,527313240,535334652,542189058,550520738,558079456,5646871
41,572198949,579295570,587036416,595615839,603628429,611249395,619651058,6270286
91,635202540,642819427,651012509,658561701,667081294,674855691,682759757,6908874
29,699083265,706522809,714163058,721675347,729752510,737260897,745022418,7523820
89,759235219,766871114,773685967,780757213,787627285,795861741,803570705,8113019
94,818969769,826719431,834110109,841225180,848400884,856312235}
correlation            | 0.76847
most_common_elems      |
most_common_elem_freqs |
elem_count_histogram   |

select * from pg_stat_user_tables where relname= 'reports_tripadvisor_auction_overview_daily2'

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
relid             | 2306506341
schemaname        | metasearch
relname           | reports_tripadvisor_auction_overview_daily2
seq_scan          | 49
seq_tup_read      | 5282917
idx_scan          | 43
idx_tup_fetch     | 34144284
n_tup_ins         | 890625235
n_tup_upd         | 0
n_tup_del         | 34144160
n_tup_hot_upd     | 0
n_live_tup        | 614957141
n_dead_tup        | 35069569
last_vacuum       |
last_autovacuum   | 2016-08-23 05:15:24.906623+00
last_analyze      | 2016-08-31 14:30:10.234893+00
last_autoanalyze  | 2016-08-31 05:57:05.357382+00
vacuum_count      | 0
autovacuum_count  | 1
analyze_count     | 3
autoanalyze_count | 2
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39301918
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_vyegorov, Maxim Boguk,Alexius,
спасибо!

Начну пользоваться советами с конца:

min - работает
max - не дождался.

Табличка InsertOnly - но не давно несколько COPY упало.
Очень вероятно, что autovacuum до нее еще не добрался.
Буду делать vacuum verbose analyze metasearch.reports_tripadvisor_auction_overview_daily2


В общем после больших COPY в таблицу рекомендуется руками vacuum делать иначе на медленных (а у вас 100% тормозные диски) дисках будут проблемы с max (и поиском верхней границы данных в таблице).
Аналогично после большого delete - надо делать тоже vacuum сразу иначе будут проблемы с поиском нижней границы в таблице.


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39301953
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Спасибо!

Но можно подробней, почему не получается даже план получить?

Про "тормозные диски" как Вы это поняли? )
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302020
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_,

не очень похоже на insert only таблицу, судя по
Код: sql
1.
n_tup_del         | 34144160



какие-то строки удалились. может быть делался copy и во время выполнения его прервали? попробуйте в логах базы ошибки поискать.

explain тормозит из-за того, что планировщик хочет получить хорошую оценку числа строк и видимо в случае, когда указанный id за верхней границей histogram_bounds пытается взять максимальное значение для id из индекса (т.е. выполнить тот запрос select max(id)).

а он торомозит, потому что должен просканировать все строки с конца индекса, пока не найдет неудаленную. т.е. предполагается что удалялись записи с самыми большими id.
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302032
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexius,

спасибо.
да вы правы, я писал выше:

"Табличка InsertOnly - но недавно несколько COPY упало"

Про select max(id), есть сомнения. Это точно?


В гистограммах есть значения отличающие всего на 60 тыс., порядок же правильный.
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302106
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_,

Простите, а вы explain не можете дождаться или explain analyze? Ибо в первом сообщении просто explain, а потом уже explain analyze.
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302121
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Author the new one,

Делаю explain.

explain analyze попросил Maxim Boguk
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302271
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new oneGold_,

Простите, а вы explain не можете дождаться или explain analyze? Ибо в первом сообщении просто explain, а потом уже explain analyze.

Когда PG (планировщик) видит условие за пределами гистограммы статистики он на всякий случай пытается посмотреть реальный max/min значения по индексу.
А тут хрен знает сколько строк добавлено без данных о видимости и начинается пляска с перебором головы таблицы по индексу.
Это вариант как получить тормозное планирование не сделав analyze после batch load/batch delete.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302296
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Какая неприятная фича, тем более analyze я делал.

я про диски как Вам поняли? )
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302521
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Спасибо!
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302742
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После многочасового VACUUM ANALYZE - заработало.
Осадок остался.
...
Рейтинг: 0 / 0
не могу получить план выполнения запроса
    #39302789
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_После многочасового VACUUM ANALYZE - заработало.
Осадок остался.
это ахиллесова пята пж
что--то тут они придумывают, но крайне медленно


я как--то налетел на такое использование табличек 1С--ом: они впендюривали в транзакции и многократно пересчитывали 100500 записей (в большом УПП расчет себестоимостей, итеративный) -- и всё это не влезало в статистику, поскольку унутри не аналайзили. планы были ужас--ужас, евпочя. (тройной вложенный нестед--луп по этим вот 100500, на полсуток эдак на иттерацию ) пришлось срочно переписывать на юзание времянок с использованием каких то костылей от 1С , которые транслировались 1С--м в нечто с неявным вызовам АНАЛАЙЗ--а этих времянок. с вывалом в стационар только готового итога. обплевался
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / не могу получить план выполнения запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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