Replies: 4 comments 6 replies
-
You mention only 5% CPU used and it's a 24 core system. Are there some processes which use 70-100% CPU or are all running processes under 10%? The output of By 'nominatim-api' you mean you followed https://nominatim.org/release-docs/latest/admin/Deployment-Python/ and it's all HTTP requests. (Ther's also a docker setup and one can use Nominatim as a python library, I just want to check what you use). |
Beta Was this translation helpful? Give feedback.
-
Thanks for your response. I reworked my code in databricks and eliminated threading in favor of spark-parallelization. Subsequently spark uses all available CPU-Cores to do the work. Since the cluster currently only has 16 Cores available (it tries to scale, but the subscription does not allow more nodes), there should be a far better performance possible, but now it takes ~15ms to resolve one address to geo-coordinates over http and the CPU-Usage on nominatim goes to 400%, what is still not that much as long as 2400% are available. |
Beta Was this translation helpful? Give feedback.
-
Since the library is only for local usage, it would be nice, if there would be an api-endpoint for batch-processing. |
Beta Was this translation helpful? Give feedback.
-
Thanks for your suggestion. I will keep the existing setup. It is ok, if the initial load will take about 2 days. The ongoing data ingest will be fast enough. |
Beta Was this translation helpful? Give feedback.
-
I have running nominatim on a VM with 128 GB RAM and 24 Cores. My storage is on a zfs-pool of 8 nvme-ssds, connected via 2 x 10 GBit/s. It takes ~45ms to resolve one address with a structured query against the api. Since i need to resolve initially approx. 6.6 million addresses to geo-coordinates, it would take me approx. 82.5 hours to resolve all addresses. This is not a big deal, but i wonder what seems to be the bottleneck in my setup.
The resolving-script (python) runs in Azure databricks. The cluster in databricks has up to 10 worker nodes available.
In fact, only 2 worker nodes are running the python-script, that fires against the nominatim-api with 500 worker-threads in parallel. More than those 2 worker-nodes will not be used, so the databricks-cluster seems not to be the bottle-neck. My nominatim-VM uses all the 128 GB RAM, what seems to be totaly fine, but the CPU is only used by 5 %. Also the disk- and network-usage is really low. Nominatim is based behind a reverse-proxy, but also the VM that runs the reverse-provy has also really low CPU and network-usage.
So the question is, what limits the throughput? I am totally aware of internet-latency and so on, but parallelization should increase the throughput. But there seems to be a limit.
I found, that increasing the worker-threads in the python-script from 100 to 500 did not increase the throughput. Less than 100 worker-threads seem to lower the thoughput.
So i found, that the postgres-instance is limited to max. 100 parallel connections. After i increased the limit to 500 and restarting the postgres-instance, seemingly nothing has changed on the throughput.
How can i figure out, where the bottleneck is?
Beta Was this translation helpful? Give feedback.
All reactions