A key issue in the road towards a high performance application is to understand where resources are being spent. This information can be obtained using different tools and at different levels of abstraction. A coarse grain insight for a particular application can be obtained using injection of the necessary performance capturing statements in the MAL instruction sequence. Fine-grain, platform specific information can be obtained using existing profilers, like valgrind (http://www.valgrind.org), or hardware performance counters.
The execution profiler is supported by hooks in the MAL interpreter. The default strategy is to ship an event record immediately over a stream to a separate performance monitor, formatted as a tuple.
Profiling the system is a security leak. All events are assembled in a global performance trace table. Any eligible MonetDB user can grab the event stream and through its information watch what actions are performed against the system. The trace should be reserved for the database administrator or in-personalised for all others.