PostgreSQL 高磁盘 I/O

tob*_*spr 5 postgresql performance performance-testing postgresql-performance

我正在评估 PostgreSQL 作为 Oracle 的替代品。我有一个包含 533 个表的数据库,其中最多包含 250,000 个条目。

\n\n

为了进行性能比较,我在 Oracle 和 PostgreSQL 上构建了数据库。

\n\n

然而,PostgreSQL 速度慢得多,并且它在 RAM 中存储的内容不多,而是具有大量的磁盘 I/O。

\n\n

我的性能测试:

\n\n
    \n
  • 将 50,000 个条目插入大约 250 列的表中
  • \n
  • 选择所有这些,包括不同表上的联接
  • \n
  • 更新附加“A”的字符串字段
  • \n
  • 删除引用表中的条目,这会导致所有条目被删除(在删除级联上)
  • \n
\n\n

我的系统配置:

\n\n
    \n
  • Windows 7、2 Xeons \xc3\xa0 8 核、32GB RAM、256GB SSD
  • \n
  • PostgreSQL 9.6
  • \n
  • 甲骨文 XE 11
  • \n
  • 玛丽亚数据库 10.2
  • \n
\n\n

以下是我测量的性能(5 次运行的平均值):

\n\n

比较

\n\n

NoTriggers 版本以ALTER TABLE x DISABLE ALL TRIGGERS.

\n\n

从图表中可以看出,PostgreSQL 并没有真正使用可用的 ram。\n查看资源监视器,它确实使用了高磁盘 io:

\n\n

PostgreSQL

\n\n

到目前为止我已经尝试过:

\n\n
    \n
  • 增加effective_cache_size至 16 GB
  • \n
  • 环境autovacuumoff
  • \n
  • 环境max_connections为 3
  • \n
  • 环境shared_buffers为 3GB
  • \n
  • 环境work_mem为 512MB
  • \n
  • 环境maintenance_work_mem为 64MB
  • \n
  • 环境synchronous_commitoff
  • \n
  • 均匀设置fsyncoff
  • \n
\n\n

这些对磁盘 IO 或内存使用以及性能都没有任何影响。

\n\n

我缺少什么?有我错过的标志吗?Windows 作为 PostgreSQL 的主机就这么糟糕吗?

\n