Как настроить мой сервер Postgres? - PullRequest
0 голосов
/ 28 июня 2018

У меня сервер 4 ГБ с жестким диском 80 ГБ. Сайт работает очень медленно при переключении между страницами. Я проверял топ-процессы и процессы postgres с 70 -100% загрузкой процессора. обычно они не длятся более 4 секунд, а затем - новый. В моей таблице базы данных postgres у меня около 12 таблиц, но в одной из них около 90 миллионов записей (строк). Это таблица, вызывающая замедление. Но как мне настроить параметры postgres, такие как размер shared_buffer и все для оптимальной производительности?

Он работает на ОС Ubuntu 16, это веб-приложение django.

моя база данных называется roctim, она имеет размер 15 гигабайт (на данный момент, но увеличивается)

postgres=# select datname, pg_size_pretty(pg_database_size(oid)) as db_size from pg_database;

  datname  | db_size
-----------+---------
 template1 | 6857 kB
 template0 | 6857 kB
 postgres  | 6992 kB
 roctim    | 15 GB

размер моей самой большой таблицы составляет 15 ГБ, которая называется "Webapp_sensordata". Он собирает и хранит данные из таких машин, как дробилки, конвейеры и т. Д.

Когда я бегу select query from pg_stat_statements order by total_time desc;, Я получаю

SELECT "Webapp_sensordata"."id", "Webapp_sensordata"."timestamp",
       "Webapp_sensordata"."value", "Webapp_sensordata"."machine_id",
       "Webapp_sensordata"."type_id"
FROM "Webapp_sensordata"
WHERE "Webapp_sensordata"."machine_id" = ?
ORDER BY "Webapp_sensordata"."timestamp" DESC
LIMIT ?

и

SELECT "Webapp_sensordata"."id", "Webapp_sensordata"."timestamp",
       "Webapp_sensordata"."value", "Webapp_sensordata"."machine_id",
       "Webapp_sensordata"."type_id"
FROM "Webapp_sensordata"
WHERE ("Webapp_sensordata"."type_id" = ?
  AND "Webapp_sensordata"."machine_id" = ?)
ORDER BY "Webapp_sensordata"."timestamp" DESC
LIMIT ?

как два верхних запроса, они оба получают доступ к данным датчика большой таблицы.

Также мои shared_buffer и working_mem сейчас установлены по умолчанию (128 МБ и 4 МБ)

Когда я запустил EXPLAIN ANALYZE для второго запроса, показанного выше, я получил

QUERY PLAN
----------------------------------------------------------------------------- 
----------------------------------------------------------------------------- 
----------------------
Sort  (cost=62127.86..62135.64 rows=3111 width=24) (actual 
time=781.051..781.230 rows=2860 loops=1)
Sort Key: "timestamp" DESC
Sort Method: quicksort  Memory: 320kB
->  Index Scan using "Webapp_sensordata_machine_id_e353fc5a" on 
"Webapp_sensordata"  (cost=0.57..61947.37 rows=3111 width=24) (actual 
time=4.190..779.783 rows=2860 loops=1)
     Index Cond: (machine_id = 3)
     Filter: (type_id = 1)
     Rows Removed by Filter: 31440
Planning time: 4.572 ms
Execution time: 781.449 ms
(9 rows)

1 Ответ

0 голосов
/ 02 июля 2018

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

CREATE INDEX ON "Webapp_sensordata" (type_id, machine_id, timestamp);
...