如何调整我的Postgres服务器?

时间:2018-06-28 13:34:10

标签: postgresql postgresql-9.5

我有一个具有80GB硬盘的4 GB服务器。在页面之间切换时,该网站的速度确实很慢。我检查了70 -100%cpu使用率的顶级进程和postgres进程不断弹出。他们通常不会持续超过4秒钟,然后是新的。在我的postgres数据库表中,我大约有12个表,但其中之一有大约9000万个条目(行)。这是导致速度下降的表。但是,我该如何调整我的postgres参数(例如shared_buffer的大小)以及所有这些参数以获得最佳性能?

它可以在Ubuntu 16 OS和Django Web应用程序上运行。

我的数据库名称是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 GB,称为“ 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设置为现在的默认值(128mb和4mb)

当我运行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 :(得分:1)

如果可以通过多列索引在索引扫描期间同时处理条件和排序,则查询会更快:

print_r( $woocommerce )