PerfettoSQL Built-ins
These are functions built into C++ which reduce the amount of boilerplate which needs to be written in SQL.
Profile Functions
STACK_FROM_STACK_PROFILE_FRAME
STACK_FROM_STACK_PROFILE_FRAME(frame_id)
Description
Creates a stack with just the frame referenced by frame_id
(reference to the
stack_profile_frame table)
Return Type
BYTES
Arguments
Argument | Type | Description |
---|---|---|
frame_id | StackProfileFrameTable::Id | reference to the stack_profile_frame table |
STACK_FROM_STACK_PROFILE_CALLSITE
STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)
Description
Creates a stack by taking a callsite_id
(reference to the
[stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table) and
generating a list of frames (by walking the
[stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table)
Return Type
BYTES
Arguments
Argument | Type | Description |
---|---|---|
callsite_id | StackProfileCallsiteTable::Id | reference to the [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table |
CAT_STACKS
CAT_STACKS(([root [[,level_1 [, ...]], leaf]])
Description
Creates a Stack by concatenating other Stacks. Also accepts STRING values for which it generates a fake Frame. Null values are just ignored.
Return Type
BYTES
Arguments
Argument | Type | Description |
---|---|---|
root | BYTES or STRING | Stack or STRING for which a fake Frame is generated |
... | BYTES or STRING | Stack or STRING for which a fake Frame is generated |
leaf | BYTES or STRING | Stack or STRING for which a fake Frame is generated |
EXPERIMENTAL_PROFILE
EXPERIMENTAL_PROFILE(stack [,sample_type, sample_units, sample_value]*)
Description
Aggregation function that generates a profile in pprof format from the given samples.
Return Type
BYTES
(pprof data)
Arguments
Argument | Type | Description |
---|---|---|
stack | BYTES | Stack or string for which a fake Frame is generated |
sample_type | STRING | Type of the sample value (e.g. size, time) |
sample_units | STRING | Units of the sample value (e.g. bytes, count) |
sample_value | LONG | Value for the sample |
Multiple samples can be specified.
If only the stack
argument is present, a "samples"
, "count"
, and 1
are
used as defaults for sample_type
, sample_units
, and sample_value
respectively.
Example
CPU profile
SELECT
perf_session_id,
EXPERIMENTAL_PROFILE(
STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id),
'samples',
'count',
1) AS profile
FROM perf_sample
GROUP BY perf_session_id
Heap profile
SELECT
EXPERIMENTAL_PROFILE(
CAT_STACKS(heap_name, STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)),
'count',
'count',
count,
'size',
'bytes',
size) AS profile
FROM heap_profile_allocation
WHERE size >= 0 AND count >= 0