6.8.9.1 Memory Allocation
The In-Memory Analyst (PGX) has on-heap
and
off-heap
memory, the earlier being the standard JVM heap while the
latter being a separate heap that is managed by PGX. Just like graph data, intermediate and
final results of PGQL queries are partially stored on-heap and partially off-heap.
Therefore, both heaps are needed.
In case of the on-heap memory, the default maximum is chosen upon startup of
the JVM, but it can be overwritten through the -Xmx
option.
In case of the off-heap, there is no maximum set by default and the off-heap memory
usage, therefore, keeps increasing automatically until it depletes the system resources,
in which case the operation is cancelled, it's memory is released, and an appropriate
exception is passed to the user. If needed, a maximum off-heap size can be configured
through the max_off_heap_size
option of PGX.
A ratio of 1:1 for on-heap vs. off-heap is recommended as a good starting point to allow for the largest possible graphs to be loaded and queried. For example, if you have 256 GB of memory available on your machine, then setting the maximum on-heap to 125 GB will make sure that there is a similar amount of memory available for off-heap:
export JAVA_OPTS="-Xmx125g"
Parent topic: Best Practices for Tuning PGQL Queries