CREATE RESOURCE GROUP reference
Resource groups isolate competing query workloads inside a single QuestDB instance.
CREATE RESOURCE GROUP creates a query workload policy.
For what the limits actually guarantee, see resource groups.
Syntax
CREATE RESOURCE GROUP [IF NOT EXISTS] groupName
[WITH ( parameter = value [, parameter = value ...] )];
Parameters
Every parameter is optional. An unset parameter falls back to the instance default, which is not always "unlimited":
| Parameter | Accepted values | Unset behaviour |
|---|---|---|
cpu_weight | integer, 1 to 10000 | 100 |
max_active_queries | integer, 1 or more | unlimited |
max_queued_queries | integer, 0 or more | unlimited |
queue_timeout | whole milliseconds, or a duration such as '15s' or '2m' | 30 seconds |
memory_limit | a byte size such as '8G', or 0 or UNLIMITED for no group ceiling | no group ceiling |
Description
CREATE RESOURCE GROUP adds a policy with no principals mapped to it. Creating
the group alone changes nothing: map a user, ACL group or service account to it
with ALTER USER,
ALTER GROUP or
ALTER SERVICE ACCOUNT before it
governs anything.
The name must be unique across resource groups. If it is already taken the
statement fails, unless IF NOT EXISTS is included.
The statement requires the
RESOURCE GROUP ADMIN permission.
Creating a second resource group engages CPU scheduling for the whole instance.
While DEFAULT is the only group there is no CPU slicing at all, so weights
have no effect until a second group exists. See
when scheduling engages.
A group ceiling only ever lowers what a query may use. memory_limit is capped
by resource.groups.process.memory.limit.bytes, and it never raises a limit set
on the principal or by cairo.query.memory.limit.bytes.
Examples
CREATE RESOURCE GROUP analytics;
CREATE RESOURCE GROUP reporting WITH (
cpu_weight = 50,
max_active_queries = 4,
memory_limit = '2G'
);
CREATE RESOURCE GROUP IF NOT EXISTS exports WITH (
cpu_weight = 10,
max_active_queries = 1
);
Verify with resource_groups():
SELECT name, cpu_weight, max_active_queries, memory_limit_bytes
FROM resource_groups()
ORDER BY name;
| name | cpu_weight | max_active_queries | memory_limit_bytes |
|---|---|---|---|
| DEFAULT | 100 | null | 0 |
| analytics | 100 | null | 0 |
| exports | 10 | 1 | 0 |
| reporting | 50 | 4 | 2147483648 |
max_active_queries is null when the group sets no admission limit, and
memory_limit_bytes is 0 when it sets no memory ceiling. cpu_weight always
reports an effective value, so a group that sets none shows 100.