172 похожих чатов

Выполняю один и тот же запрос select count(*) from campaign_logs;

на
1) локальном virtualbox 2CPU 4GB RAM (20 запросов подряд - оба ядра грузит на 100%
2) VPS DigitalOcean 4CPU 8GB RAM (20 запросов подряд - общая загрузка ядер порядка 60%)

в таблице 23 млн строк, настройки postgres дефолтные, разве что random_page_cost = 1

На локальной виртуалке запрос выполняется за 750мс
на VPS - 2200мс

почему такая разница?

8 ответов

9 просмотров

включите track_io_timing и покажите план запросов целиком и в текстовом виде

В текстовом виде покажите EXPLAIN (ANALYZE, BUFFERS, /*SETTINGS /* если это v12 */ */) запросов.

Stan- Автор вопроса
Yaroslav Schekin
В текстовом виде покажите EXPLAIN (ANALYZE, BUFFER...

локальный: Finalize Aggregate (cost=434856.28..434856.29 rows=1 width=8) (actual time=1438.982..1441.518 rows=1 loops=1) Buffers: shared hit=2592 read=311929 -> Gather (cost=434856.06..434856.27 rows=2 width=8) (actual time=1435.906..1441.503 rows=3 loops=1) Workers Planned: 2 Workers Launched: 2 Buffers: shared hit=2592 read=311929 -> Partial Aggregate (cost=433856.06..433856.07 rows=1 width=8) (actual time=1423.963..1423.964 rows=1 loops=3) Buffers: shared hit=2592 read=311929 -> Parallel Seq Scan on campaign_logs (cost=0.00..409989.05 rows=9546805 width=0) (actual time=0.019..999.813 rows=7638647 loops=3) Buffers: shared hit=2592 read=311929 "Settings: random_page_cost = '1'" Planning Time: 40.296 ms JIT: Functions: 8 Options: Inlining false, Optimization false, Expressions true, Deforming true Timing: Generation 0.521 ms, Inlining 0.000 ms, Optimization 0.272 ms, Emission 12.477 ms, Total 13.270 ms Execution Time: 1452.578 ms VPS: Finalize Aggregate (cost=297805.79..297805.80 rows=1 width=8) (actual time=2563.546..2572.621 rows=1 loops=1) Buffers: shared hit=3092 read=62622 -> Gather (cost=297805.58..297805.79 rows=2 width=8) (actual time=2563.441..2572.604 rows=3 loops=1) Workers Planned: 2 Workers Launched: 2 Buffers: shared hit=3092 read=62622 -> Partial Aggregate (cost=296805.58..296805.59 rows=1 width=8) (actual time=2540.214..2540.216 rows=1 loops=3) Buffers: shared hit=3092 read=62622 -> Parallel Index Only Scan using campaign_logs_pkey on campaign_logs (cost=0.44..272931.07 rows=9549802 width=0) (actual time=0.098..1780.596 rows=7638647 loops=3) Heap Fetches: 0 Buffers: shared hit=3092 read=62622 "Settings: random_page_cost = '1'" Planning Time: 1.353 ms JIT: Functions: 8 Options: Inlining false, Optimization false, Expressions true, Deforming true Timing: Generation 1.550 ms, Inlining 0.000 ms, Optimization 0.738 ms, Emission 12.045 ms, Total 14.333 ms Execution Time: 2604.355 ms

Stan- Автор вопроса
Виктор Егоров
включите track_io_timing и покажите план запросов ...

не могу пока включить: Query 1: ERROR: permission denied to set parameter "track_io_timing" :(

Stan
локальный: Finalize Aggregate (cost=434856.28..43...

Так, а на локальном точно такая же схема (в частности, есть ли индекс campaign_logs_pkey)? И неплохо бы посмотреть оценки альтернативных планов, т.е. c index-only scan на локальном, и seq.scan на VPS (путём выключения соотв. enable_*).

Stan- Автор вопроса
Yaroslav Schekin
Так, а на локальном точно такая же схема (в частно...

база 1:1, восстановлена из одного и того же дампа, после восстановления ничего не менялось вообще

Stan
база 1:1, восстановлена из одного и того же дампа,...

Там и там восстановлена? VACUUM ANALYZE выполнялся там и там (или просто выполните по этой таблице, если есть возможность / "чтоб не думать")? > путём выключения соотв. enable_* - как это сделать? См. SELECT name, setting, unit, context, short_desc FROM pg_settings WHERE name LIKE 'enable_%'; Описания там есть. В сессии выполняете, например, "SET enable_indexonlyscan = off;", потом запрос/explain. Чтобы вернуть к default — "RESET ALL;", если что.

Stan- Автор вопроса
Yaroslav Schekin
Там и там восстановлена? VACUUM ANALYZE выполнялся...

Там и там восстановлена? - ДА, буквально перед запросом по настройкам - посмотрю, сейчас бежать пора, спасибо!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
22
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта