powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Зависит ли выбор плана от статистики по выполненным запросам?
25 сообщений из 31, страница 1 из 2
Зависит ли выбор плана от статистики по выполненным запросам?
    #35455872
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://sql.ru/forum/actualthread.aspx?tid=567191&pg=2#5990450

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

Действительно ли это так? Если да, то киньте пожалуйста ссылку. Имхо, кажется что нет, впервые такое слышу.

PS: Сделал отдельную тему, чтобы не оффтопить.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456051
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat http://sql.ru/forum/actualthread.aspx?tid=567191&pg=2#5990450

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

Действительно ли это так? Если да, то киньте пожалуйста ссылку. Имхо, кажется что нет, впервые такое слышу.

PS: Сделал отдельную тему, чтобы не оффтопить.

Если верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы. Это свинство выдается за мегадостижение.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456297
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Author the new oneЕсли верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы.вроде бы да, по доке - живут отдельно в сессии, могут меняться при изменении параметров (сессии) или статистики данных (общей?). но вопрос не про это. в доке написано, что планы зависят от параметров и статистики по распределению данных в таблицах, конечно от наличия индексов. но зависят ли они от того, какие ранее выполнялись в этой базе (или сессии) запросы?
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456323
Author the new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat Author the new oneЕсли верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы.вроде бы да, по доке - живут отдельно в сессии, могут меняться при изменении параметров (сессии) или статистики данных (общей?). но вопрос не про это. в доке написано, что планы зависят от параметров и статистики по распределению данных в таблицах, конечно от наличия индексов. но зависят ли они от того, какие ранее выполнялись в этой базе (или сессии) запросы?

Ну если сессия понаменяла данных, то, конечно, зависят. А вообще нет - если, конечно, авторы документации не врут. По крайней мере здравый смысл так подсказывает, да и ссылок на подобное в доках я не видел.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456443
iz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iz
Гость
LeXa NalBat Author the new oneЕсли верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы.вроде бы да, по доке - живут отдельно в сессии, могут меняться при изменении параметров (сессии) или статистики данных (общей?). но вопрос не про это. в доке написано, что планы зависят от параметров и статистики по распределению данных в таблицах, конечно от наличия индексов. но зависят ли они от того, какие ранее выполнялись в этой базе (или сессии) запросы?

Могут зависеть из-за того, что предыдущие запросы "подогревают" данные, которые ранее были "холодными". И в принципе PostgreSQL может поменять план, если знает, что бывшая ранее на диске таблица целиком поднята в разделяемую память (см., например, контриб pg_buffercache).
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456556
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izв принципе PostgreSQL может поменять план, если знает, что бывшая ранее на диске таблица целиком поднята в разделяемую память"в принципе может" или поступает так, то есть использует эту информацию при выборе плана запроса? (интересует, конечно, последняя версия - postgresql 8.3.)
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456565
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Версия 8.1 так и делает, версию 8.3 попробовал, на тестовых данных получилось такое же поведение, только планы запросов отличные от 8.1. В документации и списке изменений не нашел чтобы с этим фактом что-то делали. Сохранить статистику базы и загрузить в другую базу способа мне найти не удалось.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456590
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тут товарищ из NTT описывает странное чередование планов:
http://archives.postgresql.org/pgsql-hackers/2008-01/msg00150.php


