|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
vyegorovmaxxstorm, База читает не по-строчно, а по-блочно. Было `read=275479` произвольных обращений к диску. Чтобы точно знать время IO операций, можно включить `track_io_timing=on`, тогда в плане будет видно реальное время работы с дисками. `dirtied` значит, что ваш запрос должен был "подчищать" за другими запросами, проставля hint bits в записях. Вот второй раз делаю этот же запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Откуда щас dirtied взялись? Это данные за вчера и апдейтов по ним не бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 10:36 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
qwwqmaxxstormНе поверю, что чтобы прочитать 90000 строк из индекса, понадобится 365 секунд: если базе придется читать 90000 строк из маленькой таблички на 90 000--900 000 строк, то она просто забьёт на индексы и прочитает табличку последовательным доступом. т.е. относительно быстро. и отфильтрует. если же ей придется читать 90000 "по индексу" (из большой реально таблички, которую последовательно читать дорого) -- то это будет уже произвольный доступ. и , в случае механики, "чюдес не бываит" -- вряд ли блоки окажутся расположены так удачно, что затраты на полоборота диска куда--то все пропадут. только если только что что--то типа "кластер" было вдоль этого индекса сказано. и выборка подряд вдоль кластерного индекса. ну и если записей на блок много приходится и коэффициент перекрытия случится удачный (т.е. придется читать физически много меньше 90000 блоков)-- случится экономия в числе доступов (позиционировании головы). к тому же "по индексу", но "с доступом к самим записям" -- это несколько дороже, чем "только по индексу" -- там как бе 2 отдельные физические реляции получаются. и к обеим -- физически доступаться. зы. скоро обещают x--память, или как её -- скоро про механический доступ можно будет не вспоминать Делаю тот же запрос на тестовом сервере: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Разница в скорости на 2 порядка. Разница в количестве записей 1:1.5, к тому же на тестовом сервере диски старые и медленные. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 10:53 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm Вот второй раз делаю этот же запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
maxxstorm<> Делаю тот же запрос на тестовом сервере: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Разница в скорости на 2 порядка. Разница в количестве записей 1:1.5, к тому же на тестовом сервере диски старые и медленные. читать ещё не научили ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 11:13 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
qwwqmaxxstormВот второй раз делаю этот же запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
maxxstorm<> Делаю тот же запрос на тестовом сервере: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Разница в скорости на 2 порядка. Разница в количестве записей 1:1.5, к тому же на тестовом сервере диски старые и медленные. читать ещё не научили ? Туплю чот. Как я понимаю, отца русской демократии спасет только SSD? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 14:01 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm, Ну... SSD оно всегда хорошо. Но у меня есть мысль, что у вас могут быть распухшие таблицы и/или индексы. Там много UPDATE/DELETE операций? Можно сделать идентичный существующему индекс с другим именем и сравнить размеры. Можно таблицы "пожать", и индексы тогда точно надо будет перестроить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 15:33 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
vyegorovmaxxstorm, Ну... SSD оно всегда хорошо. Но у меня есть мысль, что у вас могут быть распухшие таблицы и/или индексы. Там много UPDATE/DELETE операций? Можно сделать идентичный существующему индекс с другим именем и сравнить размеры. Можно таблицы "пожать", и индексы тогда точно надо будет перестроить. 2-3млн инсертов + 200к делетов в сутки ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 15:38 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm, А настройки autovcauum-а наверно умолчательные, да? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 15:41 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
vyegorovmaxxstorm, А настройки autovcauum-а наверно умолчательные, да? Код: sql 1.
Настойки по умолчанию, но почему то автовакуум не отрабатывает. Мы запускаем вручную vacuum analyze. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 15:42 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7.
Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 15:45 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm2-3млн инсертов + 200к делетов в сутки смутно кажется, что уместно будет пофантазировать на тему партицирования и, возможно, принудительной ротации/фриза хвостов. (если данные "в прошлое" могут торчать долго). но пока физ--смысл вашей кухни мне не настолько ясен, чтобы тут что--то советовать наверняка. -- партицирование всё сильно усложнит планировщику. а тем более -- sql--деву. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2016, 17:06 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
Сравниваю с аналогичным запросом из другой бд(размер 50гб): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
9 секунд и 428234 обращенй к диску. Делаю аналочичный запрос в свою таблицу(размер бд 150гб): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Почему кост в 25 раз больше? Ведь количество записей одного порядка(11 и 15 млн соответственно) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 11:41 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm, 1. покажите Код: sql 1. 2. 3. 4. 5. 6.
с обеих; сравните попунктно. и по мелочи : 2. при расчете коста использовано 17 и 11 лямов -- по ожиданиям, а не по факту. (мелочь, а поправочка) 3. операции разные. (хотя и не настолько) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:03 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
qwwqmaxxstorm, 1. покажите Код: sql 1. 2. 3. 4. 5. 6.
с обеих; сравните попунктно. и по мелочи : 2. при расчете коста использовано 17 и 11 лямов -- по ожиданиям, а не по факту. (мелочь, а поправочка) 3. операции разные. (хотя и не настолько) Абсолютно одинаковые дефолтные значения Код: sql 1. 2. 3. 4. 5.
Разные операция в смысле seq scan и index scan? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:07 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstormРазные операция в смысле seq scan и index scan?а что, по буквам названия совпадают, чоль ? хотя почему подавлено сравнение со сек--сканом для вас -- не понял. думаю у вас какие--то енейблы отключены (что дает разовую прибавку к косту в 10 ярдов) посмотрите Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:19 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm, Львиную долю в цене составляет обращение к буферам. Если размер базы в 3 раза больше, то это имеет значение. Для маленькой базы у вас: Код: sql 1. 2. 3.
Для большой: Код: sql 1. 2. 3. 4.
Кол-во обращений надо считать общее, а не только `read`. И общее кол-во обращений во 2-м случае на порядок больше, ибо это проход по индексу, произвольный доступ. Да ещё с переодическим "подглядыванием" в кучу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:22 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
vyegorov, там 2 вопроса -- 1. почему оно секвенс скан отбросило (который видимо задизейблен) 2. зачем для IOS БЕЗ УСЛОВИЙ (т.е. по всем листам == по всем блокам индекса) рендом доступ ? ожидают очень плохую карту ? (можно ожидания где--то увидеть?). или индекс принципиально всегда так фрагментирован, что обязательно поблочный рендом доступ ? //и никогда и никак -- не прочитать одним куском ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:33 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
qwwqпосмотрите Код: sql 1. 2. 3. 4. 5.
Все настройки одинаковые: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:43 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
Сделал на своей БД Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
4 миллиона обращений против 400к для первой ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:46 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
qwwq, Вопросы интересные. 1. Тут надо у @maxxstorm спрость что происходит. Я бы пробовал включать-выключать разные `enabled_%` опции и сравнивать косты. Ещё было бы интересно увидеть размер таблицы и индексов в блоках и записях (relpages и reltuples) из `pg_class`, а также кол-во удалённых записей в `pg_stat_user_tables`. 2. Тут я не уверен, надо код смотреть или же гуглить. Мне думается, что ПЖ не умеет делать IndexFastFullScan (в терминах О), он читает листья в порядке индекса, следуя по ссылкам в служебной зоне страниц -- это и приводит к произвольному доступу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:50 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm, А много изменений в таблице? Может она у вас банально распухла? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:52 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
vyegorovmaxxstorm, А много изменений в таблице? Может она у вас банально распухла? апдейты редко бывают, автоваккум включен вроде, отрабатывает каждый день. Как определить, что распухла? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:53 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
vyegorov, там разница в буферах секскана -- тоже порядок. (при разнице ожиданий строк около 1,7) видимо очень пустые блоки приходится читать в количествах. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 13:00 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
qwwqvyegorov, там разница в буферах секскана -- тоже порядок. (при разнице ожиданий строк около 1,7) видимо очень пустые блоки приходится читать в количествах. vacuum full поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 13:11 |
|
Тяжелый запрос к связанным таблицам
|
|||
---|---|---|---|
#18+
maxxstorm, Для начала, посмотрите на вывод запроса (в `psql`): Код: sql 1.
Затем посмотреть на вывод такого запроса (осторожно, читает всю таблицу): Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 13:12 |
|
|
start [/forum/topic.php?fid=53&msg=39360593&tid=1996781]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 359ms |
total: | 504ms |
0 / 0 |