Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
Вот один из простеньких примеров, который призван продемонстрировать некоторую "недалекость" планировщика. Создаем 2 таблицы и наполняем их: Код: 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. А затем смотрим что нам скажет EXPLAIN на следующий запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Так вот, непонятно, почему нельзя обойтись без сортировки в конце? Или я чего-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 22:19 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmТак вот, непонятно, почему нельзя обойтись без сортировки в конце? Или я чего-то не понимаю? Potomu chto chtenie iz tablits t1, t2 budet idti ne sinhronno, a posledovatelno... Poetomu "Append node" snachala vydast otsortirovannye el-ty iz t1, a potom dobaviatsia otsortirovannye el-ty iz t2. Poetomu ob'edinenny spisok nado sortirovat'... Vopros, mojno li eto schitat' serionym nedostatkom planera ? Vriad li. Ne znau konechno, no dumayu chto i drugie DMBS vybiraut takoi-je plan... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 00:07 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
в oracle9i план аналогичный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 10:27 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmВот один из простеньких примеров, который призван продемонстрировать некоторую "недалекость" планировщика. Кста, а в SQL2005 какой план? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 10:47 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
авторКста, а в SQL2005 какой план? Для SQL2005 делаем следующее: Код: 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. 26. 27. 28. 29. 30. Запрос тот же: Код: plaintext 1. 2. 3. 4. 5. 6. Как получить план исполнения в текстовом, читабельном виде, так понять и не удалось, поэтому см. screenshot во вложении. Можно видеть, что здесь все очень просто и изящно. Кстати, в SQL2000 план точно такой же. авторVopros, mojno li eto schitat' serionym nedostatkom planera ? Vriad li. Ne znau konechno, no dumayu chto i drugie DMBS vybiraut takoi-je plan... Не могу с этим согласится. Если число аналогичных таблиц в UNION ALL достаточно велико (в моем случае именно так), а также досточно много записей в одном SELECT, то тормоза будут существенными. Хочу заметить, что сравнительный анализ PG и SQL2005 я провожу не ради интереса, а по необходимости: проектируемое серверное приложение должно уметь работать с обоими типами DBMS . Помимо анализа SELECT-запросов, был проведен основательный анализ (с последующей оптимизацией) скорости работы bulk copy, как самого быстрого способа вставки новых записей. В моих тестах, PG проигрывает в производительности по всем статьям примерно в 2 раза, как это ни печально ;( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 16:01 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsm Как получить план исполнения в текстовом, читабельном виде, так понять и не удалось, поэтому см. screenshot во вложении. Можно видеть, что здесь все очень просто и изящно. Кстати, в SQL2000 план точно такой же. Ну в принципе да, только не понятно (по плану) будет ли произведена сортировка результата вообще. И если да, то когда - Clust. index scan - это никак не сортировка. Merj Join - тоже. В общем - ощущение, что план от МС не полон. И для PG лучше сразу приводить не только план, но и результат его выполнения в реальной жизни т.е. EXPLAINE ANALYZE. zsm Если число аналогичных таблиц в UNION ALL достаточно велико (в моем случае именно так), а также досточно много записей в одном SELECT, то тормоза будут существенными. Сортировку на каком-то этапе даже SQL2005 прийдется делать. Так что вопрос скорее нужно проверять на практике. zsm Помимо анализа SELECT-запросов, был проведен основательный анализ (с последующей оптимизацией) скорости работы bulk copy, как самого быстрого способа вставки новых записей. В моих тестах, PG проигрывает в производительности по всем статьям примерно в 2 раза, как это ни печально ;( А здеся можно и fsynk отключить для PG, и на линух перейти (авось поможет ). Хотя спору нет, скорость вставки у МС, особенно, по идее, как блокировщика - на высоте. А на счет в 2-раза на селектах - не верю. Я думаю, если это таки правда - нафига вообще этот PG кому сдался - есть лучшая RDBMS всех времен и народофф от МС . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 16:37 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
авторНу в принципе да, только не понятно (по плану) будет ли произведена сортировка результата вообще. И если да, то когда - Clust. index scan - это никак не сортировка. Merj Join - тоже. Merge Join - это упорядоченное слияние упорядоченных наборов. Т.е. результирующий набор будет отсортирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:10 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
Andrey Daeron Ну в принципе да, только не понятно (по плану) будет ли произведена сортировка результата вообще. И если да, то когда - Clust. index scan - это никак не сортировка. Merj Join - тоже. В общем - ощущение, что план от МС не полон. И для PG лучше сразу приводить не только план, но и результат его выполнения в реальной жизни т.е. EXPLAINE ANALYZE. Сортировка произведена не будет, поэтому в плане ее и нет. В том то вся фишка, что обход по индексам + грамотный merge, и в итоге получаем правильно упорядоченную выборку. Andrey Daeron Сортировку на каком-то этапе даже SQL2005 прийдется делать. Так что вопрос скорее нужно проверять на практике. Так собтсвенно из практики все эти утверждения. Andrey Daeron А на счет в 2-раза на селектах - не верю. Я думаю, если это таки правда - нафига вообще этот PG кому сдался - есть лучшая RDBMS всех времен и народофф от МС . Про тривиальные запросы, а точнее, про запросы для которых планировщик выдает хороший план, я не говорю - тут тема отдельного исследования. А вот то, что основное падение производительности следствие недостаточной интеллектуальности планировщика, увы, но факт. И не спасет тут никакой кэш, управление процесами и т.п. А проявляется эта интелектальность на более менее сложных запросах. Алгоритм обработки данных - вот первое, что нужно оптимизировать в любой программе, а уже потом поднимать частоту процессора, заниматься переписыванием на asm и т.д. Что-то мне подсказывает, что планировщик, это и есть самая сложная часть в СУБД. Andrey Daeron А здеся можно и fsynk отключить для PG, и на линух перейти (авось поможет ). Хотя спору нет, скорость вставки у МС, особенно, по идее, как блокировщика - на высоте. Перейти на *nix - думаю это не панацея. Да и, честно говоря, нет такой возможности. Наверное, я бы и не стал связываться с PG, но слишком недешевое удовольствие - SQL2005. Шибко на себестоимость продукта влияет ;-) А из фриварных, кроме PG, другой достойной альтернативы просто не наблюдается. Так что приходится как-то выкручиваться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:15 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
Mergejoin в этом примере работает намного медленнее, чем sort. :-O Объяснить не могу, может быть выделение памяти... Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:46 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatMergejoin в этом примере работает намного медленнее, чем sort. :-O Объяснить не могу, может быть выделение памяти... Да нет. Все гораздо проще... Merge Join производит сортировку, используя два указателя, а Sort - один указатель. Соответственно, поиск первого меньшего и первого большего значения (для TimeStamp) занимает не 128 сдвигов по индексам, а 64 (в максимуме). То есть сортировка получается вдвое дешевле Merge. Хотя, индексы не сильно разряженные и реально количество сдвигов где-то 1-2 не более Ж;) Append вообще физически в памяти ничего не перемещает, тока меняет пару-тройку указателей на блоки и (в данном случае) прицепляет ветку одного индекса к другому по первому битовому расхождению. А Merge действительно не умеет неотсортировать результат. Иначе это не Merge, а какой-нибудь Hash. Я полагаю таки, дело не в планах, дело в том, что движок посгреса плохо портируется под винду. К серваку еще никто не подцепился, а в памяти уже болтается 3 параллельных процесса. Общаться процессы могут либо через объекты ядра, либо через FileMapping. Каждый новый юзер - новый процесс. Для иксов это нормально, а вот винда слабовата с раздачей ресурсов процессам. К тому же винда не может обеспечить быстрого взаимодействия между ними. Вот и получается полный тормоз. Надо писать большой умный экзешник, который сам раздает задачи по потокам внутри одного процесса (как у MS). Тока это уже будет не Pg. Такая архитектура несколько более уязвима для падучей, чем нынешняя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 06:20 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmКак получить план исполнения в текстовом, читабельном виде, так понять и не удалосьПочитай, может поможет: Тынц - F.A.Q./Microsoft SQL Server/Настройка и конфигурация/Как получить план выполнения запроса в текстовом виде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 06:37 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
Прошу прощения за ошибку в моем предыдущем посте - не наложил ограничение по id в join-запросе. Новый тест: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 10:44 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
Kruchinin Pahan... Merge Join производит сортировку ... А Merge действительно не умеет неотсортировать результат. ...Mergejoin ничего не сортирует. Он соединяет два отсортированных набора, а точнее говоря потока, пришедшие к нему на вход. Отсортированный набор на вход mergejoin-у может передать sort, indexscan, другой mergejoin, кто-нибудь еще. Вследствии этого выход (результат) mergejoin-а получается отсортированным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 10:52 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Kruchinin Pahan... Merge Join производит сортировку ... А Merge действительно не умеет неотсортировать результат. ...Mergejoin ничего не сортирует. Он соединяет два отсортированных набора, а точнее говоря потока, пришедшие к нему на вход. Отсортированный набор на вход mergejoin-у может передать sort, indexscan, другой mergejoin, кто-нибудь еще. Вследствии этого выход (результат) mergejoin-а получается отсортированным. Ну да. да. Согласен, неясно выразился. Действительно Merge работает с сортированными списками. И выход получается тоже сортированным в результате реализации Merge. Тока это нисколько не умаляет того, что работать приходится с двумя указателями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 11:03 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
И что в итоге мы видим: PG не умеет Merge-ить UNION ALL, что очевидно, было бы более эффективно, особенно для больших выборок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 15:00 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmPG не умеет Merge-ить UNION ALLВроде бы не умеет. Также это отсутствует в TODO . Но разработчики в курсе some kind of "Merge Sort" node . И это даже "является темой" для wish-list . :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 15:41 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmчто очевидно, было бы более эффективно, особенно для больших выборок.Я бы сказал так: скорее всего, это было бы примерно в 1.5 раза быстрее, независимо от размера выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 15:49 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat zsmчто очевидно, было бы более эффективно, особенно для больших выборок.Я бы сказал так: скорее всего, это было бы примерно в 1.5 раза быстрее, независимо от размера выборки. А почему не зависит от размера выборки? Ведь чем больше выборка, тем больше придется сортировать. Я слабо представляю, как реализована сортировка, но смею предположить, что по крайней мере все ключи придется сначала брать из таблиц и где-то их размещать. Поправте, если я не прав... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 16:37 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmНаверное, я бы и не стал связываться с PG, но слишком недешевое удовольствие - SQL2005. Шибко на себестоимость продукта влияет ;-) А из фриварных, кроме PG, другой достойной альтернативы просто не наблюдается. Так что приходится как-то выкручиваться... Вот 1С тоже так подумала и версию 8.1 выпустила по PG. Зайди к ним на сайтик - посмотри, качни их патчи. Заодно пролечиться и регистрозависимость в запросах (столкнетесь с этим после MSSQL). Настройку по умолчанию они там поменяли. Или радуйтесь жизни вместе с MS и не дергайтесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 16:53 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmА почему не зависит от размера выборки? Ведь чем больше выборка, тем больше придется сортировать.В школе проходили, что merge - O(N), sort - O(N*log(N)). Но судя по тому, что сортировка по id работает существенно быстрее, чем по value, можно предположить, что сортировка по id будет O(N). Провел эксперимент, из которого видно, что отношение времени sort к времени merge не зависит от N: Код: 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. 26. 27. 28. 29. 30. zsmЯ слабо представляю, как реализована сортировка, но смею предположить, что по крайней мере все ключи придется сначала брать из таблиц и где-то их размещать.Не знаю, как в постгресе реализована сортировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 17:41 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Отношение union sort time к merge join time: Код: plaintext 1. 2. 3. 4. А я попробовал выполнить запросы по всей таблице. У меня получилось: select * from ( select * from t1 union all select * from t2 ) as a order by id; ~48c select * from t1 join t2 using (id) order by id; ~24c Это стабильные результаты, полученные при нескольких повторных исполнениях. Пропорция немного нарушается. Вообще, для меня все кажется очевидным. Мало того, что сортировка требует времени и ресурсов (например, если клиентский запрос упирается в квоту по памяти, то это еще сильнее усугубит дело), еще один большой минус я вижу в существенной задержке в полчении первой записи - пока все не отсортирует, ничего ведь не вернет. Вот и пример выбора неэффективного алгоритма. На маленьких выборках и нагрузках конечно не смертельно, но как говорится, "непорядочек", осадок-то, остается... ;-) Наверное, на этом вопрос с эффективностью UNION ALL можно и закрыть. Будем ждать и надеятся, что доработают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 18:17 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
А вот еще один пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Приходится все делать руками. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А вот MS умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 18:44 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
zsmА я попробовал выполнить запросы по всей таблице. У меня получилось: select * from ( select * from t1 union all select * from t2 ) as a order by id; ~48c select * from t1 join t2 using (id) order by id; ~24c Это стабильные результаты, полученные при нескольких повторных исполнениях.Планы при этом остаются прежними? zsmВообще, для меня все кажется очевидным. Мало того, что сортировка требует времени и ресурсов (например, если клиентский запрос упирается в квоту по памяти, то это еще сильнее усугубит дело), еще один большой минус я вижу в существенной задержке в полчении первой записи - пока все не отсортирует, ничего ведь не вернет.Верно, не вернет. (Для sort-плана actual_time_first_row = 524.369.) zsmНаверное, на этом вопрос с эффективностью UNION ALL можно и закрыть. Будем ждать и надеятся, что доработают.Можно не только ждать, но написать письмо с просьбой в список рассылки . zsmНе умеет планировщик сам переносить фильтр с поля t1.id на t2.id для таких простых и очень частых случаев. Приходится все делать руками.Да, я очень этому удивился. ИМХО, планировщик тут откровенно тупит. Еще одна тема для списка рассылки. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 23:56 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
мне подарили новую шкоду (автомобиль) он ездит впринципе хорошо но не так хорошо как бмв 7. и салон у него не такой хороший как у бмв. и электроники мало и и и и и и и ! но бмв дорогая примерно штук 100 баксов а шкоду подарили. нет можно бмв украсть и наслаждаться бесплатно всеми ее плюсами, но красть страшновато! но шкода плохо ездит по сравнению с бмв и не такая красивая .... но зато бмв стоит 100 штук. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 11:31 |
|
||
|
PGSQL. Разочарование близко 2.
|
|||
|---|---|---|---|
|
#18+
Честно говоря сразу хотелось подобным образовы выразиться и закрыть эти слезливые топики.... IMHO с _таким_ вопросами одначначно нужно в pg_users писать. Вообще могу сказать что 8.2.1 меня лично не впечатлил. Что релиз что снапшот на притивных тестах (да взять хотя бы пример с которого этот топ начат) почему-то отстают от 8.1.3/4 Одна и таже коробка с ОС только что созданный кластер базы и разница во времени выполенения до 200ms! Причем что на дефолтных установках что на рихтованных разрыв заметный и однозначно не в пользу свежака. Понятно что это еще ничего не значит но думаю поднимать версию смысла нет. Возможно все таки в погоне за новыми фичам чего-то в очередной раз упестили и выправиться это в нечетной версии. 8-) Если у кого есть возможность/желание попробуйте выполнить скрипты приведенные в первом посте на PG 8.1.3/PG 8.1.4/PG 8.2.1 и давайте сравним результаты. А меряться пи...планами с M$ и Oracle - милости прошу в "Сравнение БД". 8-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 12:26 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34260727&tid=2005707]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 419ms |

| 0 / 0 |