Tom Lane предполагаетmaybe some effect associated with loading up the backend's internal caches?
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456594
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGВерсия 8.1 так и делает, версию 8.3 попробовал, на тестовых данных получилось такое же поведение... В документации и списке изменений не нашел чтобы с этим фактом что-то делали.Не получилось наблюдать изменение плана запроса в зависимости от кэширования, пытался "поймать" изменение на выборках по индексу, находящихся на границе между bitmapindexscan и seqscan в зависимости от значения параметра в интервальном условии field<$1. Тестировал на версии 8.1 (боевой сервер с большими незакэшированными данными). После кэширования (select count(*)) граница между bitmapindexscan и seqscan осталась на прежнем месте. :-(

Киньте пожалуйста тест или ссылку на упоминание этого факта (в документации или где-нибудь еще).
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456618
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Вы случаем не на одной таблице искали разницу? План выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику. Это заметно даже на несложных запросах подобных вот такому

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select foo.*, u.name as worker from
(
select id, phone_number, template_name, status, point_code, center_code, center_name, region,
point_town, point_address, point_is_priority,
(case when rejects_count= 0  then '' else rejects_count::text end) as rejects_count,
(to_timestamp(avalue(dates_array, status)::double precision) at time zone interval '04:00')::date as date_work,
(to_timestamp(avalue(dates_array, status)::double precision) at time zone interval '04:00')::time as time_work,
avalue(users_array, status)::int as worker_id
from offline.view_documents
where delete_date is NULL and (now() - save_date) < interval '3 months' and status not in ('Удален') 
and macroregion_id = '1' and true and true and true and region_id in ( 3 , 1 ) and true and true 
and extract(epoch from '2008-6-7'::timestamp)::int <= avalue(dates_array, status)::int
and extract(epoch from '2008-6-17'::timestamp + interval '1 day')::int > avalue(dates_array, status)::int 
and template_type_id = '1' and document_template_id = '8' and status = 'Выполнен' and exec_date is null
order by id desc limit  500 
) as foo inner join auth.users u on foo.worker_id=u.id order by id desc;

Здесь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE VIEW offline.view_documents AS 
 SELECT d.id, d.save_date, d.exec_date, d.delete_date, d.user_id, u.point_id, u.center_id, u.region_id,
 u.macroregion_id, d.document_template_id, d.phone_number, d.fields_array, d.users_array, d.dates_array, 
r.name AS region, m.name AS macroregion, p.code AS point_code, p.town AS point_town, 
p.address AS point_address, p.trademark AS point_trademark, p.phone AS point_phone, p.email AS point_email,
 p.is_priority AS point_is_priority, c.name AS center_name, c.code AS center_code, u.name AS user_name, 
tp.name AS template_name, tp.type_id AS template_type_id, tps.name AS template_type, 
tp.is_active AS template_is_active, a.value AS status, ( SELECT count(*) AS count
           FROM offline.attributes a
          WHERE a.value = 'Отклонен'::text AND a.document_id = d.id) AS rejects_count
   FROM offline.documents d
   JOIN auth.users u ON d.user_id = u.id
   JOIN auth.macroregions m ON u.macroregion_id = m.id
   JOIN auth.regions r ON u.region_id = r.id
   JOIN auth.points p ON u.point_id = p.id
   JOIN auth.centers c ON u.center_id = c.id
   JOIN offline.attributes a ON d.id = a.document_id AND a.is_last
   JOIN offline.document_templates tp ON d.document_template_id = tp.id
   JOIN offline.document_template_types tps ON tp.type_id = tps.id;

Разумеется, запрос создан программно и выполняется в течении дня в тысячах комбинаций параметров ("and true" в условиях означает, что в этом месте фильтр не подставлен, со всеми фильтрами запрос получится длиннее). '04:00' это часовой пояс пользователя, выполняющего запрос, тоже принимает разные значения в зависимости от местонахождения пользователя.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select count(*) from offline.documents;
 219621 
select count(*) from auth.users;
 2048 
select count(*) from auth.macroregions;
 3 
select count(*) from auth.regions;
 37 
select count(*) from auth.points;
 1154 
select count(*) from auth.centers;
 303 
select count(*) from offline.attributes;
 1232975 
select count(*) from offline.document_templates;
 88 
select count(*) from offline.document_template_types;
 7 

В запросах, зависящих от этого запроса все еще веселее. Кстати, база небольшая и занимает место на диске всего лишь в 2,5 раза больше доступной ОЗУ. В случае, когда ОЗУ< 10% от размера базы планировщик на сложных запросах вообще временами вытворяет нечто странное - выполнив запрос, признает план выполнения настолько плохим, что кардинально меняет его и снова признает отвратительным и снова бросается в очередную крайность...

Что касается ссылок на документацию - см. работу сборщика статистики и механизм использования собранной статистики планировщиком. Если честно, серьезно я в этом так и не разобрался - детальной документации на механизм работы нет, а в исходники лезть не захотелось, ограничился тестами над несколькими своими базами данных. Замечу еще о найденном гистерезисе - поменяв настройки в конфиге и поработав с ними мы можем вернуться к старым настройкам и получить _иные_ планы выполнения запросов. В итоге приходим к тому, что необходимо сделать бэкап, удалить кластер, создать с новыми настройками, запустить и залить бэкап. Имхо, это как раз та проблема, из-за которой новички (и не только) не могут настроить нормально свои базы - после множества изменений в конфиге (и перезапусков кластера) сборщик статистики накапливает такой мусор, от которого уже не может избавиться и такая база никогда не сможет работать нормально. Если же залить бэкап на заново созданную базу с выставленными настройками, планировщик работает намного стабильнее и эффективнее.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456638
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGВы случаем не на одной таблице искали разницу?Тестировал на одной таблице. Но идея, озвученная iz, "предыдущие запросы "подогревают" данные, которые ранее были "холодными". И в принципе PostgreSQL может поменять план, если знает, что бывшая ранее на диске таблица целиком поднята в разделяемую память", по-моему применима и для выборки из одной таблицы. Например при выборе между планами indexscan, bitmapindexscan и seqscan, что я и попытался безуспешно обнаружить.

MBGПлан выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику.Что такое аналитическое построение плана и эмпирическое?

MBGЧто касается ссылок на документацию - см. работу сборщика статистики и механизм использования собранной статистики планировщиком. Если честно, серьезно я в этом так и не разобрался - детальной документации на механизм работы нет, а в исходники лезть не захотелось, ограничился тестами над несколькими своими базами данных.Мне тоже в исходники заглядывать не хочется. Поэтому и хотелось бы ссылку на информацию о данном факте или тест, демонстрирующий его.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35456720
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGгистерезисе - поменяв настройки в конфиге и поработав с ними мы можем вернуться к старым настройкам и получить _иные_ планы выполнения запросов. В итоге приходим к тому, что необходимо сделать бэкап, удалить кластер, создать с новыми настройками, запустить и залить бэкап.
я это тоже наблюдал, только мои проблемы ушли после рестарта постгреса.

MBGПлан выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику.
А как определить, какой именно алгоритм был использован для построения плана запроса?
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457096
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
tadmin MBGгистерезисе - поменяв настройки в конфиге и поработав с ними мы можем вернуться к старым настройкам и получить _иные_ планы выполнения запросов. В итоге приходим к тому, что необходимо сделать бэкап, удалить кластер, создать с новыми настройками, запустить и залить бэкап.
я это тоже наблюдал, только мои проблемы ушли после рестарта постгреса.

У меня получалось так, что если несколько раз всерьез менять настройки, то после рестарта со включенной опцией обнуления статистики все равно планировщик работает некорректно и пересоздание кластера решает этот вопрос.

MBGПлан выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику.
А как определить, какой именно алгоритм был использован для построения плана запроса?[/quot]

Я определяю по тому, что при выполнении с разными параметрами или при разно нагрузке сервера план запроса меняется или остается постоянным. Если план выполнения стабилен, значит, аналитика, иначе - эмпирика.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457162
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
LeXa NalBat
MBGЧто касается ссылок на документацию - см. работу сборщика статистики и механизм использования собранной статистики планировщиком. Если честно, серьезно я в этом так и не разобрался - детальной документации на механизм работы нет, а в исходники лезть не захотелось, ограничился тестами над несколькими своими базами данных.Мне тоже в исходники заглядывать не хочется. Поэтому и хотелось бы ссылку на информацию о данном факте или тест, демонстрирующий его.

Понимаю, вы хотите ссылку на документацию, но еще раз повторю - не нашел четкого описания таких вещей. Ну нигде не написано, что в движке есть принципиально неустранимые проблемы и вы можете столкнуться с чем угодно при разработке сложной системы. Это проблемы довольно общего характера и касаются не кодирования а теории устойчивости. Какие-то проблемы отражены в форумах, за те лет пять, что работаю с постгресом, на многое натыкался. На испанском языке несколько проблем подобного плана озвучено, на русском по постгресу даже смотреть нечего, в рассылке разработчиков (на английском) тоже много проблем всплывает, полагаю, если вы всерьез работаете с постгресом, то уж рассылку отслеживаете регулярно.
Пример запроса, на котором я отловил проблему, см. выше, саму базу выложить не могу. И проблема с этим запросом совсем не в кэшировании таблиц, это-то как раз решается - например, по крону с помощью dd несложно поднять нужные таблицы/индексы в кэш. Проблема в том, что при пересечении множества таблиц постгрес пытается построить план выполнения, комбинируя порядок объединения таблиц. Это теоретически неразрешимая задача, ибо количество комбинаций растет как факториал. При объединении более чем 5-7 таблиц путь только один - брать таблицы в том порядке, как они заданы в запросе. Чтобы полностью полагаться на сборщик статистики, необходимо принципиально обеспечить отрицательную обратную связь, в то время как сейчас она периодически сменяется положительной обратной связью и начинается блуждание (см. адаптивный поиск) в работе планировщика. То есть понятно, что реализация неустойчива, можно написать тесты, которые это показывают на конкретных данных, я делал тесты на своих данных в трех проектах, везде одно и то же - при объединении многих таблиц работа планировщика неустойчика, но переписав запрос определенным способом (находится эмпирически) можно добиться сходимости к приемлимому плану запроса.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457254
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGпостгрес пытается построить план выполнения, комбинируя порядок объединения таблиц. Это теоретически неразрешимая задача, ибо количество комбинаций растет как факториал.
10! ~3.5E6
Мне кажется, что для алгоритма и данных, которые помещаются в CPU L1 это не проблема.
У вас не получалось отдалить включение эвристики увеличением geqo_treshold ?

MBGПри объединении более чем 5-7 таблиц путь только один - брать таблицы в том порядке, как они заданы в запросе.
У меня была явная зависимость плана от порядка перечисления таблиц (если их много).
К сожалению, нет возможности влиять не это напрямую.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457363
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGПонимаю, вы хотите ссылку на документацию, но еще раз повторю - не нашел четкого описания таких вещей. Ну нигде не написано, что в движке есть принципиально неустранимые проблемы...влияние на выбор плана а) статистики предыдущих запросов или б) знания о поднятии табличных данных в кэш - это должно позиционироваться как фича, а не "неустранимая проблема", и следовательно должно быть упоминание об этом (например в документации).

MBGПроблема в том, что при пересечении множества таблиц постгрес пытается построить план выполнения, комбинируя порядок объединения таблиц. Это теоретически неразрешимая задача, ибо количество комбинаций растет как факториал.offtopic. это решается с помощью 14.3. Controlling the Planner with Explicit JOIN Clauses.

MBGПри объединении более чем 5-7 таблиц путь только один - брать таблицы в том порядке, как они заданы в запросе.offtopic. предлагаю другой путь - для каждой таблицы оценить кол-во строк удовлетворяющих ограничениям (кроме джоинов), и начинать с самого меньшего джоинить по HashJoin или NestedLoop. сложность O(n).
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457373
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Отдалить включение эвристики можно, но не намного. Когда-то я немало времени потратил, разбираясь с тем, как это сделать, а когда число таблиц в запросе перевалило за десяток, обнаружил, что контролировать построение плана я в принципе не могу. Создание цепочки временных видов и таблиц ситуацию значительно улучшают, но при переносе данных в эскулайт те же самые запросы работают в разы быстрее - и это притом, что запросы написаны именно для постгреса... То есть оказалось, что для систем аналитики проще сменить СУБД, чем так мучаться. Мне не требуется какая-то неестественная логика планировщика, достаточно, если он будет полностью контролируем, так, что план выполнения строго детерминирован самим запросом.

