Немного расскажу как я ускорил обработку планеты.
Так как мой GIS проект из разряда "хобби", на которое бюджет не предусмотрен, я столкнулся с жесткой нехваткой средств.
При выборе что купить - или 8 гигов ОЗУ (у меня только 4 и занимают все слоты) или быстрый SSD чаша весов склонилась в сторону SSD - дешевле.
Денег хватило только на бу-шный 80Гб SSD 320 серии...
Инсталляция прошла успешно

И я стал осваивать ZFS.
На удивление рулежка ZFS легка и приятна!
А теперь немного сухой конфигурации:
PC: Core2Duo 6600
RAM: 4Gb
SSD: 80Gb
OS: FreeBSD-Amd (Это кодовое обозначение x64)
Тюним:
1) /boot/loader.conf
Код: Выделить всё
# PostgreSQL
kern.ipc.semmns="1024"
kern.ipc.semmni="256"
# ZFS
aio_load="yes"
vm.kmem_size="512M"
vm.kmem_size_max="512M"
vfs.zfs.arc_max="64M"
vfs.zfs.vdev.cache.size="5M"
vfs.zfs.prefetch_disable="1"
vfs.zfs.txg.timeout="5"
2) /etc/sysctl.conf
Код: Выделить всё
# shared memory
kern.ipc.shm_use_phys=1
kern.ipc.shmall=393216
kern.ipc.shmmax=1610612737
3) Тюним ZFS:
Код: Выделить всё
zpool create DB /dev/SSD
zfs create DB/pgsql
zfs set compression=on DB/pgsql
zfs set atime=off DB/pgsql
4) Тюним Postgres (postgresql.conf)
Код: Выделить всё
shared_buffers = 1024MB
work_mem = 128MB
maintenance_work_mem = 256MB
fsync = off
synchronous_commit = off
wal_sync_method = fsync
checkpoint_segments = 16
silent_mode = on
autovacuum = off
xlog базы данных вынес на отдельный диск и сделал симлинк
5) PostGIS 1.5
6) bzcat /home/PlanetOSM/planet-110928.osm.bz2 | osm2pgsql -d gis -U gis -m -s -H localhost /dev/stdin
После суток работы этой адской строки наблюдаю ситуацию:
Processing: Node(1217841k 85.1k/s) Way(72509k 1.30k/s) Relation(0 0.00/s)
Не зря я сделал компрессионный раздел - БД сейчас занимает 105 гигабайт в FS и 54 гигабайта на SSD. Еще доступно 22 гигабайта SSD (примерно 40 гигабайт FS).
Что было не дотюнено:
По умолчанию размер блока в ZFS получился 128 килобайт. Это много для БД с большим количеством рандомных выборок малого размера. Думаю, что результат был бы лучшим, если бы я задал размер блока в пределах 32 килобайт.
Ну и как всегда: Процессор курит! idle 50..60 процентов.
iostat на SSD показывает 600..900 tps и 30..50 Мб/с
С почтением,
Илья Винокуров.