Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
17.07.2018, 10:17
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
День добрый. Есть pgsql 9.6, база на ssd, вроде бы все более менее по железу и настройкам. Также есть примерно такой запрос (кусок другого, но тормозит сейчас именно эта часть): Код: plsql 1. 2. 3. 4. 5. 6. 7.
План такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Получаем порядка 74 сек, хотя обычно это все не более секунды. Сейчас в interviews при project_id = 737 имеем 165609 записей, что много, но не смертельно. Индекс есть в counter_interviews такой: Код: plsql 1.
Наведите пожалуйста на мысль. Вероятно пропустился какой-то индекс... да и не понятно, чего кэширование никак не спасает - один и тот же запрос постоянно выполняется за эти 74 секунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 10:55
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
9 ЛЯМОВ индекс сиков при Nested Loop по респондентам жрут все время - 70 секунд тут напрашивается хэш джон на respondents статистику обнови для начала. а там может как раз индекс на pk_respondents тебе мешает. ну и потом уже последовательность джоинов эффективнее другая. Видно что inner join respondents отбросит 90% лишнего из interviews. Потом на counter_interviews будет легче джойнить ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 12:30
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Ivan Durak, спасибо, правда как-то очень наверное мудрый ответ - ничего не понял, что пробовать делать и куда смотреть. Можно чуть более обычными словами? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 12:41
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey TriznoIvan Durak, спасибо, правда как-то очень наверное мудрый ответ - ничего не понял, что пробовать делать и куда смотреть. Можно чуть более обычными словами? Можно. Краткая выдержка. " Primary keys are constraints. Some constraints can create index(es) in order to work properly (but this fact should not be relied upon). F.ex. a UNIQUE constraint will create a unique index. Note, that only B-tree currently supports unique indexes. The PRIMARY KEY constraint is a combination of the UNIQUE and the NOT NULL constraints, so (currently) it only supports B-tree. You can set up a hash index too , if you want (besides the PRIMARY KEY constraint) -- but you cannot make that unique. CREATE INDEX name ON table USING hash (column);" Читать таки тут . То есть в целом нужно сделать примерно так CREATE INDEX respondents_id_hash ON respondents USING hash (ud); И попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 12:42
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Andy_OLAP, То есть CREATE INDEX respondents_id_hash ON respondents USING hash (id), небольшая опечатка, старость не радость. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 13:14
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Andy_OLAP, спасибо. Индекс сделал, но не изменилось совсем ничего по скорости. План теперь такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 13:17
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Andy_OLAP, Возможно кроме индексов есть смысл таки изменить сам запрос? Хотя простой же он совсем... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 13:18
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey TriznoAndy_OLAP, спасибо. Индекс сделал, но не изменилось совсем ничего по скорости. План теперь такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Таки нужно сделать ANALYZE respondents после создания нового индекса. И можно использовать set enable_nestloop = False. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 13:24
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey TriznoAndy_OLAP, Возможно кроме индексов есть смысл таки изменить сам запрос? Хотя простой же он совсем... Можно попробовать. Было Код: plsql 1. 2. 3. 4. 5. 6. 7.
Стало Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
А можно еще сделать простой из 2 столбцов CREATE INDEX respondents_id_project_id ON respondents USING (project_id,id); Вместо hash index. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 13:26
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey Trizno, Вы поймите, смысл форума не в том, чтобы выдать Вам сразу готовый продукт, а в том, чтобы дать несколько полуфабрикатов и инструкцию по доводке напильником. Чтобы Вы попробовали на вкус разное и решили уже с пониманием, что именно нужно здесь, а что там, и почему так. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 14:06
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Andy_OLAPА можно еще сделать простой из 2 столбцов CREATE INDEX respondents_id_project_id ON respondents USING (project_id,id); Вместо hash index. Сделал: Код: plaintext 1. 2.
Что-то таки поменялось (сам запрос пока старый): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 14:11
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey TriznoAndy_OLAPА можно еще сделать простой из 2 столбцов CREATE INDEX respondents_id_project_id ON respondents USING (project_id,id); Вместо hash index. Сделал: Код: plaintext 1. 2.
Что-то таки поменялось Ну и теперь можно сделать и посмотреть, что поменялось. Код: plsql 1. 2.
А затем иначе и сравнить. Ну и теперь можно сделать и посмотреть, что поменялось. Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 14:11
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Andy_OLAPВы поймите, смысл форума не в том, чтобы выдать Вам сразу готовый продукт, а в том, чтобы дать несколько полуфабрикатов и инструкцию по доводке напильником. Чтобы Вы попробовали на вкус разное и решили уже с пониманием, что именно нужно здесь, а что там, и почему так. Это я конечно понимаю. Мысль про индекс по project_id + id - спасибо, получили index only scan, это явно немного помогло. Мне просто после многих лет жизни с mssql, который сам мудрит и оптимизирует кривые запросы, сейчас несколько сложно :) Пытаюсь пробиться. Разбивка запроса на отдельные with... - это как раз то, к чему нет привычки, т.к. по ощущениям - это задача оптимизатора как раз, ему более понятно что и как лучше сделать, согласно накопленной статистики, имеющихся данных в кэшах и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 14:16
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey TriznoМне просто после многих лет жизни с mssql, который сам мудрит и оптимизирует кривые запросы, сейчас несколько сложно...cогласно накопленной статистики, имеющихся данных в кэшах и т.д. Тут такое дело - MSSQL это все-таки блокировочник, а PosgreSQL - самая кривая реализация из всех MVCC, даже MySQL впереди, куда уж до Oracle. А в туплах накопленная статистика - это что-то такое, что никак не накопленная статистика по строкам. Понимаете? Поэтому Вам кажется планировщик кривым, а разработчики изнутри уже давно привыкли, что нужно с бубном танцевать. И у них не вызывает сочувствия и понимания тот факт, что в MSSQL все проще. Не хотят заказчики платить за MSSQL Enterprice + CAL - лучше делать на MSSQL Express несколько небольших баз-прослоек, а оттуда все сливать в большую базу PostrgeSQL, если совсем никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 14:25
|
|||
---|---|---|---|
|
|||
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Andy_OLAP, Про нежелание платить - да, потому и ушли. Но в защиту PG тоже могу сказать, что за годы жизни на MS (причем в режиме версионности, без блокировок) - тоже наступали на кучу внезапных проблем с производительностью, которые как появлялись, так и потом пропадали. А в PG оно как бы честнее... но требует больше мозга. Насчет with... попробовал вынести отдельно respontents и такой запрос вообще залип, не дождался завершения: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 14:32
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey TriznoНасчет with... попробовал вынести отдельно respontents и такой запрос вообще залип, не дождался завершения: А Вы посмотрите EXPLAIN, без EXPLAIN ANALYZE. И подумайте, почему Вы решили, что "А в PG оно как бы честнее ... но требует больше мозга" :) Кроме того, тесты проводить следует на отдельной таблице respondents_copy с primary key, куда заливаете строки из respondents, затем создаете один индекс новый. Потом удаляете таблицу-копию и по новой. А Вы наверняка на одной и той же таблице все тестируете. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2018, 14:34
|
|||
---|---|---|---|
Вдруг затормозился вроде бы простой запрос. Наведите на мысль плз. |
|||
#18+
Alexey Trizno за годы жизни на MS (причем в режиме версионности, без блокировок) - тоже наступали на кучу внезапных проблем с производительностью , которые как появлялись, так и потом пропадали И называлась эта одна проблема очень просто - "merge join вместо nl или inner join при отсутствии update statistics with fullscan". ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1995671]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
219ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 294ms |
total: | 616ms |
0 / 0 |