Запрос PostgreSQL очень медленный после изменения размера диска - PullRequest
0 голосов
/ 07 июня 2019

Я использую PostgreSQL DB для своей производственной базы данных, и недавно я изменил размер дискового тома моего производственного сервера.

И я заметил, что запрос к определенной таблице (~ 10K записей) чрезвычайно медленный,

    EXPLAIN (analyze, buffers, timing) SELECT count(id) FROM markets_sales WHERE volume>0;
                                                             QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=1844791.17..1844791.18 rows=1 width=4) (actual time=79842.776..79842.777 rows=1 loops=1)
   Buffers: shared hit=2329 read=1842313
   ->  Seq Scan on markets_sales  (cost=0.00..1844782.68 rows=3399 width=4) (actual time=8139.929..79842.043 rows=6731 loops=1)
         Filter: (volume > '0'::double precision)
         Rows Removed by Filter: 4523
         Buffers: shared hit=2329 read=1842313
 Planning time: 0.110 ms
 Execution time: 79842.809 ms

Но аналогичный запрос для другой таблицы (~ 2K записей) идеален.

EXPLAIN ANALYZE SELECT count(id) FROM markets_volume WHERE percent>0;
                                                      QUERY PLAN
----------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=1368.87..1368.88 rows=1 width=4) (actual time=1.866..1.866 rows=1 loops=1)
   ->  Seq Scan on markets_volume  (cost=0.00..1365.59 rows=1312 width=4) (actual time=0.023..1.751 rows=1313 loops=1)
         Filter: (h24_change > '0'::double precision)
         Rows Removed by Filter: 1614
 Planning time: 0.093 ms
 Execution time: 1.903 ms
(6 rows)

Ответы [ 2 ]

3 голосов
/ 07 июня 2019

Количество буферов (= блоков, считанных с диска) слишком велико только для 11254 строк.

Так что, скорее всего, ваши таблицы раздуты . Это можно исправить, используя:

vacuum full analyze markets_sales;

Обратите внимание, что для оператора потребуется эксклюзивная блокировка таблицы (что блокирует любой доступ для чтения или записи).

0 голосов
/ 07 июня 2019

Попробуйте использовать медленный журнал запросов PostgreSQL.В конфигурации по умолчанию медленный журнал запросов неактивен.Вы должны включить его из файла postgresql.conf.Это дает вам более подробную информацию, в чем проблема.Тогда вы можете принять решение по проблеме.

...