Сейчас еще одна проблема появилась - пострес требует администрирования при серьезном изменении объемов данных, железа и т.п. А с каждым годом на одного администратора приходится все больше серверов. Пока я занимался настройкой постгреса на одном рабочем и одном тестовом сервере для одного проекта, еще ничего, но когда проектов стало три... В общем, уже просто времени нет на настройку постгреса. Со встраиваемой базой есть тот плюс, что все определяется на этапе разработки, установленная система практически не требует сопровождения (даже бэкап можно делать просто скопировав файлы баз данных).

Была мысль сделать форк постгреса, выбросив значительную часть унаследованного кода, и сделав строго детерминированный планировщик, но многоядерные процессоры (осенью интел обещает 8-ми ядерники) и дешевые SATA-диски огромного объема (через 2 года тошиба обещает 5-гиг диски) привели к мысли, что блокировочник ныне оптимальный вариант, а версионник уже не нужен (эпоха версионников - это было время работы пользователей в консоли, когда запросы вводились и выполнялись медленно, а сейчас запросы генерируются автоматически, заранее предсказуемы и могут быть выполнены очень быстро или хотя бы разделены на серию быстро выполняемых запросов, также использую создание реплики основной базы для работы каждого пользователя). Да и версионные файловые системы в линуксе со временем станут стабильнее и будут годны для использования на продакшен-серверах.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457387
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG ... и дешевые SATA-диски огромного объема (через 2 года тошиба обещает 5-гиг диски) ...

Запутался. Щас какой год?
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457547
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
LeXa NalBat MBGПонимаю, вы хотите ссылку на документацию, но еще раз повторю - не нашел четкого описания таких вещей. Ну нигде не написано, что в движке есть принципиально неустранимые проблемы...влияние на выбор плана а) статистики предыдущих запросов или б) знания о поднятии табличных данных в кэш - это должно позиционироваться как фича, а не "неустранимая проблема", и следовательно должно быть упоминание об этом (например в документации).


