MAL profiler JSON format¶
The MAL profiler events are relevant for both end-users to identify expensive relational operators or intermediate sizes, and the MonetDB development team to expose some internal states. The JSON objects emitted by the MonetDB profiler may contain the following fields:
- version
The MonetDB server version. If it is an unreleased version it includes the mercurial commit id of the code base used to compile the server.
- user
The id of the SQL user running the queries.
- clk
nanoseconds since the UNIX epoch.
- mclk
nanoseconds since the start of the MonetDB server.
- thread
The id of the thread that executes this instruction.
- program
The full name of the MAL block containing this instruction.
- pc
The program counter.
- tag
The identifier of the MAL block containing this instruction.
- module
The name of the MAL module that defines this instruction.
- function
The name of the MAL block containing this instruction.
- barrier
The instruction starts a repetition block.
- operator
The MAL language operator that defines this MAL block.
- session
A UUID that identifies the MonetDB server process.
- state
What is the execution state for this instruction. Possible states are “start” and “done”.
- args
An array containing information about the arguments and return values of this instruction.
- ret/arg
The index of the variable in the sequence of return values/arguments.
- var
The variable name.
- alias
The fully qualified name (
schema.table.name
) of the SQL column that corresponds to this variable if available.- type
The MAL type of the variable.
- const
1 if the variable is a constant, known at query compile time, or 0 otherwise.
- value
The variable value.
- eol
The end-of-life (end-of-scope) of a variable in a MAL program.
Additionally if the variable’s type is BAT, a sequence of basic types, then a number of extra fields may be shown:
- view
“true” if the BAT is a view (no storage overhead), “false” otherwise.
- persistence
“persistent” or “transient”.
- sorted
1 if the values in the bat are sorted in ascending order, 0 otherwise.
- revsorted
1 if the values it the bat are sorted in descending order, 0 otherwise. Note that a BAT might be both sorted and revsorted if all its values are equal.
- nonil
1 if the BAT does not contain nil values.
- nil
1 if the BAT contains nil values.
- key
1 if the BAT contains unique values.
- file
The filename of the file that contains the BAT if it is persistent.
- count
How many values are there in the BAT.
- size
The total size in bytes of the BAT.
- usec
micro second execution time
Finally there are a number of fields that have been used for debugging the profiler itself or the MonetDB server more generally. These include:
- parent
For views the BAT it depends on.
- seqbase
The value of the first oid in a BAT.
- bid
Index in the BBP (BAT buffer pool).
- used
Detect superflous variables in the MAL plans.
- fixed
Freeze the type of a variable.
- udf
User-defined implementation.
These fields might be dropped or changed in future releases of MonetDB and applications should NOT depend on them.
Note: The combination of the fields session
, tag
, and pc
uniquely
identifies a single MAL instruction. The combination of session
, tag
,
pc
and state
, uniquely identifies a single JSON object.