提高 PostgreSQL 的数据插入速度
Increase data insert speed of PostgreSQL
我遇到了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
我更改配置重启后,只影响查询速度,插入速度没有变化(~150records/s)。
我检查了我的服务器内存信息,有很多空闲内存~4GB。插入器仅使用 8GB (~40MB) 的 0.5%。
所以我的问题是:
这是存储盘的问题,比如SSD和HDD或者虚拟机
和身体等?为什么我改了配置,插入速度还是很慢?有什么办法
为了提高插入速度?
注意:问题与插入查询结构无关。
我在其他地方的相同条件下使用了相同的查询(我设置了一个
2台服务器中的环境以相同的方式)。我不知道为什么
DEVELOPMENT 服务器 (4GB) 比 PRODUCTION 服务器运行得更好
(8GB).
您的唯一一个对 INSERT
性能有影响的参数是 max_wal_size
。高值可防止频繁检查点。
在数据库服务器上使用 iostat -x 1
查看您的磁盘有多忙。如果他们很忙,您可能 I/O 遇到了瓶颈。也许您的测试服务器上的 I/O 子系统更好?
如果您在许多小事务中是 运行 个 INSERT
,您可能会受到 fsync
到 WAL 的瓶颈。症状是磁盘繁忙,执行的内容不多 I/O。
在这种情况下,将 INSERT
分批处理成较大的事务。您观察到的差异可能是由于不同的配置造成的:也许您在测试服务器上将 synchronous_commit
或(可怕的 dictu!)fsync
设置为 off
。
我遇到了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
我更改配置重启后,只影响查询速度,插入速度没有变化(~150records/s)。
我检查了我的服务器内存信息,有很多空闲内存~4GB。插入器仅使用 8GB (~40MB) 的 0.5%。
所以我的问题是:
这是存储盘的问题,比如SSD和HDD或者虚拟机 和身体等?为什么我改了配置,插入速度还是很慢?有什么办法 为了提高插入速度?
注意:问题与插入查询结构无关。 我在其他地方的相同条件下使用了相同的查询(我设置了一个 2台服务器中的环境以相同的方式)。我不知道为什么 DEVELOPMENT 服务器 (4GB) 比 PRODUCTION 服务器运行得更好 (8GB).
您的唯一一个对 INSERT
性能有影响的参数是 max_wal_size
。高值可防止频繁检查点。
在数据库服务器上使用 iostat -x 1
查看您的磁盘有多忙。如果他们很忙,您可能 I/O 遇到了瓶颈。也许您的测试服务器上的 I/O 子系统更好?
如果您在许多小事务中是 运行 个 INSERT
,您可能会受到 fsync
到 WAL 的瓶颈。症状是磁盘繁忙,执行的内容不多 I/O。
在这种情况下,将 INSERT
分批处理成较大的事务。您观察到的差异可能是由于不同的配置造成的:也许您在测试服务器上将 synchronous_commit
或(可怕的 dictu!)fsync
设置为 off
。