Вот о сборе статистики (командой analyze):

http://www.postgresql.org/docs/8.1/static/runtime-config-query.html

http://www.postgresql.org/docs/8.1/static/planner-stats.html

Указано, что "на лету" статистика не обновляется - "For efficiency reasons, reltuples and relpages are not updated on-the-fly, and so they usually contain somewhat out-of-date values.", возможно, это конфликтует с тем, что данные по использованию shared_buffers доступны в реальном времени - то есть сборщик статистики утверждает, что данное значение в таблице встречается очень часто, при этом таблица частично в shared_buffers и выбирается полный перебор, а на деле выясняется, что несколько минут назад таблица была обновлена и искомые значения очень редки, так что полный перебор явная ошибка и нужен был индексный поиск (хотя индексы, возможно, пришлось бы еще с диска поднять).

Вот параметр, отвечающий за размер общего кэша - shared_buffers. Постгрес отслеживает, какие именно данные сейчас в кэше и соответственно меняет план запроса. А еще старается оценить кэширование операционной системой - effective_cache_size. Как именно управление ресурсами в этом самом shared_buffers происходит тоже где-то было описано, хотя и не очень подробно. Текущее состояние буфера влияет на работу директив enable_* для каждой из таблиц - если таблица в кэше, одно поведение, а если в кэше индексы - другое.

Вообще-то все это и есть достижение и при десятке-другом уникальных запросов к базе ведет себя как полагается. При миллионах же _разных_ запросов ситуация меняется и явно это не было предусмотрено в 80-х годах при создании постгреса.

Что касается "14.3. Controlling the Planner with Explicit JOIN Clauses." - дело в том, что при этом скорость выполнения запроса ниже! Тот план, что является оптимальным, аналитически выполняется медленнее. Я так думаю, что дело в вытеснении данных из буфера - навязывая план выполнения, мы приводим постгрес к необходимости поднять с диска данные и записать в кэш. Если же постгрес сам выбирает план запроса, он минимизирует изменение кэша. Повторно запрос выполняется быстро, но при десятках транзакций в секунду (больше при т аком подходе не получается выжать) постоянная перегенерация кэша просаживает производительность очень сильно (при том, что при автоматическом выборе плана постгрес и несколько сотен транзакций в секунду может вытянуть). Явно не хватает возможности выполнить запрос с указанным планом без внесения изменений в кэш, иначе получается неоправданно затратное выполнение запроса.

LeXa NalBatofftopic. предлагаю другой путь - для каждой таблицы оценить кол-во строк удовлетворяющих ограничениям (кроме джоинов), и начинать с самого меньшего джоинить по HashJoin или NestedLoop. сложность O(n).
Вы предлагаете реализовать планировщик запросов на уровне приложения? И это при том, что запрос
"select count(*) from ... where ..." работает очень медленно? А explain возвращает недостоверные данные -опять же пресловутое "For efficiency reasons, reltuples and relpages are not updated on-the-fly, and so they usually contain somewhat out-of-date values." (ошибается сильно, даже сразу после запуска analyze). Плюс к этому остается неопределенность в том, будет ли постгрес искать по индексу или поднимать саму таблицу. Ага, и этим тоже можно попробовать вручную управлять, но тогда в sql-базе данных нет никакого смысла - проще и эффективнее в tokyocabinet или berkeleydb данные хранить. Хоть что-то планировщик должен делать, иначе зачем он?
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457551
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
APM MBG ... и дешевые SATA-диски огромного объема (через 2 года тошиба обещает 5-гиг диски) ...

Запутался. Щас какой год?

Разумеется, 5 Тб :-)
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457702
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGданные по использованию shared_buffers доступны в реальном временида, доступны, судя по наличию contrib/pg_buffercache. но не используются планировщиком.

MBGсборщик статистики утверждает, что данное значение в таблице встречается очень часто, при этом таблица частично в shared_buffers и выбирается полный переборинфорация о том, что данная таблица честично в shared_biffers, не используется планировщиком.

MBGПостгрес отслеживает, какие именно данные сейчас в кэше и соответственно меняет план запроса.нет, эта информация не используется планировщиком.

MBGТекущее состояние буфера влияет на работу директив enable_*нет, не влияет. директивы enable_* по возможности влияют на выбор плана.

MBGдля каждой из таблиц - если таблица в кэше, одно поведение, а если в кэше индексы - другое.нет, эта информация не используется планировщиком.

