RU:Osm2pgsql/benchmarks
Исходная статья: Osm2pgsql/benchmarks. Вы можете закончить перевод.
Если вы знаете английский, то можете помочь нам, переведя часть оригинальной статьи. Общие сведения о переводе статей на русский язык можно найти здесь.
Введение
Бенчмарки osm2pgsql необходимы пользователям для сравнения, поскольку импорт данных OSM сильно зависит от конфигурации аппаратного и программного обеспечения. Импорт всей планеты может длиться дни даже на мощной десктопной машине. Импорт части файла планеты занимает сравнительно меньше времени, и, при возможности, должен быть использован вместо импорта планеты целиком.
Что влияет на длительность импорта?
Примерный список факторов, которые влияют на время, занимаемое импортом.
- Количество доступной RAM
- Параметры конфигурации PostgreSQL
- Скорость жёсткого диска
- Используемая операционная система и её разрядность (32/64)
- программа чтения входного файла и формат входного файла
- экспериментальный 'pritive' XML парсер читает OSM XML примерно на 30% быстрее стандартного 'libxml2'
- программа чтения 'pbf' читает файл OSM PBF примерно в два раза быстрее, чем 'libxml2' парсит такой же файл OSM XML
Пример вывода
Следующий пример показывает вывод osm2pgsql при импорте файла планеты. Команда time в linux, используемая в этом примере, фиксирует время, в течение которого работала osm2pgsql. Обратите внимание, что строки NOTICE нормальны при импорте в пустую базу данных.
~/osm2pgsql$ time osm2pgsql -s -v -U mapper -S ./default.style -d gis -C 3000 ../planet/planet-100324.osm.bz2
osm2pgsql SVN version 0.69-20672
Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
NOTICE: table "planet_osm_point" does not exist, skipping
NOTICE: table "planet_osm_point_tmp" does not exist, skipping
Setting up table: planet_osm_line
NOTICE: table "planet_osm_line" does not exist, skipping
NOTICE: table "planet_osm_line_tmp" does not exist, skipping
Setting up table: planet_osm_polygon
NOTICE: table "planet_osm_polygon" does not exist, skipping
NOTICE: table "planet_osm_polygon_tmp" does not exist, skipping
Setting up table: planet_osm_roads
NOTICE: table "planet_osm_roads" does not exist, skipping
NOTICE: table "planet_osm_roads_tmp" does not exist, skipping
Mid: pgsql, scale=100, cache=3000MB, maxblocks=384001*8192
Setting up table: planet_osm_nodes
NOTICE: table "planet_osm_nodes" does not exist, skipping
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "planet_osm_nodes_pkey" for table "planet_osm_nodes"
Setting up table: planet_osm_ways
NOTICE: table "planet_osm_ways" does not exist, skipping
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "planet_osm_ways_pkey" for table "planet_osm_ways"
Setting up table: planet_osm_rels
NOTICE: table "planet_osm_rels" does not exist, skipping
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "planet_osm_rels_pkey" for table "planet_osm_rels"
Reading in file: ../planet/planet-100324.osm.bz2
Processing: Node(574797k) Way(43465k) Relation(87k)
excepton caught processing way id=110802
excepton caught processing way id=110803
Processing: Node(574797k) Way(43465k) Relation(465k)
Node stats: total(574797076), max(673005476)
Way stats: total(43465572), max(53189409)
Relation stats: total(465800), max(533629)
Going over pending ways
processing way (12179k)
Going over pending relations
node cache: stored: 386841238(67.30%), storage efficiency: 98.38%, hit rate: 65.63%
Committing transaction for planet_osm_roads
Committing transaction for planet_osm_polygon
Committing transaction for planet_osm_line
Sorting data and creating indexes for planet_osm_polygon
Sorting data and creating indexes for planet_osm_roads
Sorting data and creating indexes for planet_osm_line
Committing transaction for planet_osm_point
Sorting data and creating indexes for planet_osm_point
Completed planet_osm_point
Completed planet_osm_roads
Completed planet_osm_polygon
Stopping table: planet_osm_nodes
Stopping table: planet_osm_rels
Stopping table: planet_osm_ways
Building index on table: planet_osm_rels
Stopped table: planet_osm_nodes
Building index on table: planet_osm_ways
Stopped table: planet_osm_rels
Completed planet_osm_line
Stopped table: planet_osm_ways
real 2985m27.269s
user 327m47.240s
sys 35m32.480s
Разбор и выяснение прогресса
Если вы желаете знать, насколько продвинулся импорт, посмотрите статистику, и сравните её с разделом вывода "Processing: Node". Помните, что отношения обрабатываются приблизительно в 10 раз медленнее линий (которые обрабатываются в 10 раз медленнее точек). В моем случае, точки обрабатывались со скоростью 40.8k/s, линии - 0.13k/s и отношения - ..k/s. Also, closing a table take approximately as long as importing the data. Так что если вы закончили с точками, значит около 1/6 всего импорта уже позади.
Benchmarks
List of benchmarks contributed by users. Currently simply using time command to return length of time' it takes osm2pgsql task to complete. If you do not have time available please provide some other meaningful metric. Better organization and formatting standard for this section is needed.
Planet / 8GB DKB
- Import Description: planet file (planet-100324.osm.bz2)
- RAM: 8GB
- CPU: Xeon X3220 2.4GHz
- DISK(s): 1TB Western Digital Black / 500GB partitions
- OS: Ubuntu 9.10 64 bit
- osm2pgsql SVN version 0.69-20672
- slim mode
- --cache 3000
- time osm2pgsql -s -v -U mapper -S ./default.style -d gis -C 3000 ../planet/planet-100324.osm.bz2
- PostgreSQL 8.4.2
- shared_buffers = 128MB
- maintenance_work_mem = 256MB
- checkpoint_segments = 20
- autovacuum = off
- PostGIS 1.5
- Results: (49.75 Hours)
real 2985m27.269s user 327m47.240s sys 35m32.480s
Planet / 32GB rw
- Import Description: planet file (planet-100414.osm.bz2)
- RAM: 32GB
- CPU: 2 x Xeon X5520 2.26GHz
- DISK(s): 2 x 1TB 7200 rpm SATA2 drives; RAID0
- OS: Ubuntu 10.04 (Lucid Lynx) 64 bit
- osm2pgsql SVN version 0.69-20937
- slim mode
- --cache 4096
- time ./osm2pgsql -S default.style -C 4096 --slim -d gis /home/nerd/planet/planet-100414.osm.bz2
- PostgreSQL 8.4.3
- shared_buffers = 128MB
- maintenance_work_mem = 4096MB
- checkpoint_segments = 20
- autovacuum = off
- PostGIS 1.5
- Results: (20.6 hours)
real 1236m30.801s user 272m56.090s sys 15m6.180s
sly's benchmark 05/2010 (influence of SSD, software RAID and memory on import and diffs)
Benchs :
- Computer A, : 2GB MEMORY / 2 SATA SATA magnétic drives Software RAID 0 (10000rpm)
- Computer B, (tests): 32Go RAM / 2 SATA SATA magnétic drives Software RAID 1 (10000rpm)
- Computer C, (new): 8Go RAM / 2 SATA SSD drives RAID 0 (INTEL SSDSA2M080)
Software are always the same : default lenny 64bits packages (postgres 8.3 and osm2pgsql from SVN of 05/2010) The osm2pgsql style file is an home made one, so hard to compare to other's benchmarks, especially it has the -x switch to import timestamp which prooved to be extremely disk unfriendly
- case 1) geofabrik europe.osm.bz2 import
($/home/ressource-for-osm/osm2pgsql/osm2pgsql -C 1200 -s -S ./style -G -x -m -d gis europe.osm.bz2)
- A: ~7 days
- B: ~3 days (2.5 days with -C 16000)
- C: 8 hours
- case 2) Mean minute diff import time (mean value on 24 consecutive hours)
($time /home/ressource-for-osm/osm2pgsql/osm2pgsql -C 400 --bbox -27,31,50,72 -e 18 -o./regeneration_old_tiles/expire_file_list -x -G -a -s -S ./default.style -m -d gis temporaire.osc)
- A:~50secondes
- B:~30secondes
- C:~3secondes
Computer B, beside having slower storage due to RAID 1 proved itself faster, probably helped by the well handled Memory cache of the linux kernel.
DELL® PowerEdge R210
- Import Description: planet file (planet-101020.osm.bz2)
- RAM: 8GB
- CPU: Intel(R) Xeon(R) CPU L3426 @ 1.87GHz
- DISK(s): 1,7TB
- OS: Debian 64
- osm2pgsql : SVN version 0.69
- time osm2pgsql -S beciklo.style -G -s -v -m --bbox -27,31,50,72 -d gis -C 3072 planet-*.osm.bz2
- PostgreSQL 8.4.5
- shared_buffers = 512MB
- maintenance_work_mem = 512MB
- checkpoint_segments = 20
- autovacuum = off
- PostGIS 1.5
- Results: (4,45 days)
real 6419m44.318s user 634m29.431s sys 167m56.762s
Dedibox pro : DELL® PowerEdge R210
- Import Description: planet file (07/07/2011)
- RAM: 16GB
- CPU: Intel(R) Xeon(R) CPU L3426 @ 1.87GHz (x8)
- OS: Debian 64
- osm2pgsql : 0.69+r20104-2 (squeeze debian package)
- time osm2pgsql -S mapnik/Beciklo/style/Becyklo.style -G -s -v -m -d osm -C 10240 planet-latest.osm.bz2
- PostgreSQL 8.4.8
- shared_buffers = 1024MB
- maintenance_work_mem = 512MB
- checkpoint_segments = 20
- autovacuum = on
- PostGIS 1.5.1
- Results: 1 day 16 h ...
real 2420m15.421s user 830m9.141s sys 19m51.334s
custom i7 system
- Import Description: planet file (11/09/2011)
- RAM: 12GB
- CPU: Intel(R) Core(TM) i7 CPU 960 @ 3.20GHz
- OS: Ubuntu 11.10 x86_64
- osm2pgsql : osm2pgsql SVN version 0.70.5 (ubuntu package)
- time osm2pgsql -d osm -S /usr/share/osm2pgsql/default.style -G -v -m -s -K -C 8192 planet-111109.osm.bz2
- PostgreSQL 9.1
- shared_buffers = 1024MB
- maintenance_work_mem = 2048MB
- checkpoint_segments = 20
- autovacuum = off
- PostGIS 1.5.3 (ubuntu package)
- Results: 5 days ...
real 7211m6.191s user 595m47.626s sys 73m32.200s
Hetzner : Root Server EX 4
- Import Description: planet file (2011-12-29)
- RAM: 16GB
- CPU: Intel® Core™ i7-2600 Quad-Core
- OS: Ubuntu 11.10 x86_64
- osm2pgsql SVN version 0.80.0 (32bit id space)
- time osm2pgsql --create --database gis --username osm --prefix planet --slim --cache 2048 --hstore planet-latest.osm.bz2
- PostgreSQL 9.1.1
- shared_buffers = 128MB
- maintenance_work_mem = 256MB
- checkpoint_segments = 20
- autovacuum = off
- PostGIS 1.5 (came with PostgreSQL)
- Results: 7.28 days
real 10483m29.951s user 640m39.706s sys 49m43.398s