Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve DB Indexes and Fix Deferred Index Logging in Compact DB Mode #245

Merged
merged 4 commits into from
Jun 2, 2022

Conversation

bbilger
Copy link
Contributor

@bbilger bbilger commented May 31, 2022

  1. Use "primary key wihout rowid" on tiles_shallow (compact DB) which results in a clustered index which reduces the file size and improves read as well as write performance. See [BUG] --defer-mbtiles-index-creation does not apply to --compact-db #243
  2. In deferred and compact DB mode log the correct statement to manually create the index.
  3. Move the index creation into Mbtiles#createTables.
  4. enable the compact db mode by default
  5. Rename the CLI switch --defer-mbtiles-index-creation to --skip-mbtiles-index-creation - code evolved and index creation is no longer deferred until after writing but skipped entirely. Let me know if you are not okay with this change, then I'll revert that commit.
Here are some results on experimenting with PK with and without rowid, and unique on tiles and tiles_shallow
NOT compact - tiles unique
0m0:06:07 INF - 	mbtiles          1m12s cpu:10m46s gc:4s avg:9
0m0:06:07 INF - 	  read    1x(9% 7s wait:1m done:3s)
0m0:06:07 INF - 	  encode 11x(68% 49s wait:14s done:3s)
0m0:06:07 INF - 	  write   1x(59% 42s sys:6s wait:24s)
0m0:06:07 INF - ----------------------------------------
0m0:06:07 INF - 	features	3.6GB
0m0:06:07 INF - 	mbtiles	3.1GB


NOT compact - tiles primary key with rowid
0m0:06:09 INF - 	mbtiles          1m11s cpu:10m44s gc:4s avg:9
0m0:06:09 INF - 	  read    1x(10% 7s wait:59s done:3s)
0m0:06:09 INF - 	  encode 11x(68% 48s wait:14s done:3s)
0m0:06:09 INF - 	  write   1x(58% 41s sys:5s wait:25s)
0m0:06:09 INF - ----------------------------------------
0m0:06:09 INF - 	features	3.6GB
0m0:06:09 INF - 	mbtiles	3.1GB


NOT compact - tiles primary key without rowid
0m0:06:12 INF - 	mbtiles          1m20s cpu:11m13s gc:4s avg:8.4
0m0:06:12 INF - 	  read    1x(9% 7s wait:1m8s done:4s)
0m0:06:12 INF - 	  encode 11x(61% 49s wait:21s done:4s)
0m0:06:12 INF - 	  write   1x(68% 55s sys:6s wait:20s)
0m0:06:12 INF - ----------------------------------------
0m0:06:12 INF - 	features	3.6GB
0m0:06:12 INF - 	mbtiles	3.3GB

compact - tiles_shallow unique
0m0:06:02 INF - 	mbtiles          1m9s cpu:10m53s gc:4s avg:9.4
0m0:06:02 INF - 	  read    1x(9% 6s wait:59s done:3s)
0m0:06:02 INF - 	  encode 11x(71% 49s wait:11s done:3s)
0m0:06:02 INF - 	  write   1x(54% 38s sys:4s wait:26s)
0m0:06:02 INF - ----------------------------------------
0m0:06:02 INF - 	features	3.6GB
0m0:06:02 INF - 	mbtiles	1.7GB


compact - tiles_shallow primary key with rowid
0m0:06:05 INF - 	mbtiles          1m9s cpu:10m48s gc:4s avg:9.3
0m0:06:05 INF - 	  read    1x(10% 7s wait:58s done:3s)
0m0:06:05 INF - 	  encode 11x(70% 49s wait:11s done:3s)
0m0:06:05 INF - 	  write   1x(54% 38s sys:4s wait:26s)
0m0:06:05 INF - ----------------------------------------
0m0:06:05 INF - 	features	3.6GB
0m0:06:05 INF - 	mbtiles	1.7GB


compact - tiles_shallow primary key without row id
0m0:06:02 INF - 	mbtiles          1m7s cpu:10m39s gc:4s avg:9.6
0m0:06:02 INF - 	  read    1x(10% 7s wait:56s done:2s)
0m0:06:02 INF - 	  encode 11x(72% 48s wait:10s done:2s)
0m0:06:02 INF - 	  write   1x(51% 34s sys:3s wait:27s)
0m0:06:02 INF - ----------------------------------------
0m0:06:02 INF - 	features	3.6GB
0m0:06:02 INF - 	mbtiles	1.3GB


BenchmarkMbtilesRead

=> "australia-compact-unique0.mbtiles" to "australia-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 49.687799812581176%
=> "australia-not-compact-unique0.mbtiles" to "australia-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 53.854178489283925%

0m0:00:12 INF - working on australia-compact-pk-without-rowid0.mbtiles
0m0:00:46 INF - readOperationsPerSecondStats: DoubleSummaryStatistics{count=10, sum=1989993.185451, min=197608.016769, average=198999.318545, max=200026.463181}
0m0:00:46 INF - working on australia-compact-pk-with-rowid0.mbtiles
0m0:01:35 INF - readOperationsPerSecondStats: DoubleSummaryStatistics{count=10, sum=1335755.139245, min=132923.920003, average=133575.513925, max=134438.289160}
0m0:01:35 INF - working on australia-compact-unique0.mbtiles
0m0:02:24 INF - readOperationsPerSecondStats: DoubleSummaryStatistics{count=10, sum=1329429.110417, min=132805.652420, average=132942.911042, max=133152.816498}
0m0:02:24 INF - working on australia-not-compact-pk-without-rowid0.mbtiles
0m0:03:13 INF - readOperationsPerSecondStats: DoubleSummaryStatistics{count=10, sum=1348371.188745, min=134128.132977, average=134837.118874, max=135565.023329}
0m0:03:13 INF - working on australia-not-compact-pk-with-rowid0.mbtiles
0m0:04:04 INF - readOperationsPerSecondStats: DoubleSummaryStatistics{count=10, sum=1290563.540387, min=128052.278996, average=129056.354039, max=129821.923011}
0m0:04:04 INF - working on australia-not-compact-unique0.mbtiles
0m0:04:54 INF - readOperationsPerSecondStats: DoubleSummaryStatistics{count=10, sum=1293428.105100, min=128693.712996, average=129342.810510, max=131027.014826}
0m0:04:54 INF - diffs
0m0:04:54 INF - "australia-not-compact-pk-with-rowid0.mbtiles" to "australia-not-compact-unique0.mbtiles": avg read operations per second improved by 0.22196231516832654%
0m0:04:54 INF - "australia-not-compact-pk-with-rowid0.mbtiles" to "australia-compact-unique0.mbtiles": avg read operations per second improved by 3.011519294762124%
0m0:04:54 INF - "australia-not-compact-pk-with-rowid0.mbtiles" to "australia-compact-pk-with-rowid0.mbtiles": avg read operations per second improved by 3.501694991726609%
0m0:04:54 INF - "australia-not-compact-pk-with-rowid0.mbtiles" to "australia-not-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 4.479256274398111%
0m0:04:54 INF - "australia-not-compact-pk-with-rowid0.mbtiles" to "australia-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 54.195676785841954%
0m0:04:54 INF - "australia-not-compact-unique0.mbtiles" to "australia-compact-unique0.mbtiles": avg read operations per second improved by 2.7833789272868756%
0m0:04:54 INF - "australia-not-compact-unique0.mbtiles" to "australia-compact-pk-with-rowid0.mbtiles": avg read operations per second improved by 3.272469028539362%
0m0:04:54 INF - "australia-not-compact-unique0.mbtiles" to "australia-not-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 4.247865299066731%
0m0:04:54 INF - "australia-not-compact-unique0.mbtiles" to "australia-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 53.854178489283925%
0m0:04:54 INF - "australia-compact-unique0.mbtiles" to "australia-compact-pk-with-rowid0.mbtiles": avg read operations per second improved by 0.47584551739487324%
0m0:04:54 INF - "australia-compact-unique0.mbtiles" to "australia-not-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 1.424828009221116%
0m0:04:54 INF - "australia-compact-unique0.mbtiles" to "australia-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 49.687799812581176%
0m0:04:54 INF - "australia-compact-pk-with-rowid0.mbtiles" to "australia-not-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 0.9444881871254864%
0m0:04:54 INF - "australia-compact-pk-with-rowid0.mbtiles" to "australia-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 48.978890440555176%
0m0:04:54 INF - "australia-not-compact-pk-without-rowid0.mbtiles" to "australia-compact-pk-without-rowid0.mbtiles": avg read operations per second improved by 47.58496785320867%



Use "primary key without rowid" instead of "unique" on tiles_shallow (compact mode).
This behind the scenes switches from a non-clustered to a clustered index.
And this further reduces the DB and also improves read and write performance.

Log the correct statement to manually create the index in compact DB mode.

Move the automatic index creation into Mbtiles#createTables.
@github-actions
Copy link

github-actions bot commented May 31, 2022

