Duy*_*ynh 3 postgresql centos centos7 postgresql-9.5
我遇到了 PostgreSQL 数据写入非常慢的问题。
我用 Java(使用 JDBC)开发了我的应用程序,将数据插入到 PostgreSQL 数据库中。它在我们的远程开发服务器上运行良好。但是,当我将其部署到生产服务器后,却出现了问题。
PostgreSQL在生产服务器上的插入速度仅为~150 records/s for 200000K records,而在~1000 records/s for the same data set开发服务器上。
postgresql.conf首先,我尝试按如下方式更改配置:
effective_cache_size = 4GB
max_wal_size = 2GB
work_mem = 128MB
shared buffers = 512MB
Run Code Online (Sandbox Code Playgroud)
我更改配置并重新启动后,只影响查询速度,而插入速度没有变化(~150条记录/秒)。
我检查了我的服务器内存信息,有大量可用内存~4GB。插入器仅使用 8GB 的 0.5% (~40MB)。
所以我的问题是:
这是存储磁盘的问题,例如SSD和HDD还是虚拟和物理等?为什么我更改了配置,插入速度还是很慢?有什么办法可以提高插入速度吗?
注意:该问题与插入查询结构无关。我在其他地方相同的条件下使用了相同的查询(我以相同的方式在两台服务器中设置了环境)。我不知道为什么开发服务器(4GB)比生产服务器(8GB)工作得更好。
唯一对INSERT性能有影响的参数是max_wal_size。高值可以防止频繁的检查点。
在数据库服务器上使用iostat -x 1来查看磁盘的繁忙程度。如果它们非常繁忙,则可能存在 I/O 瓶颈。也许您的测试服务器上的 I/O 子系统更好?
INSERT如果您在许多小事务中运行s,您可能会受到fsyncWAL 的瓶颈。症状是磁盘繁忙,没有执行太多 I/O。
在这种情况下,将INSERTs 分批放入较大的事务中。您观察到的差异可能是由于不同的配置造成的:也许您在测试服务器上设置了synchronous_commit或 (可怕的说法!) 。fsyncoff
| 归档时间: |
|
| 查看次数: |
6589 次 |
| 最近记录: |