Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 19:38 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Paul ChabinskyКак получается, что фильтрация по t1_id в самом конце???Запрос, если смотреть на текстовую выдачу EXPLAIN, выполняется не сверху внизх, а из глубины наружу, то есть справа налево. (Не думаю, что понятно объяснил.:) Здесь постгрес последовательно прочитал таблицу 2 и закачал ее в хэш, потом последовательно читал строки из таблицы 1, фильтровал их по условию t1_id>1, соединял со строками из хэша по условию t2_t1_id=t1_id, и отдавал наружу. http://www.postgresql.org/docs/8.0/static/performance-tips.html#USING-EXPLAIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 09:49 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Так вот меня и интересует, почему он сначала всю таблицу table2 в кэш берет, и только потом фильтрует первую и джойнит, когда надо сначало отфильтровать первую таблицу, получить значения форейнки и только потом выбирать записи из второй таблицы, и с ними джойниться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 11:58 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Просто шедевр выдает :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Насколько я понимаю он просто перестал брать таблицы в кэш, чем мне все это грозит, да тем что когда оптимизатор поймет, что не сможет закачать данные в оперативку он будет делать мердж джоины вместо хэш джоинов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 12:12 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
В данном конкретном случае абсолютно пох. какие планы выбирает оптимизатор. Планы надо смотреть на реальных объёмах данных. Теперь к вопросу. Учтём, что PostgreSQL читает данные блоками по 8 кб. Таким образом, каждая из вышеописанных таблиц умещается в 1 блоке, и сделать seq scan (который прочитает 1 блок) быстрее, чем index scan (который прочитает 2 блока --- heap и индекс). Поэтому выбираются планы, подразумевающие полный просмотр. Теперь, если у нас есть целиком таблица, то быстрее будет не Nested Loop (т.е. линейный просмотр на каждой итерации), а нечто другое (соединение по хэшу или слияние двух отсортированных результатов), что и выбирается. Все пространные рассуждения касательно "кэша" и "оперативки" отнесём на счёт незнания архитектуры данной СУБД. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 13:15 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Да я действительно не знаю тонкостей PG. :) По этому и задаю вопросы :) Сначало я именно так и подумал, что ему выгодней делать хэшджоин чем нестедлуп на таком объеме данных, но сомнения возникли именно потому, что при явном указании t1_id = 2, делается нестед луп... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 14:27 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul ChabinskyТак вот меня и интересует, почему он сначала всю таблицу table2 в кэш беретВидимо не догоняет, что из условий t1_id=t2_t1_id и t1_id>1 следует, что t2_t1_id>1. Попробуйте ему в этом помочь: ... where t1_id > 1 and t2_t1_id>1. Paul Chabinskyкогда надо сначало отфильтровать первую таблицу, получить значения форейнки и только потом выбирать записи из второй таблицы, и с ними джойниться."Надо" или "можно"? :) Процитирую себя: "так как возможно несколько разных вариантов, и он выбрал из них наиболее дешевый по его мнению". Paul Chabinskyкогда оптимизатор поймет, что не сможет закачать данные в оперативку он будет делать мердж джоины вместо хэш джоиновНе факт. Проверить правильность этого утверждения можно копая сорцы, mailing-lists,.. Paul ChabinskyСначало я именно так и подумал, что ему выгодней делать хэшджоин чем нестедлуп на таком объеме данныхСтоит ли вообще заглядывать в планы на таком объеме данных? Практичнее играться с реальными объемами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 14:57 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:13 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:21 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Теперь почему я вообще эту тему поднял Вы только очень сильно матом на меня не кричите, я честно ищу помощи, или приговора :( Я обсолютно такую же структуру сделал в MSSQL 2k Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:30 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Возможно ли увеличить производительность Постгреса... Ведь это элементарный запрос, если запрос будет сложнее я хочу знать что меня ждет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:32 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul Chabinsky wrote: > Возможно ли увеличить производительность Постгреса... Можно, исходники оптимизатора открыты (эт вам не MSSQL) :) > Ведь это элементарный запрос, если запрос будет сложнее я хочу знать что > меня ждет... ХЗ что тебя может ждать - решения оптимизатора по планам запросов зависят от объемов реальных данных, наличия и типов индексов, но, опять же, сорцы открыты - бери анализируй :) (слаб о ?) , а данные можно нагененирить, натестить. Но, ИМХО, реальные траблы вылезут только на реальных, активно используемых данных. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 16:59 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul Chabinsky Код: plaintext 1. 2. 3. 4. 5. 6. Покажите пожалуйста, что получается с set enable_hashjoin to off; Paul ChabinskyТеперь почему я вообще эту тему поднял... Я обсолютно такую же структуру сделал в MSSQL 2kLucky MSSQL, возможно, на этом запросе. Когда мы сидели на оракле, тоже приходилось тюнить запросы. :( Paul ChabinskyВозможно ли увеличить производительность Постгреса...Нажмите одновременно Q-W-T-Y. Появится 100 жизни, оружия, сервер станет быстрее и умнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 17:12 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Ребят, я написал про MS только для того чтоб понятней стал мой вопрос. 2 LeXa NalBat Большое спасибо, действительно постгресу надо было помочь. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 17:26 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
2 LeXa NalBat Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 17:37 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul Chabinsky Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 17:53 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
2 LeXa NalBat Я к сожалению уже убил данные тестовые, ждать вставку сново и ваакум не хочется. Но я на 99% процентов уверен что самый быстрый вариант будет с мердж джоином. Моей ошибкой было то, что я недостаточно понятно объяснил оптимизатору постгреса условие выборки... дальше он сам сделал все красиво... Хотя конечно то, что приходица подобные вещи дописывать несколько удивляет и заставляет крепко задуматься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 18:05 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul Chabinsky Сначало я именно так и подумал, что ему выгодней делать хэшджоин чем нестедлуп на таком объеме данных, но сомнения возникли именно потому, что при явном указании t1_id = 2, делается нестед луп... Дык посмотри: он в одном результате оценивает количество полученных строк единицей. Какой смысл единственную строку сортировать / кэшировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 23:08 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul Chabinsky Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Здесь несколько смущает, что на два порядка разница между ожидаемым и полученным числом записей: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 23:14 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul ChabinskyЯ к сожалению уже убил данные тестовые, ждать вставку сново и ваакум не хочется.Жаль. :( Хотелось бы понять, что постгрес думает про нестедлуп, из-за чего его цена получилась дороже? Paul ChabinskyХотя конечно то, что приходица подобные вещи дописывать несколько удивляет и заставляет крепко задуматься.Может быть это не такая уж и тривиальная вещь, по крайней мере для разных типов id1 и id2. Хотя в вашем примере типы одинаковые. Ведь заметьте, MSSQL выбрал один из планов, которые возможны и в постгресе. Нестедлуп с outer по t1 (id1<2) и inner по t2 (id2=id1), а не наоборот - outer по t2 (id2<2) и inner по t1 (id1=id2). P.S.: Несколько раз писал письма разработчикам, почему бы не сделать вот такую простую и правильную вещь? А после их ответа становилось понятно, что это просто и правильно только в моем случае, но не в общем. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 09:59 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 13:31 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Блин случайно запостилось, в общим второй селект делался: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 13:34 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul Chabinsky Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 14:03 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 15:32 |
|
||
|
Где мой Nested Loop %)
|
|||
|---|---|---|---|
|
#18+
Paul Chabinsky Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. prepare fff(int) as select * from test.table2 t2 where t2_t1_id = $1; explain analyze execute fff(1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 16:01 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33259578&tid=2007024]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 278ms |
| total: | 438ms |

| 0 / 0 |
