osm2pgsql - 导入 o​​penstreetmaps planet 文件需要很长时间

osm2pgsql - importing of an openstreetmaps planet file takes very long

我已经将 Nominatim 安装到专用于 OSM 数据的服务器上,配置如下:CentOS 7 操作系统,2x Intel XEON CPU L5420 @ 2.50GHz(总共 8 CPU 内核) , 16 GB 内存和 2x2TB SATA 硬盘。

我已经根据 Nominatim 安装 wiki (http://wiki.openstreetmap.org/wiki/Nominatim/Installation#PostgreSQL_Tuning) 上的建议配置了 postgresql,考虑到我的机器只有 16 GB 而不是为这些配置推荐的 32 GB。我使用了以下东西:

shared_buffers = 1GB             # recommended for a 32GB machine was 2 GB
maintenance_work_mem = 4GB       # recommended for a 32GB macinhe was 8 GB
work_mem = 20MB                  # recommended for a 32GB machine was 50 MB
effective_cache_size = 10GB      # recommended for a 32GB machine was 24 GB
synchronous_commit = off
checkpoint_segments = 100
checkpoint_timeout = 10min
checkpoint_completion_target = 0.9
fsync = off
full_page_writes = off`

首先,我尝试导入一个小国家提取物(卢森堡),设置缓存大小为6000,使用utils中的setup.php文件,不到1小时导入成功。

其次,我删除了卢森堡的数据,并为另一个测试目的导入了大不列颠的国家/地区提取物,使用缓存大小为 8000,它也成功导入,大约 2-3 小时。

今天,我决定尝试导入整个 planet.pbf 文件,所以我删除了 postgresql 数据库,从官方镜像站点下载了一个 pbf 文件,并且 运行 缓存大小为 10000 的设置。事先,我已经阅读了一些基准测试,以模糊了解此操作需要多少时间和 space。

当导入开始时,我感到非常惊讶。节点的导入速度高达1095.6k/s,在我分析的benchmark(32GB内存机器)中,只有311.7k/s

但是当节点导入完成,开始导入路时,速度明显下降。正在以0.16k/s的速度导入方式(虽然是缓慢上升,但从0.05k/s开始,4小时后上升到上述值)。

我已停止导入,并尝试调整设置。我先分配了更高的缓存大小(12000),但没有成功,节点以非常高的速度导入,但方式保持在0.10-0.13k / s。然后我尝试分配一个新的交换文件(原来是 8GB,我已经分配了另一个 32GB 作为交换文件),但这也没有改变任何东西。最后,我编辑了 setup.php,将 --number-processes 从 1 更改为 6,并在从那里启动 osm2psql 时包含了 --slim 关键字,但没有任何改变。

现在我没主意了。这种速度下降正常吗?我应该将我的机器升级到推荐的内存吗?我认为 16GB 的 ram 对 pbf planet 来说足够了,我知道这台机器可能需要更多时间,然后是 32 GB,但这看起来非常多。如果整个星球的导入时间不超过 12-15 天,我会同意的,但现在看来,使用这些设置导入大约需要 2 个月,考虑到这是一个错误,这实在是太多了可能发生在任何地方,我必须重新开始整个导入过程。

任何可能导致此问题的想法,或者我可以尝试哪些其他调整来加快导入过程?

谢谢

我在使用 SATA 驱动器时遇到了类似的性能问题,当我将 SATA 驱动器替换为 SSD 驱动器时,导入速度从 0.02k/s 加速到 8.29k/s。现在我有一个非常慢的关系导入,速度为 0.01/s,所以我相信内存也是完整行星导入的一个重要因素,但我没有再次测试它。