Base f93e522 This Branch 26aa9ca
0:01:51 DEB [mbtiles] - Tile stats:
0:01:51 DEB [mbtiles] - z0 avg:7.9k max:7.9k
0:01:51 DEB [mbtiles] - z1 avg:4k max:4k
0:01:51 DEB [mbtiles] - z2 avg:9.4k max:9.4k
0:01:51 DEB [mbtiles] - z3 avg:3.9k max:6.4k
0:01:51 DEB [mbtiles] - z4 avg:1.6k max:4.6k
0:01:51 DEB [mbtiles] - z5 avg:1.4k max:8.1k
0:01:51 DEB [mbtiles] - z6 avg:973 max:22k
0:01:51 DEB [mbtiles] - z7 avg:751 max:55k
0:01:51 DEB [mbtiles] - z8 avg:394 max:112k
0:01:51 DEB [mbtiles] - z9 avg:270 max:278k
0:01:51 DEB [mbtiles] - z10 avg:154 max:233k
0:01:51 DEB [mbtiles] - z11 avg:102 max:132k
0:01:51 DEB [mbtiles] - z12 avg:83 max:119k
0:01:51 DEB [mbtiles] - z13 avg:71 max:109k
0:01:51 DEB [mbtiles] - z14 avg:67 max:257k
0:01:51 DEB [mbtiles] - all avg:69 max:0
0:01:51 DEB [mbtiles] -  # features: 5,290,333
0:01:51 DEB [mbtiles] -     # tiles: 4,115,450
0:01:51 INF [mbtiles] - Finished in 30s cpu:57s gc:1s avg:1.9
0:01:51 INF [mbtiles] -   read    1x(3% 0.8s wait:27s)
0:01:51 INF [mbtiles] -   encode  2x(51% 15s wait:5s)
0:01:51 INF [mbtiles] -   write   1x(32% 10s sys:1s wait:18s)
0:01:51 INF - Finished in 1m52s cpu:3m22s gc:4s avg:1.8
0:01:51 INF - FINISHED!
0:01:51 INF - 
0:01:51 INF - ----------------------------------------
0:01:51 INF - 	overall          1m52s cpu:3m22s gc:4s avg:1.8
0:01:51 INF - 	lake_centerlines 2s cpu:4s avg:1.8
0:01:51 INF - 	  read     1x(84% 2s)
0:01:51 INF - 	  process  2x(14% 0.3s wait:2s)
0:01:51 INF - 	  write    1x(0% 0s wait:2s)
0:01:51 INF - 	water_polygons   26s cpu:47s gc:2s avg:1.8
0:01:51 INF - 	  read     1x(60% 16s wait:2s)
0:01:51 INF - 	  process  2x(28% 7s wait:13s)
0:01:51 INF - 	  write    1x(2% 0.6s wait:25s)
0:01:51 INF - 	natural_earth    10s cpu:15s avg:1.6
0:01:51 INF - 	  read     1x(90% 9s sys:2s)
0:01:51 INF - 	  process  2x(19% 2s wait:8s)
0:01:51 INF - 	  write    1x(0% 0s wait:9s)
0:01:51 INF - 	osm_pass1        4s cpu:7s avg:1.8
0:01:51 INF - 	  read     1x(2% 0.1s wait:3s)
0:01:51 INF - 	  parse    1x(61% 2s wait:1s)
0:01:51 INF - 	  process  1x(51% 2s wait:1s)
0:01:51 INF - 	osm_pass2        30s cpu:59s avg:2
0:01:51 INF - 	  read     1x(0% 0s wait:15s done:15s)
0:01:51 INF - 	  process  2x(76% 23s)
0:01:51 INF - 	  write    1x(1% 0.4s wait:30s)
0:01:51 INF - 	boundaries       0.1s cpu:0.1s avg:1.8
0:01:51 INF - 	sort             2s cpu:3s avg:1.5
0:01:51 INF - 	  worker  1x(95% 2s)
0:01:51 INF - 	mbtiles          30s cpu:57s gc:1s avg:1.9
0:01:51 INF - 	  read    1x(3% 0.8s wait:27s)
0:01:51 INF - 	  encode  2x(51% 15s wait:5s)
0:01:51 INF - 	  write   1x(32% 10s sys:1s wait:18s)
0:01:51 INF - ----------------------------------------
0:01:51 INF - 	features	270MB
0:01:51 INF - 	mbtiles	511MB
-rw-r--r-- 1 runner docker 55M Jun  1 17:25 run.jar
0:01:55 DEB [mbtiles] - Tile stats:
0:01:55 DEB [mbtiles] - z0 avg:7.9k max:7.9k
0:01:55 DEB [mbtiles] - z1 avg:4k max:4k
0:01:55 DEB [mbtiles] - z2 avg:9.4k max:9.4k
0:01:55 DEB [mbtiles] - z3 avg:3.9k max:6.4k
0:01:55 DEB [mbtiles] - z4 avg:1.6k max:4.6k
0:01:55 DEB [mbtiles] - z5 avg:1.4k max:8.1k
0:01:55 DEB [mbtiles] - z6 avg:973 max:22k
0:01:55 DEB [mbtiles] - z7 avg:751 max:55k
0:01:55 DEB [mbtiles] - z8 avg:394 max:112k
0:01:55 DEB [mbtiles] - z9 avg:270 max:278k
0:01:55 DEB [mbtiles] - z10 avg:154 max:233k
0:01:55 DEB [mbtiles] - z11 avg:102 max:132k
0:01:55 DEB [mbtiles] - z12 avg:83 max:119k
0:01:55 DEB [mbtiles] - z13 avg:71 max:109k
0:01:55 DEB [mbtiles] - z14 avg:67 max:257k
0:01:55 DEB [mbtiles] - all avg:69 max:0
0:01:55 DEB [mbtiles] -  # features: 5,290,333
0:01:55 DEB [mbtiles] -     # tiles: 4,115,450
0:01:55 INF [mbtiles] - Finished in 29s cpu:56s gc:1s avg:1.9
0:01:55 INF [mbtiles] -   read    1x(2% 0.7s wait:27s)
0:01:55 INF [mbtiles] -   encode  2x(54% 16s wait:3s)
0:01:55 INF [mbtiles] -   write   1x(26% 8s wait:19s)
0:01:55 INF - Finished in 1m55s cpu:3m22s gc:4s avg:1.8
0:01:55 INF - FINISHED!
0:01:55 INF - 
0:01:55 INF - ----------------------------------------
0:01:55 INF - 	overall          1m55s cpu:3m22s gc:4s avg:1.8
0:01:55 INF - 	lake_centerlines 2s cpu:4s avg:1.8
0:01:55 INF - 	  read     1x(77% 2s)
0:01:55 INF - 	  process  2x(13% 0.3s wait:2s)
0:01:55 INF - 	  write    1x(0% 0s wait:2s)
0:01:55 INF - 	water_polygons   26s cpu:47s gc:2s avg:1.8
0:01:55 INF - 	  read     1x(61% 16s wait:2s)
0:01:55 INF - 	  process  2x(27% 7s wait:13s)
0:01:55 INF - 	  write    1x(2% 0.6s wait:26s)
0:01:55 INF - 	natural_earth    10s cpu:15s avg:1.6
0:01:55 INF - 	  read     1x(88% 8s sys:1s)
0:01:55 INF - 	  process  2x(20% 2s wait:8s)
0:01:55 INF - 	  write    1x(0% 0s wait:9s)
0:01:55 INF - 	osm_pass1        4s cpu:7s avg:1.8
0:01:55 INF - 	  read     1x(3% 0.1s wait:3s)
0:01:55 INF - 	  parse    1x(66% 2s)
0:01:55 INF - 	  process  1x(34% 1s wait:2s)
0:01:55 INF - 	osm_pass2        30s cpu:58s avg:2
0:01:55 INF - 	  read     1x(0% 0s wait:14s done:15s)
0:01:55 INF - 	  process  2x(76% 22s)
0:01:55 INF - 	  write    1x(1% 0.4s wait:29s)
0:01:55 INF - 	boundaries       0s cpu:0s avg:1.1
0:01:55 INF - 	sort             2s cpu:3s avg:1.3
0:01:55 INF - 	  worker  1x(81% 2s)
0:01:55 INF - 	mbtiles          29s cpu:56s gc:1s avg:1.9
0:01:55 INF - 	  read    1x(2% 0.7s wait:27s)
0:01:55 INF - 	  encode  2x(54% 16s wait:3s)
0:01:55 INF - 	  write   1x(26% 8s wait:19s)
0:01:55 INF - ----------------------------------------
0:01:55 INF - 	features	270MB
0:01:55 INF - 	mbtiles	108MB
-rw-r--r-- 1 runner docker 55M Jun  1 17:23 run.jar

https://github.com/onthegomap/planetiler/actions/runs/2423265831

