|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
Использую СУБД Postgresql, относительно не так давно, SQL запросы стали выполняться намного дольше по времени. Некоторые запросы выполняются в несколько десятков раз дольше. Провел анализ работы БД (сравнил с данными месячной давности), проблем с памятью или процами нет. Но заметил что время доступа к разделу с БД различается на порядок, что можно с эти сделать, кроме банального VACUUM FULL ANALYZE? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 11:24 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11Использую СУБД Postgresql, относительно не так давно, SQL запросы стали выполняться намного дольше по времени. Некоторые запросы выполняются в несколько десятков раз дольше. Провел анализ работы БД (сравнил с данными месячной давности), проблем с памятью или процами нет. Но заметил что время доступа к разделу с БД различается на порядок, что можно с эти сделать, кроме банального VACUUM FULL ANALYZE? Разбираться с загрузкой и производительностью дисковой системы с одной стороны. И разбираться с запросами котрые больше всего времени занимают (с учетом диска) с другой стороны. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 11:28 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
reindex скорее всего нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 11:49 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11, Если "банальный VACUUM FULL ANALYZE" помогает, то может что-то не то с настройками autovacuum. Что вот такой запрос возвращает: select name,setting,unit from pg_settings where name ~ 'autovacuum'; ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 12:02 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
В запросе стал использоваться другой индекс, правильно ли я понимаю, после VACUUM FULL ANALYZE должна обновиться статистика, которую использует планировщик для выбора оптимального способа выполнения запроса, также должен помочь REINDEX? Есть ли еще способ кроме VACUUM FULL ANALYZE поставить "на путь истинный" планировщик? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 18:26 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11В запросе стал использоваться другой индекс, правильно ли я понимаю, после VACUUM FULL ANALYZE должна обновиться статистика, которую использует планировщик для выбора оптимального способа выполнения запроса, также должен помочь REINDEX? Есть ли еще способ кроме VACUUM FULL ANALYZE поставить "на путь истинный" планировщик? VACUUM ANALYZE ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 18:34 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11Есть ли еще способ кроме VACUUM FULL ANALYZE поставить "на путь истинный" планировщик? VACUUM не есть тоже самое, что и VACUUM FULL. VACUUM помечает записи, которые ни одна транзакция в базе больше не может увидеть как свободное место. VACUUM FULL перестраивает таблицу (и все индексы) целиком. ANALYZE — отдельная операция, которая осуществляется последней и обновляет статистику распределения данных в таблице для планирования запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2018, 19:50 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
К сожалению VACUUM и REINDEX не помогли. Как работает планировщик POSTGRES, для меня загадка. Есть такая же БД на другом сервере, в аналогичных запросах, там используется нужный индекс, который раньше использовался на проблемной базе. Приведу элементарный запрос и планы выполнения Код: sql 1. 2. 3.
План запроса на проблемной БД: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Используется Index1 по полю Field2 с классом оператора varchar_pattern_ops, запрос выполнялся 25 секунд С аналогичной БД на другом сервере Код: sql 1. 2. 3. 4. 5. 6.
Используется Index2 по полям (Field2 с классом оператора varchar_pattern_ops, Field3), запрос выполнялся 50 миллисекунд Как-то оптимизировать запрос нельзя, куда уж проще. У меня осталась последняя мысль, удалить Index1, но будет ли во всех местах, где действительно нужен Index1, использоваться Index2 и не будет ли он тормозить эти запросы? Буду рад любым конструктивным идеям ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2018, 19:59 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11Используется Index2 по полям (Field2 с классом оператора varchar_pattern_ops, Field3), запрос выполнялся 50 миллисекунд Буду рад любым конструктивным идеям Потому что локаль выбрана другая. posix - работает varchar. А на первом сервере Вы указали en_US.UTF-8 или ru_RU.UTF-8, в общем, некошерный юникод - и varchar_pattern_ops не используется. Проверяйте... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2018, 20:29 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
Andy_OLAP, Невнимательно посмотрел. Не в локалях дело. "Используется Index2 по полям (Field2 с классом оператора varchar_pattern_ops, Field3" на втором, а на первом не используется. Если на первом сервере куча устаревших строк, не вычищенных вакуумом, при этом постоянно менялось поле Field3 - планировщик будет пытаться использовать индекс Index1, который не включает в себя Field3, а на втором сервере тот же индекс более кошерный, вот его планировщик и задействует. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2018, 20:37 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11, Что-то планы от разных запросов, хотя бы потому что в первом есть `Unique`, что говорит о наличии `DISTINCT` в запросе. Также в первом плане “Rows Removed by Filter: 37833” — явно неподходящий индекс. И где там “25 секунд”? В плане явно написано “Execution time: 11.571 ms”. Вы уверены что структура таблиц и индексы одинаковы и валидны?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2018, 21:23 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
vyegorov, Вы правы, первый план для запроса вместе с DISTINCT, но суть от этого не меняется. Время выполнения “Execution time: 11.571 ms” вместо 25 секунд, потому что это план запроса, который уже выполнил ранее и POSTGRES закэшировал результат и он выполняется 11 ms, первоначальный план Код: sql 1. 2. 3. 4. 5. 6. 7.
Структуры таблиц и индексов полностью идентичные. Данные одинаковые, если и есть отличия, то они минимальные. Как смотрите на то, чтобы удалить Index1? Будет ли во всех местах, где действительно нужен Index1, использоваться Index2 и не будет ли он тормозить эти запросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 01:16 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11, 1. Включите `track_io_timing` в конфиге и приведите вывод `EXPLAIN (analyze, buffers)` ещё раз. Есть большое подозрение что диски у вас совсем не тянут 2. Если есть проблема с распуханием таблиц и индексов, то: - надо сделать агрессивным автовакуум - убедится что хватает autovacuum_max_workers - проанализировать нагрузку на предмет наличия высоконагруженных таблиц (велосипедная очередь какая) и долгих отчётов в базе одновременно. если есть такое, то убрать долгие запросы на реплику с выключенным hot_standby_feedback и достаточным max_standby_streaming_delay - после этого избавиться от bloat-а — pgcompacttable / pg_repack / VACUUM FULL (хотя я бы репак-ом лучше прошел) - жестко контролировать длительность транзакций (не более 10 минут) через отстрел в кроне Агрессивный вакуум может опять-таки в диски упереться, что говорит о том, что надо думать о железе получше. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 01:33 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11потому что это план запроса, который уже выполнил ранее и POSTGRES закэшировал результат Нет у postgresql никакого кэша результатов. polin11первоначальный план Код: sql 1. 2. 3. 4. 5. 6. 7.
Сомнительно. Это весь план? Внимание на actual time и 100% shared hit ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 10:40 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
Разница между планами и временем выполнения соответственно начинается даже при запросе Код: sql 1. 2. 3.
План на проблемной базе Код: sql 1. 2. 3. 4. 5. 6.
план на тестовой базе Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 12:57 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11, А если сделать `REINDEX INDEX "Index1"` в проблемной базе?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2018, 20:09 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
Как можно скрыть оп планировщика поле Field2, чтобы использовался индекс по Fileld3. В запросе Код: sql 1. 2. 3.
В поле Field2 в нижнем регистре тип данных text Вариант 1: Код: sql 1. 2. 3.
Вариант 2: Код: sql 1. 2. 3.
Может есть варианты более оптимальные? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2018, 22:48 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
polin11 С аналогичной БД на другом сервере Код: sql 1. 2. 3. 4. 5. 6.
Используется Index2 по полям (Field2 с классом оператора varchar_pattern_ops, Field3), запрос выполнялся 50 миллисекунд дык у вас и тут индекс неправильный, переставьте порядок полей в индексе, опсы те же. и пж сильно полегчает с планированием ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2018, 20:21 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
qwwq, Прошу прощения, я неправильно написал. Порядок полей в индексе Index2 по полям (Field3, Field2). Для поля значения Field3 может соотв. несколько тысяч значений Field2. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2018, 22:12 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
попробуйте нащупать, что оно вам отдаст на Код: sql 1. 2. 3. 4. 5. 6.
и где в нынешней доке есть ойператор "~>=~" ? (совсем дока испортилась) нет ли там рядом модификатора для одербая в смысле сравнения паттерн-опсов (чтоб этому олегу оксана не дала) могабыть его на индекскан руками натянуть ? лимитом т.е. и вот этими вот сравнениями и неизвестным покуда одербаем для паттернопсов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2018, 09:14 |
|
SQL запросы стали подвисать
|
|||
---|---|---|---|
#18+
помогли следующие волшебные команды ALTER TABLE "Table1" ALTER COLUMN "Field2" SET STATISTICS 10000; VACUUM ANALYZE "Table1"; ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2018, 19:55 |
|
|
start [/forum/topic.php?fid=53&msg=39684448&tid=1995633]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 253ms |
0 / 0 |