Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
http://sql.ru/forum/actualthread.aspx?tid=567191&pg=2#5990450 MBGПланировщик постгреса так устроен, что подстраивается во время работы, то есть если у вас на системе выполнено много одинаковых запросов план будет отличаться от плана первого выполнения запроса. Действительно ли это так? Если да, то киньте пожалуйста ссылку. Имхо, кажется что нет, впервые такое слышу. PS: Сделал отдельную тему, чтобы не оффтопить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 16:17 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat http://sql.ru/forum/actualthread.aspx?tid=567191&pg=2#5990450 MBGПланировщик постгреса так устроен, что подстраивается во время работы, то есть если у вас на системе выполнено много одинаковых запросов план будет отличаться от плана первого выполнения запроса. Действительно ли это так? Если да, то киньте пожалуйста ссылку. Имхо, кажется что нет, впервые такое слышу. PS: Сделал отдельную тему, чтобы не оффтопить. Если верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы. Это свинство выдается за мегадостижение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 17:02 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
Author the new oneЕсли верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы.вроде бы да, по доке - живут отдельно в сессии, могут меняться при изменении параметров (сессии) или статистики данных (общей?). но вопрос не про это. в доке написано, что планы зависят от параметров и статистики по распределению данных в таблицах, конечно от наличия индексов. но зависят ли они от того, какие ранее выполнялись в этой базе (или сессии) запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 18:31 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Author the new oneЕсли верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы.вроде бы да, по доке - живут отдельно в сессии, могут меняться при изменении параметров (сессии) или статистики данных (общей?). но вопрос не про это. в доке написано, что планы зависят от параметров и статистики по распределению данных в таблицах, конечно от наличия индексов. но зависят ли они от того, какие ранее выполнялись в этой базе (или сессии) запросы? Ну если сессия понаменяла данных, то, конечно, зависят. А вообще нет - если, конечно, авторы документации не врут. По крайней мере здравый смысл так подсказывает, да и ссылок на подобное в доках я не видел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 18:52 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Author the new oneЕсли верить доке, планы живут для каждой сессии отдельно, и таки да, могут меняться в процессе работы.вроде бы да, по доке - живут отдельно в сессии, могут меняться при изменении параметров (сессии) или статистики данных (общей?). но вопрос не про это. в доке написано, что планы зависят от параметров и статистики по распределению данных в таблицах, конечно от наличия индексов. но зависят ли они от того, какие ранее выполнялись в этой базе (или сессии) запросы? Могут зависеть из-за того, что предыдущие запросы "подогревают" данные, которые ранее были "холодными". И в принципе PostgreSQL может поменять план, если знает, что бывшая ранее на диске таблица целиком поднята в разделяемую память (см., например, контриб pg_buffercache). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 20:34 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
izв принципе PostgreSQL может поменять план, если знает, что бывшая ранее на диске таблица целиком поднята в разделяемую память"в принципе может" или поступает так, то есть использует эту информацию при выборе плана запроса? (интересует, конечно, последняя версия - postgresql 8.3.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 22:42 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
Версия 8.1 так и делает, версию 8.3 попробовал, на тестовых данных получилось такое же поведение, только планы запросов отличные от 8.1. В документации и списке изменений не нашел чтобы с этим фактом что-то делали. Сохранить статистику базы и загрузить в другую базу способа мне найти не удалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 22:52 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
вот тут товарищ из 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 23:35 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
MBGВерсия 8.1 так и делает, версию 8.3 попробовал, на тестовых данных получилось такое же поведение... В документации и списке изменений не нашел чтобы с этим фактом что-то делали.Не получилось наблюдать изменение плана запроса в зависимости от кэширования, пытался "поймать" изменение на выборках по индексу, находящихся на границе между bitmapindexscan и seqscan в зависимости от значения параметра в интервальном условии field<$1. Тестировал на версии 8.1 (боевой сервер с большими незакэшированными данными). После кэширования (select count(*)) граница между bitmapindexscan и seqscan осталась на прежнем месте. :-( Киньте пожалуйста тест или ссылку на упоминание этого факта (в документации или где-нибудь еще). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 23:41 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
Вы случаем не на одной таблице искали разницу? План выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику. Это заметно даже на несложных запросах подобных вот такому Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Здесь Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Разумеется, запрос создан программно и выполняется в течении дня в тысячах комбинаций параметров ("and true" в условиях означает, что в этом месте фильтр не подставлен, со всеми фильтрами запрос получится длиннее). '04:00' это часовой пояс пользователя, выполняющего запрос, тоже принимает разные значения в зависимости от местонахождения пользователя. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В запросах, зависящих от этого запроса все еще веселее. Кстати, база небольшая и занимает место на диске всего лишь в 2,5 раза больше доступной ОЗУ. В случае, когда ОЗУ< 10% от размера базы планировщик на сложных запросах вообще временами вытворяет нечто странное - выполнив запрос, признает план выполнения настолько плохим, что кардинально меняет его и снова признает отвратительным и снова бросается в очередную крайность... Что касается ссылок на документацию - см. работу сборщика статистики и механизм использования собранной статистики планировщиком. Если честно, серьезно я в этом так и не разобрался - детальной документации на механизм работы нет, а в исходники лезть не захотелось, ограничился тестами над несколькими своими базами данных. Замечу еще о найденном гистерезисе - поменяв настройки в конфиге и поработав с ними мы можем вернуться к старым настройкам и получить _иные_ планы выполнения запросов. В итоге приходим к тому, что необходимо сделать бэкап, удалить кластер, создать с новыми настройками, запустить и залить бэкап. Имхо, это как раз та проблема, из-за которой новички (и не только) не могут настроить нормально свои базы - после множества изменений в конфиге (и перезапусков кластера) сборщик статистики накапливает такой мусор, от которого уже не может избавиться и такая база никогда не сможет работать нормально. Если же залить бэкап на заново созданную базу с выставленными настройками, планировщик работает намного стабильнее и эффективнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 00:33 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
MBGВы случаем не на одной таблице искали разницу?Тестировал на одной таблице. Но идея, озвученная iz, "предыдущие запросы "подогревают" данные, которые ранее были "холодными". И в принципе PostgreSQL может поменять план, если знает, что бывшая ранее на диске таблица целиком поднята в разделяемую память", по-моему применима и для выборки из одной таблицы. Например при выборе между планами indexscan, bitmapindexscan и seqscan, что я и попытался безуспешно обнаружить. MBGПлан выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику.Что такое аналитическое построение плана и эмпирическое? MBGЧто касается ссылок на документацию - см. работу сборщика статистики и механизм использования собранной статистики планировщиком. Если честно, серьезно я в этом так и не разобрался - детальной документации на механизм работы нет, а в исходники лезть не захотелось, ограничился тестами над несколькими своими базами данных.Мне тоже в исходники заглядывать не хочется. Поэтому и хотелось бы ссылку на информацию о данном факте или тест, демонстрирующий его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 01:13 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
MBGгистерезисе - поменяв настройки в конфиге и поработав с ними мы можем вернуться к старым настройкам и получить _иные_ планы выполнения запросов. В итоге приходим к тому, что необходимо сделать бэкап, удалить кластер, создать с новыми настройками, запустить и залить бэкап. я это тоже наблюдал, только мои проблемы ушли после рестарта постгреса. MBGПлан выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику. А как определить, какой именно алгоритм был использован для построения плана запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 07:43 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
tadmin MBGгистерезисе - поменяв настройки в конфиге и поработав с ними мы можем вернуться к старым настройкам и получить _иные_ планы выполнения запросов. В итоге приходим к тому, что необходимо сделать бэкап, удалить кластер, создать с новыми настройками, запустить и залить бэкап. я это тоже наблюдал, только мои проблемы ушли после рестарта постгреса. У меня получалось так, что если несколько раз всерьез менять настройки, то после рестарта со включенной опцией обнуления статистики все равно планировщик работает некорректно и пересоздание кластера решает этот вопрос. MBGПлан выполнения меняется только в том случае, когда постгрес вместо аналитического построения плана выбирает эмпирику. А как определить, какой именно алгоритм был использован для построения плана запроса?[/quot] Я определяю по тому, что при выполнении с разными параметрами или при разно нагрузке сервера план запроса меняется или остается постоянным. Если план выполнения стабилен, значит, аналитика, иначе - эмпирика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 10:43 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat MBGЧто касается ссылок на документацию - см. работу сборщика статистики и механизм использования собранной статистики планировщиком. Если честно, серьезно я в этом так и не разобрался - детальной документации на механизм работы нет, а в исходники лезть не захотелось, ограничился тестами над несколькими своими базами данных.Мне тоже в исходники заглядывать не хочется. Поэтому и хотелось бы ссылку на информацию о данном факте или тест, демонстрирующий его. Понимаю, вы хотите ссылку на документацию, но еще раз повторю - не нашел четкого описания таких вещей. Ну нигде не написано, что в движке есть принципиально неустранимые проблемы и вы можете столкнуться с чем угодно при разработке сложной системы. Это проблемы довольно общего характера и касаются не кодирования а теории устойчивости. Какие-то проблемы отражены в форумах, за те лет пять, что работаю с постгресом, на многое натыкался. На испанском языке несколько проблем подобного плана озвучено, на русском по постгресу даже смотреть нечего, в рассылке разработчиков (на английском) тоже много проблем всплывает, полагаю, если вы всерьез работаете с постгресом, то уж рассылку отслеживаете регулярно. Пример запроса, на котором я отловил проблему, см. выше, саму базу выложить не могу. И проблема с этим запросом совсем не в кэшировании таблиц, это-то как раз решается - например, по крону с помощью dd несложно поднять нужные таблицы/индексы в кэш. Проблема в том, что при пересечении множества таблиц постгрес пытается построить план выполнения, комбинируя порядок объединения таблиц. Это теоретически неразрешимая задача, ибо количество комбинаций растет как факториал. При объединении более чем 5-7 таблиц путь только один - брать таблицы в том порядке, как они заданы в запросе. Чтобы полностью полагаться на сборщик статистики, необходимо принципиально обеспечить отрицательную обратную связь, в то время как сейчас она периодически сменяется положительной обратной связью и начинается блуждание (см. адаптивный поиск) в работе планировщика. То есть понятно, что реализация неустойчива, можно написать тесты, которые это показывают на конкретных данных, я делал тесты на своих данных в трех проектах, везде одно и то же - при объединении многих таблиц работа планировщика неустойчика, но переписав запрос определенным способом (находится эмпирически) можно добиться сходимости к приемлимому плану запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 11:06 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
MBGпостгрес пытается построить план выполнения, комбинируя порядок объединения таблиц. Это теоретически неразрешимая задача, ибо количество комбинаций растет как факториал. 10! ~3.5E6 Мне кажется, что для алгоритма и данных, которые помещаются в CPU L1 это не проблема. У вас не получалось отдалить включение эвристики увеличением geqo_treshold ? MBGПри объединении более чем 5-7 таблиц путь только один - брать таблицы в том порядке, как они заданы в запросе. У меня была явная зависимость плана от порядка перечисления таблиц (если их много). К сожалению, нет возможности влиять не это напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 11:30 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
MBGПонимаю, вы хотите ссылку на документацию, но еще раз повторю - не нашел четкого описания таких вещей. Ну нигде не написано, что в движке есть принципиально неустранимые проблемы...влияние на выбор плана а) статистики предыдущих запросов или б) знания о поднятии табличных данных в кэш - это должно позиционироваться как фича, а не "неустранимая проблема", и следовательно должно быть упоминание об этом (например в документации). MBGПроблема в том, что при пересечении множества таблиц постгрес пытается построить план выполнения, комбинируя порядок объединения таблиц. Это теоретически неразрешимая задача, ибо количество комбинаций растет как факториал.offtopic. это решается с помощью 14.3. Controlling the Planner with Explicit JOIN Clauses. MBGПри объединении более чем 5-7 таблиц путь только один - брать таблицы в том порядке, как они заданы в запросе.offtopic. предлагаю другой путь - для каждой таблицы оценить кол-во строк удовлетворяющих ограничениям (кроме джоинов), и начинать с самого меньшего джоинить по HashJoin или NestedLoop. сложность O(n). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 11:58 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
Отдалить включение эвристики можно, но не намного. Когда-то я немало времени потратил, разбираясь с тем, как это сделать, а когда число таблиц в запросе перевалило за десяток, обнаружил, что контролировать построение плана я в принципе не могу. Создание цепочки временных видов и таблиц ситуацию значительно улучшают, но при переносе данных в эскулайт те же самые запросы работают в разы быстрее - и это притом, что запросы написаны именно для постгреса... То есть оказалось, что для систем аналитики проще сменить СУБД, чем так мучаться. Мне не требуется какая-то неестественная логика планировщика, достаточно, если он будет полностью контролируем, так, что план выполнения строго детерминирован самим запросом. Сейчас еще одна проблема появилась - пострес требует администрирования при серьезном изменении объемов данных, железа и т.п. А с каждым годом на одного администратора приходится все больше серверов. Пока я занимался настройкой постгреса на одном рабочем и одном тестовом сервере для одного проекта, еще ничего, но когда проектов стало три... В общем, уже просто времени нет на настройку постгреса. Со встраиваемой базой есть тот плюс, что все определяется на этапе разработки, установленная система практически не требует сопровождения (даже бэкап можно делать просто скопировав файлы баз данных). Была мысль сделать форк постгреса, выбросив значительную часть унаследованного кода, и сделав строго детерминированный планировщик, но многоядерные процессоры (осенью интел обещает 8-ми ядерники) и дешевые SATA-диски огромного объема (через 2 года тошиба обещает 5-гиг диски) привели к мысли, что блокировочник ныне оптимальный вариант, а версионник уже не нужен (эпоха версионников - это было время работы пользователей в консоли, когда запросы вводились и выполнялись медленно, а сейчас запросы генерируются автоматически, заранее предсказуемы и могут быть выполнены очень быстро или хотя бы разделены на серию быстро выполняемых запросов, также использую создание реплики основной базы для работы каждого пользователя). Да и версионные файловые системы в линуксе со временем станут стабильнее и будут годны для использования на продакшен-серверах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 12:01 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
MBG ... и дешевые SATA-диски огромного объема (через 2 года тошиба обещает 5-гиг диски) ... Запутался. Щас какой год? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 12:05 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
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 данные хранить. Хоть что-то планировщик должен делать, иначе зачем он? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 12:47 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
APM MBG ... и дешевые SATA-диски огромного объема (через 2 года тошиба обещает 5-гиг диски) ... Запутался. Щас какой год? Разумеется, 5 Тб :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 12:48 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
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 эти значения должны соответствовать действительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 13:24 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat... В таком случае расскажите нам, как измеряется стоимость I/O при планировании запроса. А также почему при намного более низкой стоимости чтения из кэша и используемой методике определения кэшированных данных стоимость I/O по вашему мнению не меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 13:45 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
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 после запросов чтения начинает ошибаться в количестве записей в таблице. Возможно, это есть следствие проблемы с проматыванием счетчика транзакций даже для читающих транзакций, но проблема тем не менее есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 13:49 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
MBGВ таком случае расскажите нам, как измеряется стоимость I/O при планировании запроса.оценивается. без учета информации о наличии данных той или иной таблицы в кэше. MBGА также почему при намного более низкой стоимости чтения из кэша и используемой методике определения кэшированных данных стоимость I/O по вашему мнению не меняется.потому что "методика определения кэшированных данных" в планировщике не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 14:31 |
|
||
|
Зависит ли выбор плана от статистики по выполненным запросам?
|
|||
|---|---|---|---|
|
#18+
Считаете, что параметр effective_cache_size это обман и на самом деле планировщик не использует эту информацию? А также информацию о стоимости ввода/вывода для диска и ОЗУ... По документации, shared_biffers к планировщику отношения не имеет, но то, что я поднимаю таблицу с помощью dd в кэш ОС помогает не везде и не всегда и по симптомам похоже на то, что все-таки оценивается наличие данных в shared_biffers и при планировании запроса предусматривается выборка в первую очередь из него. При чекпойнтах выполняется сохранение данных из shared_biffers, значит, хранимые в этом буфере данные просто отсутствуют на диске и планировщик должен знать, какие данные откуда взять, чтобы не напороться на их некорректную версию или вообще отсутствие нужных данных. Как в этом ракурсе вы оцениваете заявление о независимости планировщика от shared_biffers? Явно зависит, а кот как именно реализован алгоритм, можно найти только в коде. Кстати, LRU алгоритм был модифицирован и не раз с версии 7.4, а в документации обновления соответствующих разделов я не заметил. Так что есть большие сомнения, насколько документация соответствует последним версиям постгреса в плане описания работы планировщика (хотя описанием это сложно назвать, скорее, упоминание). Если верить документации, то и explain работает абсолютно точно, пока нет модификации данных, при этом почему-то никто не сообщает в этом контексте, что модификация данных имеет быть при запуске читающих транзакций (опосредованно, через версионный механизм - модификация не содержимого, а номера актуальной версии этого содержимого). Существующие проблемы я перечислил выше, не все, конечно, но многие. Ссылку вам на описание аналогичной ситуации привели, причем там неоднозначность возникает на стандартном наборе тестов. Вы же реагируете в точности как разработчики постгреса - "я этого не понимаю и не нашел в документации, значит, проигнорирую". Вы ищите проблемы и несоответствия в документации или на реальной системе? Попробуйте потестировать и увидите сами, что документация далеко не так хорошо соответствует действительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 15:03 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35456565&tid=2004171]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 393ms |

| 0 / 0 |
