【发布时间】:2016-03-08 10:35:15
【问题描述】:
我已将 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。之前,我已经阅读了一些基准,以模糊了解此操作需要多少时间和空间。
当导入开始时,我感到非常惊讶。节点的导入速度高达 1095.6k/s,在我分析过的基准(32GB ram 机器)中,它只有 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 的内存足以满足行星 pbf 的需求,我知道这台机器可能需要更多时间,然后是 32GB,但这似乎非常多。如果整个星球的导入时间不超过 12-15 天,我可以接受,但现在看来,使用这些设置,导入需要大约 2 个月,考虑到错误,这实在是太多了可能发生在任何地方,我必须重新开始整个导入过程。
有什么可能导致此问题的想法,或者我可以尝试哪些其他调整来加快导入过程?
谢谢
【问题讨论】:
标签: postgresql nominatim osm2pgsql