127 lines
3.1 KiB
Markdown
127 lines
3.1 KiB
Markdown
# Built-in Functions
|
||
|
||
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](sql-tables.autogen#stack_profile_frame) table)
|
||
|
||
#### Return Type
|
||
|
||
`BYTES`
|
||
|
||
#### Arguments
|
||
|
||
Argument | Type | Description
|
||
-------- | ---- | -----------
|
||
frame_id | StackProfileFrameTable::Id | reference to the [stack_profile_frame](sql-tables.autogen#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](https://github.com/google/pprof) format from the given samples.
|
||
|
||
#### Return Type
|
||
|
||
`BYTES` ([pprof](https://github.com/google/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
|
||
|
||
```sql
|
||
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
|
||
|
||
```sql
|
||
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
|
||
``` |