小编Dan*_*ons的帖子

配置 PostgreSQL 以提高写入性能

我的一台 PostgreSQL 服务器托管了几个 (1-3) 数据库,这些数据库接收恒定的数据流。数据不是特别结构化,它相当于当前时间和特定时刻的各种观察数据。数据速率相当高;一个数据库每天大约可以计算出 1 GB 的数据,而另一个数据库则大约是每天 1 GB 的数据。我不希望这个比率会增加。读取性能的优先级要低得多,目前是可以接受的。

在日志中,我有这条消息:

LOG:  checkpoints are occurring too frequently (15 seconds apart)
HINT:  Consider increasing the configuration parameter "checkpoint_segments".
Run Code Online (Sandbox Code Playgroud)

该值当前设置为 16,这是由 提供的pgtune

我应该考虑哪些设置来提高写入性能?我宁愿保持尽可能多的安全。考虑到传入的数据量,只要大部分数据完好无损,我可以接受在故障中丢失一些最近的数据。

编辑:我现在使用 PostgreSQL 9.0,但我计划升级到 9.1。我不会发布硬件细节,因为虽然我承认它们的重要性,但我最终将需要在具有非常不同硬件的几台机器上进行这种优化。如果硬件对答案至关重要,请给我一般信息,以便我可以将答案应用于具有不同硬件配置的机器。

postgresql performance

30
推荐指数
3
解决办法
4万
查看次数

删除索引似乎不会向操作系统释放空间。它可以?

我正在运行 PostgreSQL 9.1。我注意到非常糟糕的索引占用了我服务器上的大量空间,例如:

evlampts=# SELECT 
  pg_size_pretty(pg_relation_size('mcdata_2011_07')) AS relation_size, 
  pg_size_pretty(pg_total_relation_size('mcdata_2011_07')) AS total_relation_size, 
  pg_size_pretty(pg_indexes_size('mcdata_2011_07')) AS indexes_size;

 relation_size | total_relation_size | indexes_size
---------------+---------------------+--------------
 43 GB         | 100 GB              | 57 GB
(1 row)
Run Code Online (Sandbox Code Playgroud)

然后我可以看到,虽然其中很大一部分是主键,但我在一个索引中有 11 GB,在另一个索引中有 16 GB:

evlampts=# SELECT
  pg_size_pretty(pg_relation_size('mcdata_2011_07_timestamp_idx')) AS timestamp_idx_size, 
  pg_size_pretty(pg_relation_size('mcdata_2011_07_host_idx')) AS host_idx_size;

 timestamp_idx_size | host_idx_size
--------------------+---------------
 11 GB              | 16 GB
(1 row)
Run Code Online (Sandbox Code Playgroud)

如果我继续删除这些索引,我看不到操作系统中磁盘空间的显着改善:

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0              1.8T  1.8T   32G  99% /export/home/lando

$ psql evlampts
evlampts=# drop index mcdata_2011_07_host_idx;
DROP INDEX …
Run Code Online (Sandbox Code Playgroud)

postgresql vacuum

4
推荐指数
1
解决办法
2810
查看次数

标签 统计

postgresql ×2

performance ×1

vacuum ×1