MBGТот план, что является оптимальным, аналитически выполняется медленнее.определение: оптимальный план - самый быстрый. он не может выполняться медленнее, значит просто вы выбрали неоптимальный план - неправильную последовательность explicit joins.

MBGЕсли же постгрес сам выбирает план запроса, он минимизирует изменение кэша.нет. при выборе плана постгрес не обращает внимания на содержимое кэша.

MBG LeXa NalBatofftopic. предлагаю другой путь - для каждой таблицы оценить кол-во строк удовлетворяющих ограничениям (кроме джоинов), и начинать с самого меньшего джоинить по HashJoin или NestedLoop. сложность O(n).Вы предлагаете реализовать планировщик запросов на уровне приложения?нет, я предположил, что и при большом кол-ве таблиц можно использовать оценочные алгоритмы в планировщике. кроме упомянутого вами простейшего варианта: "путь только один - брать таблицы в том порядке, как они заданы в запросе".

MBG"For efficiency reasons, reltuples and relpages are not updated on-the-fly, and so they usually contain somewhat out-of-date values." (ошибается сильно, даже сразу после запуска analyze).однако, сразу после запуска ANALYZE эти значения должны соответствовать действительности.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457800
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
LeXa NalBat...

В таком случае расскажите нам, как измеряется стоимость I/O при планировании запроса. А также почему при намного более низкой стоимости чтения из кэша и используемой методике определения кэшированных данных стоимость I/O по вашему мнению не меняется.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457821
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
LeXa NalBat
MBG"For efficiency reasons, reltuples and relpages are not updated on-the-fly, and so they usually contain somewhat out-of-date values." (ошибается сильно, даже сразу после запуска analyze).однако, сразу после запуска ANALYZE эти значения должны соответствовать действительности.

Должны соответствовать не только сразу после запуска, но и после любого количества запросов на чтение. Однако на практике explain после запросов чтения начинает ошибаться в количестве записей в таблице. Возможно, это есть следствие проблемы с проматыванием счетчика транзакций даже для читающих транзакций, но проблема тем не менее есть.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35457960
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGВ таком случае расскажите нам, как измеряется стоимость I/O при планировании запроса.оценивается. без учета информации о наличии данных той или иной таблицы в кэше.

MBGА также почему при намного более низкой стоимости чтения из кэша и используемой методике определения кэшированных данных стоимость I/O по вашему мнению не меняется.потому что "методика определения кэшированных данных" в планировщике не используется.
...
Рейтинг: 0 / 0
Зависит ли выбор плана от статистики по выполненным запросам?
    #35458074
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Считаете, что параметр effective_cache_size это обман и на самом деле планировщик не использует эту информацию? А также информацию о стоимости ввода/вывода для диска и ОЗУ... По документации, shared_biffers к планировщику отношения не имеет, но то, что я поднимаю таблицу с помощью dd в кэш ОС помогает не везде и не всегда и по симптомам похоже на то, что все-таки оценивается наличие данных в shared_biffers и при планировании запроса предусматривается выборка в первую очередь из него. При чекпойнтах выполняется сохранение данных из shared_biffers, значит, хранимые в этом буфере данные просто отсутствуют на диске и планировщик должен знать, какие данные откуда взять, чтобы не напороться на их некорректную версию или вообще отсутствие нужных данных. Как в этом ракурсе вы оцениваете заявление о независимости планировщика от shared_biffers? Явно зависит, а кот как именно реализован алгоритм, можно найти только в коде. Кстати, LRU алгоритм был модифицирован и не раз с версии 7.4, а в документации обновления соответствующих разделов я не заметил. Так что есть большие сомнения, насколько документация соответствует последним версиям постгреса в плане описания работы планировщика (хотя описанием это сложно назвать, скорее, упоминание).
Если верить документации, то и explain работает абсолютно точно, пока нет модификации данных, при этом почему-то никто не сообщает в этом контексте, что модификация данных имеет быть при запуске читающих транзакций (опосредованно, через версионный механизм - модификация не содержимого, а номера актуальной версии этого содержимого). Существующие проблемы я перечислил выше, не все, конечно, но многие. Ссылку вам на описание аналогичной ситуации привели, причем там неоднозначность возникает на стандартном наборе тестов. Вы же реагируете в точности как разработчики постгреса - "я этого не понимаю и не нашел в документации, значит, проигнорирую". Вы ищите проблемы и несоответствия в документации или на реальной системе? Попробуйте потестировать и увидите сами, что документация далеко не так хорошо соответствует действительности.
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Зависит ли выбор плана от статистики по выполненным запросам?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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