ℹ️ Base Logs f93e522
0:00:00 DEB - argument: config=null (path to config file)
0:00:00 DEB - argument: area=rhode island (name of the extract to download if osm_url/osm_path not specified (i.e. 'monaco' 'rhode island' 'australia' or 'planet'))
0:00:00 INF - Using in-memory stats
0:00:00 INF [overall] - 
0:00:00 INF [overall] - Starting...
0:00:00 DEB - argument: madvise=true (default value for whether to use linux madvise(random) to improve memory-mapped read performance for temporary storage)
0:00:00 DEB - argument: storage=mmap (default storage type for temporary data, one of [ram, mmap, direct])
0:00:00 DEB - argument: threads=2 (num threads)
0:00:00 DEB - argument: write_threads=1 (number of threads to use when writing temp features)
0:00:00 DEB - argument: process_threads=2 (number of threads to use when processing input features)
0:00:00 DEB - argument: bounds=Env[-74.07 : -17.84, 21.34 : 43.55] (bounds)
0:00:00 DEB - argument: feature_read_threads=1 (number of threads to use when reading features at tile write time)
0:00:00 DEB - argument: loginterval=10 seconds (time between logs)
0:00:00 DEB - argument: minzoom=0 (minimum zoom level)
0:00:00 DEB - argument: maxzoom=14 (maximum zoom level (limit 14))
0:00:00 DEB - argument: defer_mbtiles_index_creation=false (skip adding index to mbtiles file)
0:00:00 DEB - argument: optimize_db=false (optimize mbtiles after writing)
0:00:00 DEB - argument: emit_tiles_in_order=true (emit tiles in index order)
0:00:00 DEB - argument: force=false (overwriting output file and ignore disk/RAM warnings)
0:00:00 DEB - argument: gzip_temp=false (gzip temporary feature storage (uses more CPU, but less disk space))
0:00:00 DEB - argument: mmap_temp=true (use memory-mapped IO for temp feature files)
0:00:00 DEB - argument: sort_max_readers=6 (maximum number of concurrent read threads to use when sorting chunks)
0:00:00 DEB - argument: sort_max_writers=6 (maximum number of concurrent write threads to use when sorting chunks)
0:00:00 DEB - argument: nodemap_type=sparsearray (type of node location map, one of [noop, sortedtable, sparsearray, array])
0:00:00 DEB - argument: nodemap_storage=mmap (storage for node location map, one of [ram, mmap, direct])
0:00:00 DEB - argument: nodemap_madvise=true (use linux madvise(random) for node locations)
0:00:00 DEB - argument: multipolygon_geometry_storage=mmap (storage for multipolygon geometries, one of [ram, mmap, direct])
0:00:00 DEB - argument: multipolygon_geometry_madvise=true (use linux madvise(random) for temporary multipolygon geometry storage)
0:00:00 DEB - argument: http_user_agent=Planetiler downloader (https://github.com/onthegomap/planetiler) (User-Agent header to set when downloading files over HTTP)
0:00:00 DEB - argument: http_timeout=30 seconds (Timeout to use when downloading files over HTTP)
0:00:00 DEB - argument: http_retries=1 (Retries to use when downloading files over HTTP)
0:00:00 DEB - argument: download_chunk_size_mb=100 (Size of file chunks to download in parallel in megabytes)
0:00:00 DEB - argument: download_threads=1 (Number of parallel threads to use when downloading each file)
0:00:00 DEB - argument: min_feature_size_at_max_zoom=0.0625 (Default value for the minimum size in tile pixels of features to emit at the maximum zoom level to allow for overzooming)
0:00:00 DEB - argument: min_feature_size=1.0 (Default value for the minimum size in tile pixels of features to emit below the maximum zoom level)
0:00:00 DEB - argument: simplify_tolerance_at_max_zoom=0.0625 (Default value for the tile pixel tolerance to use when simplifying features at the maximum zoom level to allow for overzooming)
0:00:00 DEB - argument: simplify_tolerance=0.1 (Default value for the tile pixel tolerance to use when simplifying features below the maximum zoom level)
0:00:00 DEB - argument: osm_lazy_reads=false (Read OSM blocks from disk in worker threads)
0:00:00 DEB - argument: compact_db=false (Reduce the DB size by separating and deduping the tile data)
0:00:00 DEB - argument: tmpdir=data/tmp (temp directory)
0:00:00 DEB - argument: only_download=false (download source data then exit)
0:00:00 DEB - argument: download=false (download sources)
0:00:00 DEB - argument: temp_nodes=data/tmp/node.db (temp node db location)
0:00:00 DEB - argument: temp_multipolygons=data/tmp/multipolygon.db (temp multipolygon db location)
0:00:00 DEB - argument: temp_features=data/tmp/feature.db (temp feature db location)
0:00:00 DEB - argument: only_fetch_wikidata=false (fetch wikidata translations then quit)
0:00:00 DEB - argument: fetch_wikidata=false (fetch wikidata translations then continue)
0:00:00 DEB - argument: use_wikidata=true (use wikidata translations)
0:00:00 DEB - argument: wikidata_cache=data/sources/wikidata_names.json (wikidata cache file)
0:00:00 DEB - argument: lake_centerlines_path=data/sources/lake_centerline.shp.zip (lake_centerlines shapefile path)
0:00:00 DEB - argument: free_lake_centerlines_after_read=false (delete lake_centerlines input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: water_polygons_path=data/sources/water-polygons-split-3857.zip (water_polygons shapefile path)
0:00:00 DEB - argument: free_water_polygons_after_read=false (delete water_polygons input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: natural_earth_path=data/sources/natural_earth_vector.sqlite.zip (natural_earth sqlite db path)
0:00:00 DEB - argument: free_natural_earth_after_read=false (delete natural_earth input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: osm_path=data/sources/rhode_island.osm.pbf (osm OSM input file path)
0:00:00 DEB - argument: free_osm_after_read=false (delete osm input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: mbtiles=data/out.mbtiles (mbtiles output file)
0:00:00 DEB - argument: transliterate=true (attempt to transliterate latin names)
0:00:00 DEB - argument: languages=am,ar,az,be,bg,br,bs,ca,co,cs,cy,da,de,el,en,eo,es,et,eu,fi,fr,fy,ga,gd,he,hi,hr,hu,hy,id,is,it,ja,ja_kana,ja_rm,ja-Latn,ja-Hira,ka,kk,kn,ko,ko-Latn,ku,la,lb,lt,lv,mk,mt,ml,nl,no,oc,pl,pt,rm,ro,ru,sk,sl,sq,sr,sr-Latn,sv,ta,te,th,tr,uk,zh (languages to use)
0:00:00 DEB - argument: only_layers= (Include only certain layers)
0:00:00 DEB - argument: exclude_layers= (Exclude certain layers)
0:00:00 DEB - argument: boundary_country_names=true (boundary layer: add left/right codes of neighboring countries)
0:00:00 DEB - argument: transportation_z13_paths=false (transportation(_name) layer: show all paths on z13)
0:00:00 DEB - argument: building_merge_z13=true (building layer: merge nearby buildings at z13)
0:00:00 DEB - argument: transportation_name_brunnel=false (transportation_name layer: set to false to omit brunnel and help merge long highways)
0:00:00 DEB - argument: transportation_name_size_for_shield=false (transportation_name layer: allow road names on shorter segments (ie. they will have a shield))
0:00:00 DEB - argument: transportation_name_limit_merge=false (transportation_name layer: limit merge so we don't combine different relations to help merge long highways)
0:00:00 DEB - argument: transportation_name_minor_refs=false (transportation_name layer: include name and refs from minor road networks if not present on a way)
0:00:00 DEB - argument: mbtiles_name=OpenMapTiles ('name' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org ('description' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_attribution=<a href="https://www.openmaptiles.org/" target="_blank">&copy; OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a> ('attribution' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_version=3.13.1 ('version' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_type=baselayer ('type' attribute for mbtiles metadata)
0:00:00 DEB - argument: help=false (show arguments then exit)
0:00:00 INF - Building BasemapProfile profile into data/out.mbtiles in these phases:
0:00:00 INF -   lake_centerlines: Process features in data/sources/lake_centerline.shp.zip
0:00:00 INF -   water_polygons: Process features in data/sources/water-polygons-split-3857.zip
0:00:00 INF -   natural_earth: Process features in data/sources/natural_earth_vector.sqlite.zip
0:00:00 INF -   osm_pass1: Pre-process OpenStreetMap input (store node locations then relation members)
0:00:00 INF -   osm_pass2: Process OpenStreetMap nodes, ways, then relations
0:00:00 INF -   sort: Sort rendered features by tile ID
0:00:00 INF -   mbtiles: Encode each tile and write to data/out.mbtiles
0:00:00 INF - no wikidata translations found, run with --fetch-wikidata to download
0:00:00 DEB - ✓ 194M storage on / (/dev/root) requested for read phase disk, 29G available
0:00:00 DEB -  - 43M used for temporary node location cache
0:00:00 DEB -  - 6.6M used for temporary multipolygon geometry cache
0:00:00 DEB -  - 144M used for temporary feature storage
0:00:00 DEB - ✓ 216M storage on / (/dev/root) requested for write phase disk, 29G available
0:00:00 DEB -  - 144M used for temporary feature storage
0:00:00 DEB -  - 72M used for mbtiles output
0:00:00 DEB - ✓ 312M JVM heap requested for read phase, 4.2G available
0:00:00 DEB -  - 300M used for sparsearray node location in-memory index
0:00:00 DEB -  - 12M used for temporary profile storage
0:00:00 DEB - ✓ 50M storage on / (/dev/root) requested for read phase, 29G available
0:00:00 DEB -  - 43M used for sparsearray node location cache
0:00:00 DEB -  - 6.6M used for multipolygon way geometries
0:00:00 DEB - ✓ 50M temporary files and 2.9G of free memory for OS to cache them
0:00:00 INF - Using merge sort feature map, chunk size=1431mb max workers=2
0:00:02 INF - dataFileCache open start
0:00:02 INF [lake_centerlines] - 
0:00:02 INF [lake_centerlines] - Starting...
0:00:04 INF [lake_centerlines] -  read: [  59k 100%  29k/s ] write: [    0    0/s ] 0    
    cpus: 1.8 gc:  4% heap: 176M/4.2G direct: 237k postGC: 79M
    read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:04 INF [lake_centerlines] - Finished in 2s cpu:4s avg:1.8
0:00:04 INF [lake_centerlines] -   read     1x(84% 2s)
0:00:04 INF [lake_centerlines] -   process  2x(14% 0.3s wait:2s)
0:00:04 INF [lake_centerlines] -   write    1x(0% 0s wait:2s)
0:00:04 INF [water_polygons] - 
0:00:04 INF [water_polygons] - Starting...
0:00:14 INF [water_polygons] -  read: [   2k  14%  200/s ] write: [  42k 4.1k/s ] 1.4G 
    cpus: 1.9 gc: 11% heap: 1G/4.2G direct: 54M postGC: 1G
    read(58%) ->    (0/1k) -> process(44%  9%) -> (220/53k) -> write( 0%)
0:00:24 INF [water_polygons] -  read: [ 5.1k  35%  311/s ] write: [ 299k  25k/s ] 1.4G 
    cpus: 1.8 gc:  6% heap: 1.7G/4.2G direct: 54M postGC: 1.4G
    read(67%) ->    (0/1k) -> process(23% 33%) -> (1.2k/53k) -> write( 1%)
0:00:30 INF [water_polygons] -  read: [  14k 100% 1.5k/s ] write: [ 4.3M 684k/s ] 186M 
    cpus: 1.5 gc:  8% heap: 2.8G/4.2G direct: 54M postGC: 1.6G
    read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:30 INF [water_polygons] - Finished in 26s cpu:47s gc:2s avg:1.8
0:00:30 INF [water_polygons] -   read     1x(60% 16s wait:2s)
0:00:30 INF [water_polygons] -   process  2x(28% 7s wait:13s)
0:00:30 INF [water_polygons] -   write    1x(2% 0.6s wait:25s)
0:00:30 INF [natural_earth] - unzipping /home/runner/work/planetiler/planetiler/data/sources/natural_earth_vector.sqlite.zip to data/tmp/natearth.sqlite
0:00:36 INF [natural_earth] - 
0:00:36 INF [natural_earth] - Starting...
0:00:45 INF [natural_earth] -  read: [ 349k 100%  39k/s ] write: [  181   20/s ] 186M 
    cpus: 1.6 gc:  0% heap: 2G/4.2G direct: 54M postGC: 1.6G
    read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:45 INF [natural_earth] - Finished in 10s cpu:15s avg:1.6
0:00:45 INF [natural_earth] -   read     1x(90% 9s sys:2s)
0:00:45 INF [natural_earth] -   process  2x(19% 2s wait:8s)
0:00:45 INF [natural_earth] -   write    1x(0% 0s wait:9s)
0:00:45 INF [osm_pass1] - 
0:00:45 INF [osm_pass1] - Starting...
0:00:48 INF [osm_pass1:process] - Finished nodes: 4,592,754 (1.7M/s) in 3s cpu:5s avg:1.7
0:00:49 INF [osm_pass1:process] - Finished ways: 330,547 (374k/s) in 0.9s cpu:2s avg:2
0:00:49 INF [osm_pass1:process] - Finished relations: 7,702 (155k/s) in 0s cpu:0.1s avg:2
0:00:49 INF [osm_pass1] -  nodes: [ 4.5M 1.2M/s ] 414M  ways: [ 330k  88k/s ] rels: [ 7.7k   2k/s ] blocks: [  618  165/s ]
    cpus: 1.8 gc:  1% heap: 809M/4.2G direct: 54M postGC: 821M hppc: 879k
    read( -%) ->     (0/4) -> parse( -%) ->     (0/4) -> process( -%)
0:00:49 DEB [osm_pass1] - Processed 618 blocks:
0:00:49 DEB [osm_pass1] -   nodes: 4,592,754 (1.7M/s) in 3s cpu:5s avg:1.7
0:00:49 DEB [osm_pass1] -   ways: 330,547 (374k/s) in 0.9s cpu:2s avg:2
0:00:49 DEB [osm_pass1] -   relations: 7,702 (155k/s) in 0s cpu:0.1s avg:2
0:00:49 INF [osm_pass1] - Finished in 4s cpu:7s avg:1.8
0:00:49 INF [osm_pass1] -   read     1x(2% 0.1s wait:3s)
0:00:49 INF [osm_pass1] -   parse    1x(61% 2s wait:1s)
0:00:49 INF [osm_pass1] -   process  1x(51% 2s wait:1s)
0:00:49 INF [osm_pass2] - 
0:00:49 INF [osm_pass2] - Starting...
0:00:51 DEB [osm_pass2:process] - Sorting long long multimap...
0:00:51 INF [osm_pass2:process] - Finished nodes: 4,592,754 (1.8M/s) in 3s cpu:5s avg:2
0:00:51 DEB [osm_pass2:process] - Sorted long long multimap 0s cpu:0s avg:1.9
0:00:52 WAR [osm_pass2:process] - No GB polygon for inferring route network types
0:00:59 INF [osm_pass2] -  nodes: [ 4.5M 100% 459k/s ] 414M  ways: [ 145k  44%  14k/s ] rels: [    0   0%    0/s ] features: [ 4.8M  55k/s ] 1.6G  blocks: [  592  96%   59/s ]
    cpus: 2 gc:  0% heap: 871M/4.2G direct: 55M postGC: 838M relInfo: 825k mpGeoms: 649k 
    read( 0%) ->   (11/13) -> process(60% 63%) -> (923/53k) -> write( 2%)
0:01:08 INF [osm_pass2:process] - Finished ways: 330,547 (19k/s) in 17s cpu:33s avg:2
0:01:09 INF [osm_pass2] -  nodes: [ 4.5M 100%    0/s ] 414M  ways: [ 330k 100%  18k/s ] rels: [ 1.9k  25%  190/s ] features: [ 5.2M  38k/s ] 1.6G  blocks: [  617 100%    2/s ]
    cpus: 2 gc:  1% heap: 3.1G/4.2G direct: 54M postGC: 845M relInfo: 825k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process(78% 84%) -> (1.6k/53k) -> write( 2%)
0:01:17 INF [osm_pass2:process] - Finished relations: 7,702 (900/s) in 9s cpu:17s avg:2
0:01:19 INF [osm_pass2] -  nodes: [ 4.5M 100%    0/s ] 414M  ways: [ 330k 100%    0/s ] rels: [ 7.7k 100%  581/s ] features: [ 5.2M 3.1k/s ] 270M  blocks: [  618 100%   <1/s ]
    cpus: 2 gc:  1% heap: 2.8G/4.2G direct: 54M postGC: 836M relInfo: 825k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:01:19 DEB [osm_pass2] - Processed 618 blocks:
0:01:19 DEB [osm_pass2] -   nodes: 4,592,754 (1.8M/s) in 3s cpu:5s avg:2
0:01:19 DEB [osm_pass2] -   ways: 330,547 (19k/s) in 17s cpu:33s avg:2
0:01:19 DEB [osm_pass2] -   relations: 7,702 (900/s) in 9s cpu:17s avg:2
0:01:19 INF [osm_pass2] - Finished in 30s cpu:59s avg:2
0:01:19 INF [osm_pass2] -   read     1x(0% 0s wait:15s done:15s)
0:01:19 INF [osm_pass2] -   process  2x(76% 23s)
0:01:19 INF [osm_pass2] -   write    1x(1% 0.4s wait:30s)
0:01:19 INF [boundaries] - 
0:01:19 INF [boundaries] - Starting...
0:01:19 INF [boundaries] - Creating polygons for 1 boundaries
0:01:19 WAR [boundaries] - Unable to form closed polygon for OSM relation 148838 (likely missing edges)
0:01:19 INF [boundaries] - Finished creating 0 country polygons
0:01:19 INF [boundaries] - Finished in 0.1s cpu:0.1s avg:1.8
0:01:19 INF - Deleting node.db to make room for output file
0:01:19 INF [sort] - 
0:01:19 INF [sort] - Starting...
0:01:19 INF [sort] - Grouped 8 chunks into 1
0:01:21 INF [sort] -  chunks: [   1 /   1 100% ] 270M 
    cpus: 1.5 gc:  0% heap: 3.3G/4.2G direct: 54M postGC: 836M
    ->     (0/3) -> worker( -%)
0:01:21 INF [sort] - Finished in 2s cpu:3s avg:1.5
0:01:21 INF [sort] -   worker  1x(95% 2s)
0:01:21 INF - read:0s write:0s sort:1s
0:01:21 INF [mbtiles] - 
0:01:21 INF [mbtiles] - Starting...
0:01:21 DEB [mbtiles:write] - Execute mbtiles: create table metadata (name text, value text);
0:01:21 DEB [mbtiles:write] - Execute mbtiles: create unique index name on metadata (name);
0:01:21 DEB [mbtiles:write] - Execute mbtiles: create table tiles (zoom_level integer, tile_column integer, tile_row, tile_data blob);
0:01:21 DEB [mbtiles:write] - Execute mbtiles: create unique index tile_index on tiles (zoom_level, tile_column, tile_row)
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: name=OpenMapTiles
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: format=pbf
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: attribution=<a href="https://www.openmaptiles.org/" target="_blank">&copy; OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: version=3.13.1
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: type=baselayer
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: bounds=-74.07,21.34,-17.84,43.55
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: center=-45.955,32.445,3
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: minzoom=0
0:01:21 DEB [mbtiles:write] - Set mbtiles metadata: maxzoom=14
0:01:22 DEB [mbtiles:write] - Set mbtiles metadata: json={"vector_layers":[{"id":"aerodrome_label","fields":{"name_int":"String","iata":"String","ele_ft":"Number","name_de":"String","name":"String","icao":"String","name:en":"String","class":"String","ele":"Number","name_en":"String","name:latin":"String"},"minzoom":10,"maxzoom":14},{"id":"aeroway","fields":{"ref":"String","class":"String"},"minzoom":10,"maxzoom":14},{"id":"boundary","fields":{"disputed":"Number","admin_level":"Number","maritime":"Number","disputed_name":"String"},"minzoom":0,"maxzoom":14},{"id":"building","fields":{"colour":"String","render_height":"Number","render_min_height":"Number"},"minzoom":13,"maxzoom":14},{"id":"housenumber","fields":{"housenumber":"String"},"minzoom":14,"maxzoom":14},{"id":"landcover","fields":{"subclass":"String","class":"String","_numpoints":"Number"},"minzoom":7,"maxzoom":14},{"id":"landuse","fields":{"class":"String"},"minzoom":4,"maxzoom":14},{"id":"mountain_peak","fields":{"name_int":"String","customary_ft":"Number","ele_ft":"Number","name_de":"String","name":"String","rank":"Number","class":"String","name_en":"String","name:latin":"String","ele":"Number"},"minzoom":7,"maxzoom":14},{"id":"park","fields":{"name_int":"String","name_de":"String","name":"String","name:en":"String","class":"String","name_en":"String","name:latin":"String"},"minzoom":6,"maxzoom":14},{"id":"place","fields":{"name:fy":"String","name_int":"String","capital":"Number","name:uk":"String","name:pl":"String","name:nl":"String","name:ru":"String","name:be":"String","name:ko":"String","name_de":"String","name":"String","rank":"Number","name:en":"String","name:eo":"String","class":"String","name:ta":"String","name:hu":"String","name:zh":"String","name_en":"String","name:latin":"String"},"minzoom":2,"maxzoom":14},{"id":"poi","fields":{"name_int":"String","level":"Number","name_de":"String","name":"String","subclass":"String","indoor":"Number","name:en":"String","class":"String","layer":"Number","name:zh":"String","name_en":"String","name:latin":"String"},"minzoom":12,"maxzoom":14},{"id":"transportation","fields":{"brunnel":"String","access":"String","expressway":"Number","bicycle":"String","surface":"String","level":"Number","ramp":"Number","mtb_scale":"String","toll":"Number","layer":"Number","oneway":"Number","network":"String","horse":"String","service":"String","subclass":"String","class":"String","foot":"String"},"minzoom":4,"maxzoom":14},{"id":"transportation_name","fields":{"name_int":"String","route_4":"String","route_3":"String","route_2":"String","route_1":"String","layer":"Number","network":"String","ref":"String","name_de":"String","name":"String","ref_length":"Number","subclass":"String","class":"String","name_en":"String","name:latin":"String"},"minzoom":6,"maxzoom":14},{"id":"water","fields":{"intermittent":"Number","id":"Number","class":"String"},"minzoom":0,"maxzoom":14},{"id":"water_name","fields":{"name_int":"String","name_de":"String","name":"String","intermittent":"Number","class":"String","name_en":"String","name:latin":"String"},"minzoom":9,"maxzoom":14},{"id":"waterway","fields":{"name_int":"String","brunnel":"String","name_de":"String","_relid":"Number","intermittent":"Number","name":"String","class":"String","name:latin":"String","name_en":"String"},"minzoom":4,"maxzoom":14}]}
0:01:23 INF [mbtiles:write] - Starting z0
0:01:23 INF [mbtiles:write] - Finished z0 in 0s cpu:0s avg:0, now starting z1
0:01:23 INF [mbtiles:write] - Finished z1 in 0s cpu:0s avg:0, now starting z2
0:01:23 INF [mbtiles:write] - Finished z2 in 0s cpu:0s avg:0, now starting z3
0:01:23 INF [mbtiles:write] - Finished z3 in 0s cpu:0s avg:0, now starting z4
0:01:23 INF [mbtiles:write] - Finished z4 in 0s cpu:0s avg:0, now starting z5
0:01:23 INF [mbtiles:write] - Finished z5 in 0s cpu:0s avg:0, now starting z6
0:01:23 INF [mbtiles:write] - Finished z6 in 0s cpu:0s avg:0, now starting z7
0:01:24 INF [mbtiles:write] - Finished z7 in 0.5s cpu:1s avg:2, now starting z8
0:01:25 INF [mbtiles:write] - Finished z8 in 1s cpu:3s avg:2, now starting z9
0:01:26 INF [mbtiles:write] - Finished z9 in 1s cpu:2s avg:2, now starting z10
0:01:27 INF [mbtiles:write] - Finished z10 in 0.5s cpu:1s avg:1.9, now starting z11
0:01:28 INF [mbtiles:write] - Finished z11 in 1s cpu:2s avg:2, now starting z12
0:01:30 INF [mbtiles:write] - Finished z12 in 3s cpu:5s avg:2, now starting z13
0:01:31 INF [mbtiles] -  features: [ 545k  10%  51k/s ] 270M  tiles: [ 287k  28k/s ] 42M  
    cpus: 2 gc:  2% heap: 2.3G/4.2G direct: 54M postGC: 807M
    read( 1%) -> (214/217) -> encode(58% 60%) -> (215/216) -> write( 8%)
    last tile: 13/2464/3166 (z13 4%) https://www.openstreetmap.org/#map=13/37.78808/-71.71875
0:01:42 INF [mbtiles] -  features: [ 1.5M  29%  99k/s ] 270M  tiles: [ 741k  45k/s ] 101M 
    cpus: 2 gc:  2% heap: 1G/4.2G direct: 54M postGC: 800M
    read( 1%) ->   (0/217) -> encode(63% 61%) -> (215/216) -> write(11%)
    last tile: 13/3216/3582 (z13 62%) https://www.openstreetmap.org/#map=13/22.02455/-38.67188
0:01:42 INF [mbtiles:write] - Finished z13 in 12s cpu:24s avg:2, now starting z14
0:01:51 INF [mbtiles:write] - Finished z14 in 9s cpu:14s avg:1.6
0:01:51 INF [mbtiles] -  features: [ 5.2M 100% 384k/s ] 270M  tiles: [ 4.1M 346k/s ] 511M 
    cpus: 1.6 gc:  1% heap: 1.3G/4.2G direct: 54M postGC: 799M
    read( -%) ->   (0/217) -> encode( -%  -%) ->   (0/216) -> write( -%)
    last tile: 14/7380/5985 (z14 100%) https://www.openstreetmap.org/#map=14/43.56447/-17.84180
0:01:51 DEB [mbtiles] - Tile stats:
0:01:51 DEB [mbtiles] - z0 avg:7.9k max:7.9k
0:01:51 DEB [mbtiles] - z1 avg:4k max:4k
0:01:51 DEB [mbtiles] - z2 avg:9.4k max:9.4k
0:01:51 DEB [mbtiles] - z3 avg:3.9k max:6.4k
0:01:51 DEB [mbtiles] - z4 avg:1.6k max:4.6k
0:01:51 DEB [mbtiles] - z5 avg:1.4k max:8.1k
0:01:51 DEB [mbtiles] - z6 avg:973 max:22k
0:01:51 DEB [mbtiles] - z7 avg:751 max:55k
0:01:51 DEB [mbtiles] - z8 avg:394 max:112k
0:01:51 DEB [mbtiles] - z9 avg:270 max:278k
0:01:51 DEB [mbtiles] - z10 avg:154 max:233k
0:01:51 DEB [mbtiles] - z11 avg:102 max:132k
0:01:51 DEB [mbtiles] - z12 avg:83 max:119k
0:01:51 DEB [mbtiles] - z13 avg:71 max:109k
0:01:51 DEB [mbtiles] - z14 avg:67 max:257k
0:01:51 DEB [mbtiles] - all avg:69 max:0
0:01:51 DEB [mbtiles] -  # features: 5,290,333
0:01:51 DEB [mbtiles] -     # tiles: 4,115,450
0:01:51 INF [mbtiles] - Finished in 30s cpu:57s gc:1s avg:1.9
0:01:51 INF [mbtiles] -   read    1x(3% 0.8s wait:27s)
0:01:51 INF [mbtiles] -   encode  2x(51% 15s wait:5s)
0:01:51 INF [mbtiles] -   write   1x(32% 10s sys:1s wait:18s)
0:01:51 INF - Finished in 1m52s cpu:3m22s gc:4s avg:1.8
0:01:51 INF - FINISHED!
0:01:51 INF - 
0:01:51 INF - ----------------------------------------
0:01:51 INF - 	overall          1m52s cpu:3m22s gc:4s avg:1.8
0:01:51 INF - 	lake_centerlines 2s cpu:4s avg:1.8
0:01:51 INF - 	  read     1x(84% 2s)
0:01:51 INF - 	  process  2x(14% 0.3s wait:2s)
0:01:51 INF - 	  write    1x(0% 0s wait:2s)
0:01:51 INF - 	water_polygons   26s cpu:47s gc:2s avg:1.8
0:01:51 INF - 	  read     1x(60% 16s wait:2s)
0:01:51 INF - 	  process  2x(28% 7s wait:13s)
0:01:51 INF - 	  write    1x(2% 0.6s wait:25s)
0:01:51 INF - 	natural_earth    10s cpu:15s avg:1.6
0:01:51 INF - 	  read     1x(90% 9s sys:2s)
0:01:51 INF - 	  process  2x(19% 2s wait:8s)
0:01:51 INF - 	  write    1x(0% 0s wait:9s)
0:01:51 INF - 	osm_pass1        4s cpu:7s avg:1.8
0:01:51 INF - 	  read     1x(2% 0.1s wait:3s)
0:01:51 INF - 	  parse    1x(61% 2s wait:1s)
0:01:51 INF - 	  process  1x(51% 2s wait:1s)
0:01:51 INF - 	osm_pass2        30s cpu:59s avg:2
0:01:51 INF - 	  read     1x(0% 0s wait:15s done:15s)
0:01:51 INF - 	  process  2x(76% 23s)
0:01:51 INF - 	  write    1x(1% 0.4s wait:30s)
0:01:51 INF - 	boundaries       0.1s cpu:0.1s avg:1.8
0:01:51 INF - 	sort             2s cpu:3s avg:1.5
0:01:51 INF - 	  worker  1x(95% 2s)
0:01:51 INF - 	mbtiles          30s cpu:57s gc:1s avg:1.9
0:01:51 INF - 	  read    1x(3% 0.8s wait:27s)
0:01:51 INF - 	  encode  2x(51% 15s wait:5s)
0:01:51 INF - 	  write   1x(32% 10s sys:1s wait:18s)
0:01:51 INF - ----------------------------------------
0:01:51 INF - 	features	270MB
0:01:51 INF - 	mbtiles	511MB
-rw-r--r-- 1 runner docker 55M Jun  1 17:25 run.jar
ℹ️ This Branch Logs 26aa9ca
0:00:00 DEB - argument: config=null (path to config file)
0:00:00 DEB - argument: area=rhode island (name of the extract to download if osm_url/osm_path not specified (i.e. 'monaco' 'rhode island' 'australia' or 'planet'))
0:00:00 INF - Using in-memory stats
0:00:00 INF [overall] - 
0:00:00 INF [overall] - Starting...
0:00:00 DEB - argument: madvise=true (default value for whether to use linux madvise(random) to improve memory-mapped read performance for temporary storage)
0:00:00 DEB - argument: storage=mmap (default storage type for temporary data, one of [ram, mmap, direct])
0:00:00 DEB - argument: threads=2 (num threads)
0:00:00 DEB - argument: write_threads=1 (number of threads to use when writing temp features)
0:00:00 DEB - argument: process_threads=2 (number of threads to use when processing input features)
0:00:00 DEB - argument: bounds=Env[-74.07 : -17.84, 21.34 : 43.55] (bounds)
0:00:00 DEB - argument: feature_read_threads=1 (number of threads to use when reading features at tile write time)
0:00:00 DEB - argument: loginterval=10 seconds (time between logs)
0:00:00 DEB - argument: minzoom=0 (minimum zoom level)
0:00:00 DEB - argument: maxzoom=14 (maximum zoom level (limit 14))
0:00:00 DEB - argument: skip_mbtiles_index_creation=false (skip adding index to mbtiles file)
0:00:00 DEB - argument: optimize_db=false (optimize mbtiles after writing)
0:00:00 DEB - argument: emit_tiles_in_order=true (emit tiles in index order)
0:00:00 DEB - argument: force=false (overwriting output file and ignore disk/RAM warnings)
0:00:00 DEB - argument: gzip_temp=false (gzip temporary feature storage (uses more CPU, but less disk space))
0:00:00 DEB - argument: mmap_temp=true (use memory-mapped IO for temp feature files)
0:00:00 DEB - argument: sort_max_readers=6 (maximum number of concurrent read threads to use when sorting chunks)
0:00:00 DEB - argument: sort_max_writers=6 (maximum number of concurrent write threads to use when sorting chunks)
0:00:00 DEB - argument: nodemap_type=sparsearray (type of node location map, one of [noop, sortedtable, sparsearray, array])
0:00:00 DEB - argument: nodemap_storage=mmap (storage for node location map, one of [ram, mmap, direct])
0:00:00 DEB - argument: nodemap_madvise=true (use linux madvise(random) for node locations)
0:00:00 DEB - argument: multipolygon_geometry_storage=mmap (storage for multipolygon geometries, one of [ram, mmap, direct])
0:00:00 DEB - argument: multipolygon_geometry_madvise=true (use linux madvise(random) for temporary multipolygon geometry storage)
0:00:00 DEB - argument: http_user_agent=Planetiler downloader (https://github.com/onthegomap/planetiler) (User-Agent header to set when downloading files over HTTP)
0:00:00 DEB - argument: http_timeout=30 seconds (Timeout to use when downloading files over HTTP)
0:00:00 DEB - argument: http_retries=1 (Retries to use when downloading files over HTTP)
0:00:00 DEB - argument: download_chunk_size_mb=100 (Size of file chunks to download in parallel in megabytes)
0:00:00 DEB - argument: download_threads=1 (Number of parallel threads to use when downloading each file)
0:00:00 DEB - argument: min_feature_size_at_max_zoom=0.0625 (Default value for the minimum size in tile pixels of features to emit at the maximum zoom level to allow for overzooming)
0:00:00 DEB - argument: min_feature_size=1.0 (Default value for the minimum size in tile pixels of features to emit below the maximum zoom level)
0:00:00 DEB - argument: simplify_tolerance_at_max_zoom=0.0625 (Default value for the tile pixel tolerance to use when simplifying features at the maximum zoom level to allow for overzooming)
0:00:00 DEB - argument: simplify_tolerance=0.1 (Default value for the tile pixel tolerance to use when simplifying features below the maximum zoom level)
0:00:00 DEB - argument: osm_lazy_reads=false (Read OSM blocks from disk in worker threads)
0:00:00 DEB - argument: compact_db=true (Reduce the DB size by separating and deduping the tile data)
0:00:00 DEB - argument: tmpdir=data/tmp (temp directory)
0:00:00 DEB - argument: only_download=false (download source data then exit)
0:00:00 DEB - argument: download=false (download sources)
0:00:00 DEB - argument: temp_nodes=data/tmp/node.db (temp node db location)
0:00:00 DEB - argument: temp_multipolygons=data/tmp/multipolygon.db (temp multipolygon db location)
0:00:00 DEB - argument: temp_features=data/tmp/feature.db (temp feature db location)
0:00:00 DEB - argument: only_fetch_wikidata=false (fetch wikidata translations then quit)
0:00:00 DEB - argument: fetch_wikidata=false (fetch wikidata translations then continue)
0:00:00 DEB - argument: use_wikidata=true (use wikidata translations)
0:00:00 DEB - argument: wikidata_cache=data/sources/wikidata_names.json (wikidata cache file)
0:00:00 DEB - argument: lake_centerlines_path=data/sources/lake_centerline.shp.zip (lake_centerlines shapefile path)
0:00:00 DEB - argument: free_lake_centerlines_after_read=false (delete lake_centerlines input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: water_polygons_path=data/sources/water-polygons-split-3857.zip (water_polygons shapefile path)
0:00:00 DEB - argument: free_water_polygons_after_read=false (delete water_polygons input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: natural_earth_path=data/sources/natural_earth_vector.sqlite.zip (natural_earth sqlite db path)
0:00:00 DEB - argument: free_natural_earth_after_read=false (delete natural_earth input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: osm_path=data/sources/rhode_island.osm.pbf (osm OSM input file path)
0:00:00 DEB - argument: free_osm_after_read=false (delete osm input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: mbtiles=data/out.mbtiles (mbtiles output file)
0:00:00 DEB - argument: transliterate=true (attempt to transliterate latin names)
0:00:00 DEB - argument: languages=am,ar,az,be,bg,br,bs,ca,co,cs,cy,da,de,el,en,eo,es,et,eu,fi,fr,fy,ga,gd,he,hi,hr,hu,hy,id,is,it,ja,ja_kana,ja_rm,ja-Latn,ja-Hira,ka,kk,kn,ko,ko-Latn,ku,la,lb,lt,lv,mk,mt,ml,nl,no,oc,pl,pt,rm,ro,ru,sk,sl,sq,sr,sr-Latn,sv,ta,te,th,tr,uk,zh (languages to use)
0:00:00 DEB - argument: only_layers= (Include only certain layers)
0:00:00 DEB - argument: exclude_layers= (Exclude certain layers)
0:00:00 DEB - argument: boundary_country_names=true (boundary layer: add left/right codes of neighboring countries)
0:00:00 DEB - argument: transportation_z13_paths=false (transportation(_name) layer: show all paths on z13)
0:00:00 DEB - argument: building_merge_z13=true (building layer: merge nearby buildings at z13)
0:00:00 DEB - argument: transportation_name_brunnel=false (transportation_name layer: set to false to omit brunnel and help merge long highways)
0:00:00 DEB - argument: transportation_name_size_for_shield=false (transportation_name layer: allow road names on shorter segments (ie. they will have a shield))
0:00:00 DEB - argument: transportation_name_limit_merge=false (transportation_name layer: limit merge so we don't combine different relations to help merge long highways)
0:00:00 DEB - argument: transportation_name_minor_refs=false (transportation_name layer: include name and refs from minor road networks if not present on a way)
0:00:00 DEB - argument: mbtiles_name=OpenMapTiles ('name' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org ('description' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_attribution=<a href="https://www.openmaptiles.org/" target="_blank">&copy; OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a> ('attribution' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_version=3.13.1 ('version' attribute for mbtiles metadata)
0:00:00 DEB - argument: mbtiles_type=baselayer ('type' attribute for mbtiles metadata)
0:00:00 DEB - argument: help=false (show arguments then exit)
0:00:00 INF - Building BasemapProfile profile into data/out.mbtiles in these phases:
0:00:00 INF -   lake_centerlines: Process features in data/sources/lake_centerline.shp.zip
0:00:00 INF -   water_polygons: Process features in data/sources/water-polygons-split-3857.zip
0:00:00 INF -   natural_earth: Process features in data/sources/natural_earth_vector.sqlite.zip
0:00:00 INF -   osm_pass1: Pre-process OpenStreetMap input (store node locations then relation members)
0:00:00 INF -   osm_pass2: Process OpenStreetMap nodes, ways, then relations
0:00:00 INF -   sort: Sort rendered features by tile ID
0:00:00 INF -   mbtiles: Encode each tile and write to data/out.mbtiles
0:00:01 INF - no wikidata translations found, run with --fetch-wikidata to download
0:00:01 DEB - ✓ 194M storage on / (/dev/root) requested for read phase disk, 29G available
0:00:01 DEB -  - 43M used for temporary node location cache
0:00:01 DEB -  - 6.6M used for temporary multipolygon geometry cache
0:00:01 DEB -  - 144M used for temporary feature storage
0:00:01 DEB - ✓ 216M storage on / (/dev/root) requested for write phase disk, 29G available
0:00:01 DEB -  - 144M used for temporary feature storage
0:00:01 DEB -  - 72M used for mbtiles output
0:00:01 DEB - ✓ 312M JVM heap requested for read phase, 4.2G available
0:00:01 DEB -  - 300M used for sparsearray node location in-memory index
0:00:01 DEB -  - 12M used for temporary profile storage
0:00:01 DEB - ✓ 50M storage on / (/dev/root) requested for read phase, 29G available
0:00:01 DEB -  - 43M used for sparsearray node location cache
0:00:01 DEB -  - 6.6M used for multipolygon way geometries
0:00:01 DEB - ✓ 50M temporary files and 2.9G of free memory for OS to cache them
0:00:01 INF - Using merge sort feature map, chunk size=1431mb max workers=2
0:00:02 INF - dataFileCache open start
0:00:03 INF [lake_centerlines] - 
0:00:03 INF [lake_centerlines] - Starting...
0:00:05 INF [lake_centerlines] -  read: [  59k 100%  26k/s ] write: [    0    0/s ] 0    
    cpus: 1.8 gc:  4% heap: 174M/4.2G direct: 237k postGC: 80M
    read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:05 INF [lake_centerlines] - Finished in 2s cpu:4s avg:1.8
0:00:05 INF [lake_centerlines] -   read     1x(77% 2s)
0:00:05 INF [lake_centerlines] -   process  2x(13% 0.3s wait:2s)
0:00:05 INF [lake_centerlines] -   write    1x(0% 0s wait:2s)
0:00:05 INF [water_polygons] - 
0:00:05 INF [water_polygons] - Starting...
0:00:15 INF [water_polygons] -  read: [ 2.2k  15%  216/s ] write: [  42k   4k/s ] 1.4G 
    cpus: 1.9 gc: 10% heap: 939M/4.2G direct: 54M postGC: 984M
    read(61%) ->    (0/1k) -> process(34% 18%) -> (1.3k/53k) -> write( 0%)
0:00:25 INF [water_polygons] -  read: [ 5.1k  35%  289/s ] write: [ 300k  25k/s ] 1.4G 
    cpus: 1.8 gc:  9% heap: 1.5G/4.2G direct: 54M postGC: 1.3G
    read(67%) ->    (0/1k) -> process(27% 22%) -> (251/53k) -> write( 0%)
0:00:31 INF [water_polygons] -  read: [  14k 100% 1.5k/s ] write: [ 4.3M 665k/s ] 186M 
    cpus: 1.5 gc:  6% heap: 2.9G/4.2G direct: 54M postGC: 1.5G
    read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:31 INF [water_polygons] - Finished in 26s cpu:47s gc:2s avg:1.8
0:00:31 INF [water_polygons] -   read     1x(61% 16s wait:2s)
0:00:31 INF [water_polygons] -   process  2x(27% 7s wait:13s)
0:00:31 INF [water_polygons] -   write    1x(2% 0.6s wait:26s)
0:00:31 INF [natural_earth] - unzipping /home/runner/work/planetiler/planetiler/data/sources/natural_earth_vector.sqlite.zip to data/tmp/natearth.sqlite
0:00:40 INF [natural_earth] - 
0:00:40 INF [natural_earth] - Starting...
0:00:49 INF [natural_earth] -  read: [ 349k 100%  39k/s ] write: [  181   20/s ] 186M 
    cpus: 1.6 gc:  1% heap: 2.1G/4.2G direct: 54M postGC: 1.5G
    read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:49 INF [natural_earth] - Finished in 10s cpu:15s avg:1.6
0:00:49 INF [natural_earth] -   read     1x(88% 8s sys:1s)
0:00:49 INF [natural_earth] -   process  2x(20% 2s wait:8s)
0:00:49 INF [natural_earth] -   write    1x(0% 0s wait:9s)
0:00:50 INF [osm_pass1] - 
0:00:50 INF [osm_pass1] - Starting...
0:00:52 INF [osm_pass1:process] - Finished nodes: 4,592,754 (1.9M/s) in 2s cpu:4s avg:1.8
0:00:53 INF [osm_pass1:process] - Finished ways: 330,547 (290k/s) in 1s cpu:2s avg:1.8
0:00:53 INF [osm_pass1:process] - Finished relations: 7,702 (129k/s) in 0.1s cpu:0.1s avg:1.9
0:00:53 INF [osm_pass1] -  nodes: [ 4.5M 1.2M/s ] 414M  ways: [ 330k  90k/s ] rels: [ 7.7k 2.1k/s ] blocks: [  618  169/s ]
    cpus: 1.8 gc:  2% heap: 1.7G/4.2G direct: 54M postGC: 2.1G hppc: 879k
    read( -%) ->     (0/4) -> parse( -%) ->     (0/4) -> process( -%)
0:00:53 DEB [osm_pass1] - Processed 618 blocks:
0:00:53 DEB [osm_pass1] -   nodes: 4,592,754 (1.9M/s) in 2s cpu:4s avg:1.8
0:00:53 DEB [osm_pass1] -   ways: 330,547 (290k/s) in 1s cpu:2s avg:1.8
0:00:53 DEB [osm_pass1] -   relations: 7,702 (129k/s) in 0.1s cpu:0.1s avg:1.9
0:00:53 INF [osm_pass1] - Finished in 4s cpu:7s avg:1.8
0:00:53 INF [osm_pass1] -   read     1x(3% 0.1s wait:3s)
0:00:53 INF [osm_pass1] -   parse    1x(66% 2s)
0:00:53 INF [osm_pass1] -   process  1x(34% 1s wait:2s)
0:00:53 INF [osm_pass2] - 
0:00:53 INF [osm_pass2] - Starting...
0:00:56 DEB [osm_pass2:process] - Sorting long long multimap...
0:00:56 INF [osm_pass2:process] - Finished nodes: 4,592,754 (1.7M/s) in 3s cpu:5s avg:2
0:00:56 DEB [osm_pass2:process] - Sorted long long multimap 0s cpu:0.1s avg:1.9
0:00:56 WAR [osm_pass2:process] - No GB polygon for inferring route network types
0:01:03 INF [osm_pass2] -  nodes: [ 4.5M 100% 459k/s ] 414M  ways: [ 160k  49%  16k/s ] rels: [    0   0%    0/s ] features: [ 4.9M  58k/s ] 1.6G  blocks: [  594  96%   59/s ]
    cpus: 2 gc:  1% heap: 3.1G/4.2G direct: 55M postGC: 833M relInfo: 825k mpGeoms: 649k 
    read( 0%) ->   (11/13) -> process(62% 64%) -> (390/53k) -> write( 2%)
0:01:12 INF [osm_pass2:process] - Finished ways: 330,547 (20k/s) in 16s cpu:32s avg:2
0:01:13 INF [osm_pass2] -  nodes: [ 4.5M 100%    0/s ] 414M  ways: [ 330k 100%  16k/s ] rels: [   2k  27%  207/s ] features: [ 5.2M  35k/s ] 1.6G  blocks: [  617 100%    2/s ]
    cpus: 2 gc:  1% heap: 2.7G/4.2G direct: 54M postGC: 836M relInfo: 825k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process(82% 81%) -> (1.2k/53k) -> write( 1%)
0:01:21 INF [osm_pass2:process] - Finished relations: 7,702 (900/s) in 9s cpu:17s avg:2
0:01:23 INF [osm_pass2] -  nodes: [ 4.5M 100%    0/s ] 414M  ways: [ 330k 100%    0/s ] rels: [ 7.7k 100%  594/s ] features: [ 5.2M   3k/s ] 269M  blocks: [  618 100%   <1/s ]
    cpus: 2 gc:  1% heap: 2.2G/4.2G direct: 54M postGC: 826M relInfo: 825k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:01:23 DEB [osm_pass2] - Processed 618 blocks:
0:01:23 DEB [osm_pass2] -   nodes: 4,592,754 (1.7M/s) in 3s cpu:5s avg:2
0:01:23 DEB [osm_pass2] -   ways: 330,547 (20k/s) in 16s cpu:32s avg:2
0:01:23 DEB [osm_pass2] -   relations: 7,702 (900/s) in 9s cpu:17s avg:2
0:01:23 INF [osm_pass2] - Finished in 30s cpu:58s avg:2
0:01:23 INF [osm_pass2] -   read     1x(0% 0s wait:14s done:15s)
0:01:23 INF [osm_pass2] -   process  2x(76% 22s)
0:01:23 INF [osm_pass2] -   write    1x(1% 0.4s wait:29s)
0:01:23 INF [boundaries] - 
0:01:23 INF [boundaries] - Starting...
0:01:23 INF [boundaries] - Creating polygons for 1 boundaries
0:01:23 WAR [boundaries] - Unable to form closed polygon for OSM relation 148838 (likely missing edges)
0:01:23 INF [boundaries] - Finished creating 0 country polygons
0:01:23 INF [boundaries] - Finished in 0s cpu:0s avg:1.1
0:01:23 INF - Deleting node.db to make room for output file
0:01:23 INF [sort] - 
0:01:23 INF [sort] - Starting...
0:01:23 INF [sort] - Grouped 8 chunks into 1
0:01:25 INF [sort] -  chunks: [   1 /   1 100% ] 270M 
    cpus: 1.3 gc:  0% heap: 2.7G/4.2G direct: 54M postGC: 826M
    ->     (0/3) -> worker( -%)
0:01:25 INF [sort] - Finished in 2s cpu:3s avg:1.3
0:01:25 INF [sort] -   worker  1x(81% 2s)
0:01:25 INF - read:0s write:0s sort:1s
0:01:25 INF [mbtiles] - 
0:01:25 INF [mbtiles] - Starting...
0:01:26 DEB [mbtiles:write] - Execute mbtiles: create table metadata (name text, value text);
0:01:26 DEB [mbtiles:write] - Execute mbtiles: create unique index name on metadata (name);
0:01:26 DEB [mbtiles:write] - Execute mbtiles: create table tiles_shallow (
  zoom_level integer,
  tile_column integer,
  tile_row integer,
  tile_data_id integer

  , primary key(zoom_level,tile_column,tile_row)

) without rowid

0:01:26 DEB [mbtiles:write] - Execute mbtiles: create table tiles_data (
  tile_data_id integer primary key,
  tile_data blob
)

0:01:26 DEB [mbtiles:write] - Execute mbtiles: create view tiles AS
select
  tiles_shallow.zoom_level as zoom_level,
  tiles_shallow.tile_column as tile_column,
  tiles_shallow.tile_row as tile_row,
  tiles_data.tile_data as tile_data
from tiles_shallow
join tiles_data on tiles_shallow.tile_data_id = tiles_data.tile_data_id

0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: name=OpenMapTiles
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: format=pbf
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: attribution=<a href="https://www.openmaptiles.org/" target="_blank">&copy; OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: version=3.13.1
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: type=baselayer
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: bounds=-74.07,21.34,-17.84,43.55
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: center=-45.955,32.445,3
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: minzoom=0
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: maxzoom=14
0:01:26 DEB [mbtiles:write] - Set mbtiles metadata: json={"vector_layers":[{"id":"aerodrome_label","fields":{"name_int":"String","iata":"String","ele_ft":"Number","name_de":"String","name":"String","icao":"String","name:en":"String","class":"String","ele":"Number","name_en":"String","name:latin":"String"},"minzoom":10,"maxzoom":14},{"id":"aeroway","fields":{"ref":"String","class":"String"},"minzoom":10,"maxzoom":14},{"id":"boundary","fields":{"disputed":"Number","admin_level":"Number","maritime":"Number","disputed_name":"String"},"minzoom":0,"maxzoom":14},{"id":"building","fields":{"colour":"String","render_height":"Number","render_min_height":"Number"},"minzoom":13,"maxzoom":14},{"id":"housenumber","fields":{"housenumber":"String"},"minzoom":14,"maxzoom":14},{"id":"landcover","fields":{"subclass":"String","class":"String","_numpoints":"Number"},"minzoom":7,"maxzoom":14},{"id":"landuse","fields":{"class":"String"},"minzoom":4,"maxzoom":14},{"id":"mountain_peak","fields":{"name_int":"String","customary_ft":"Number","ele_ft":"Number","name_de":"String","name":"String","rank":"Number","class":"String","name_en":"String","name:latin":"String","ele":"Number"},"minzoom":7,"maxzoom":14},{"id":"park","fields":{"name_int":"String","name_de":"String","name":"String","name:en":"String","class":"String","name_en":"String","name:latin":"String"},"minzoom":6,"maxzoom":14},{"id":"place","fields":{"name:fy":"String","name_int":"String","capital":"Number","name:uk":"String","name:pl":"String","name:nl":"String","name:ru":"String","name:be":"String","name:ko":"String","name_de":"String","name":"String","rank":"Number","name:en":"String","name:eo":"String","class":"String","name:ta":"String","name:hu":"String","name:zh":"String","name_en":"String","name:latin":"String"},"minzoom":2,"maxzoom":14},{"id":"poi","fields":{"name_int":"String","level":"Number","name_de":"String","name":"String","subclass":"String","indoor":"Number","name:en":"String","class":"String","layer":"Number","name:zh":"String","name_en":"String","name:latin":"String"},"minzoom":12,"maxzoom":14},{"id":"transportation","fields":{"brunnel":"String","access":"String","expressway":"Number","bicycle":"String","surface":"String","level":"Number","ramp":"Number","mtb_scale":"String","toll":"Number","layer":"Number","oneway":"Number","network":"String","horse":"String","service":"String","subclass":"String","class":"String","foot":"String"},"minzoom":4,"maxzoom":14},{"id":"transportation_name","fields":{"name_int":"String","route_4":"String","route_3":"String","route_2":"String","route_1":"String","layer":"Number","network":"String","ref":"String","name_de":"String","name":"String","ref_length":"Number","subclass":"String","class":"String","name_en":"String","name:latin":"String"},"minzoom":6,"maxzoom":14},{"id":"water","fields":{"intermittent":"Number","id":"Number","class":"String"},"minzoom":0,"maxzoom":14},{"id":"water_name","fields":{"name_int":"String","name_de":"String","name":"String","intermittent":"Number","class":"String","name_en":"String","name:latin":"String"},"minzoom":9,"maxzoom":14},{"id":"waterway","fields":{"name_int":"String","brunnel":"String","name_de":"String","_relid":"Number","intermittent":"Number","name":"String","class":"String","name:latin":"String","name_en":"String"},"minzoom":4,"maxzoom":14}]}
0:01:27 INF [mbtiles:write] - Starting z0
0:01:27 INF [mbtiles:write] - Finished z0 in 0s cpu:0s avg:10.1, now starting z1
0:01:27 INF [mbtiles:write] - Finished z1 in 0s cpu:0s avg:0, now starting z2
0:01:27 INF [mbtiles:write] - Finished z2 in 0s cpu:0s avg:0, now starting z3
0:01:27 INF [mbtiles:write] - Finished z3 in 0s cpu:0s avg:0, now starting z4
0:01:27 INF [mbtiles:write] - Finished z4 in 0s cpu:0s avg:0, now starting z5
0:01:27 INF [mbtiles:write] - Finished z5 in 0s cpu:0s avg:0, now starting z6
0:01:27 INF [mbtiles:write] - Finished z6 in 0s cpu:0s avg:0, now starting z7
0:01:28 INF [mbtiles:write] - Finished z7 in 0.4s cpu:0.8s avg:2, now starting z8
0:01:29 INF [mbtiles:write] - Finished z8 in 1s cpu:2s avg:2, now starting z9
0:01:30 INF [mbtiles:write] - Finished z9 in 0.7s cpu:1s avg:2, now starting z10
0:01:31 INF [mbtiles:write] - Finished z10 in 0.8s cpu:2s avg:2, now starting z11
0:01:32 INF [mbtiles:write] - Finished z11 in 1s cpu:2s avg:2, now starting z12
0:01:35 INF [mbtiles:write] - Finished z12 in 3s cpu:5s avg:2, now starting z13
0:01:36 INF [mbtiles] -  features: [ 562k  11%  52k/s ] 270M  tiles: [ 289k  27k/s ] 13M  
    cpus: 2 gc:  8% heap: 913M/4.2G direct: 54M postGC: 834M
    read( 1%) -> (214/217) -> encode(58% 60%) -> (215/216) -> write( 7%)
    last tile: 13/2466/3066 (z13 4%) https://www.openstreetmap.org/#map=13/41.17865/-71.63086
0:01:46 INF [mbtiles] -  features: [ 1.3M  25%  74k/s ] 270M  tiles: [ 674k  38k/s ] 27M  
    cpus: 2 gc:  2% heap: 1.2G/4.2G direct: 54M postGC: 811M
    read( 1%) -> (154/217) -> encode(64% 61%) -> (215/216) -> write( 7%)
    last tile: 13/3104/3598 (z13 54%) https://www.openstreetmap.org/#map=13/21.37124/-43.59375
0:01:47 INF [mbtiles:write] - Finished z13 in 13s cpu:26s avg:2, now starting z14
0:01:55 INF [mbtiles:write] - Finished z14 in 7s cpu:13s avg:1.7
0:01:55 INF [mbtiles] -  features: [ 5.2M 100% 461k/s ] 270M  tiles: [ 4.1M 398k/s ] 108M 
    cpus: 1.8 gc:  1% heap: 2.1G/4.2G direct: 54M postGC: 822M
    read( -%) ->   (0/217) -> encode( -%  -%) ->   (0/216) -> write( -%)
    last tile: 14/7380/5985 (z14 100%) https://www.openstreetmap.org/#map=14/43.56447/-17.84180
0:01:55 DEB [mbtiles] - Tile stats:
0:01:55 DEB [mbtiles] - z0 avg:7.9k max:7.9k
0:01:55 DEB [mbtiles] - z1 avg:4k max:4k
0:01:55 DEB [mbtiles] - z2 avg:9.4k max:9.4k
0:01:55 DEB [mbtiles] - z3 avg:3.9k max:6.4k
0:01:55 DEB [mbtiles] - z4 avg:1.6k max:4.6k
0:01:55 DEB [mbtiles] - z5 avg:1.4k max:8.1k
0:01:55 DEB [mbtiles] - z6 avg:973 max:22k
0:01:55 DEB [mbtiles] - z7 avg:751 max:55k
0:01:55 DEB [mbtiles] - z8 avg:394 max:112k
0:01:55 DEB [mbtiles] - z9 avg:270 max:278k
0:01:55 DEB [mbtiles] - z10 avg:154 max:233k
0:01:55 DEB [mbtiles] - z11 avg:102 max:132k
0:01:55 DEB [mbtiles] - z12 avg:83 max:119k
0:01:55 DEB [mbtiles] - z13 avg:71 max:109k
0:01:55 DEB [mbtiles] - z14 avg:67 max:257k
0:01:55 DEB [mbtiles] - all avg:69 max:0
0:01:55 DEB [mbtiles] -  # features: 5,290,333
0:01:55 DEB [mbtiles] -     # tiles: 4,115,450
0:01:55 INF [mbtiles] - Finished in 29s cpu:56s gc:1s avg:1.9
0:01:55 INF [mbtiles] -   read    1x(2% 0.7s wait:27s)
0:01:55 INF [mbtiles] -   encode  2x(54% 16s wait:3s)
0:01:55 INF [mbtiles] -   write   1x(26% 8s wait:19s)
0:01:55 INF - Finished in 1m55s cpu:3m22s gc:4s avg:1.8
0:01:55 INF - FINISHED!
0:01:55 INF - 
0:01:55 INF - ----------------------------------------
0:01:55 INF - 	overall          1m55s cpu:3m22s gc:4s avg:1.8
0:01:55 INF - 	lake_centerlines 2s cpu:4s avg:1.8
0:01:55 INF - 	  read     1x(77% 2s)
0:01:55 INF - 	  process  2x(13% 0.3s wait:2s)
0:01:55 INF - 	  write    1x(0% 0s wait:2s)
0:01:55 INF - 	water_polygons   26s cpu:47s gc:2s avg:1.8
0:01:55 INF - 	  read     1x(61% 16s wait:2s)
0:01:55 INF - 	  process  2x(27% 7s wait:13s)
0:01:55 INF - 	  write    1x(2% 0.6s wait:26s)
0:01:55 INF - 	natural_earth    10s cpu:15s avg:1.6
0:01:55 INF - 	  read     1x(88% 8s sys:1s)
0:01:55 INF - 	  process  2x(20% 2s wait:8s)
0:01:55 INF - 	  write    1x(0% 0s wait:9s)
0:01:55 INF - 	osm_pass1        4s cpu:7s avg:1.8
0:01:55 INF - 	  read     1x(3% 0.1s wait:3s)
0:01:55 INF - 	  parse    1x(66% 2s)
0:01:55 INF - 	  process  1x(34% 1s wait:2s)
0:01:55 INF - 	osm_pass2        30s cpu:58s avg:2
0:01:55 INF - 	  read     1x(0% 0s wait:14s done:15s)
0:01:55 INF - 	  process  2x(76% 22s)
0:01:55 INF - 	  write    1x(1% 0.4s wait:29s)
0:01:55 INF - 	boundaries       0s cpu:0s avg:1.1
0:01:55 INF - 	sort             2s cpu:3s avg:1.3
0:01:55 INF - 	  worker  1x(81% 2s)
0:01:55 INF - 	mbtiles          29s cpu:56s gc:1s avg:1.9
0:01:55 INF - 	  read    1x(2% 0.7s wait:27s)
0:01:55 INF - 	  encode  2x(54% 16s wait:3s)
0:01:55 INF - 	  write   1x(26% 8s wait:19s)
0:01:55 INF - ----------------------------------------
0:01:55 INF - 	features	270MB
0:01:55 INF - 	mbtiles	108MB
-rw-r--r-- 1 runner docker 55M Jun  1 17:23 run.jar

It seems like the code evolved over time from deferring i.e adding the index after the inserts
to skipping adding the index entirely and just logging the DDL statement to create the index.
if (!config.deferIndexCreation()) {
mbtiles.addTileIndex();
}
mbtiles.createTables(config.skipIndexCreation());
Copy link
Contributor

@msbarry msbarry Jun 1, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One other thing I noticed in the mbtiles write benchmark is that it iterates through tile coordinates like this:

    for (int z = 0; z <= 14; z++) {
      int maxCoord = 1 << z;
      for (int x = 0; x < maxCoord; x++) {
        for (int y = 0; y < maxCoord; y++) {

but the tile index order actually inverts Y - could you change the inner one to be:

for (int y = maxCoord - 1; y > 0; y--) {

Copy link
Contributor Author

@bbilger bbilger Jun 1, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch!
(assuming you meant for (int y = maxCoord - 1; y >= 0; y--) {)

* manually
* @return {@code this}
*/
public Mbtiles createTables(boolean skipIndexCreation) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's a little hard to follow what the callers want with the true/false flag... could we make add a createTablesWithoutIndex so it's a bit more clear?

TILES_COL_Y + ", " + TILES_COL_DATA + " blob);");
// here "unique" is much more compact than a "primary key without rowid" because the tile data is part of the table
String tilesUniqueAddition = skipIndexCreation ? "" : """
, unique(%s,%s,%s)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a difference between unique and primary key here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

afaik no - other than the usual stuff that you can have only one PK and cannot insert NULL
=> let me change this to primary key since it expresses its purpose better

Copy link
Contributor

@msbarry msbarry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good! A few minor comments...

@sonarcloud
Copy link

sonarcloud bot commented Jun 1, 2022

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

79.4% 79.4% Coverage
0.0% 0.0% Duplication

@msbarry
Copy link
Contributor

msbarry commented Jun 2, 2022

Looks good, thanks for implementing this! I'll get some performance and DB size tests on the planet along with the other performance improvements before putting out the next release.

@msbarry msbarry merged commit 97642fc into onthegomap:main Jun 2, 2022
mmc1718 pushed a commit to nmr8acme/planetiler that referenced this pull request Jan 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants