...
It's proposed to create 3 levels of memory trackers:
First and second trackers are configurable, third tracker is for internal usage.
Tracker on each level stores amount of memory, allocated by the tracked element and pass this information to the upper level tracker. When tracked element releases the rows (one by one or entirely), corresponding changes should be also reflected to the upper level tracker.
...
Code Block | ||||
---|---|---|---|---|
| ||||
public interface MemoryTracker { public void onMemoryAllocated(long size); public void onMemoryReleased(long size); public void clearreset(); } |
For execution node memory tracker:
Code Block | ||||
---|---|---|---|---|
| ||||
public interface RowTracker<Row> { public void onRowAdded(Row row); public void onRowRemoved(Row row); public void clearreset(); } |
Query memory tracker and execution node trackers are single threaded, global memory tracker can be called from the different threads. To reduce contention to upper level trackers track events can be batched on lower level trackers.
...