Subject: Re: Controlling resource utilization

From: Juan Rodrigo Alejandro Burgos Mella <[email-masked]>
Date: Tue, 16 Apr 2024 15:29:35 -0500

In postgreSQL, that can be done at a session level, or at a general level
(in the postgresql.conf configuration file)

Atte
JRBM

El mar, 16 abr 2024 a las 15:18, yudhi s (<[email-masked]>)
escribió:

>
>
> On Wed, 17 Apr, 2024, 1:32 am Juan Rodrigo Alejandro Burgos Mella, <
> [email-masked]> wrote:
>
>> Yes sir
>>
>> SET statement_timeout TO '<milliseconds>'
>>
>> Atte
>> JRBM
>>
>> El mar, 16 abr 2024 a las 14:46, yudhi s (<[email-masked]>)
>> escribió:
>>
>>> Hi ,
>>> We want to have controls around the DB resource utilization by the adhoc
>>> user queries, so that it won't impact the application queries negatively.
>>> Its RDS postgresql database version 15.4.
>>>
>>> Saw one parameter as statement_timeout which restricts the queries to
>>> not run after a certain time duration and queries will be automatically
>>> killed/cancelled. However, I don't see any other options to set this at
>>> user level, rather it's getting set for all or at session level. So I want
>>> to know if there exists, anyway to control the database resource
>>> utilization specific to users?
>>>
>>> Regards
>>> Yudhi
>>>
>>
>
> This will set the timeout at session level. However, We want to
> understand, if it can be done at user/role level, so that any such adhoc
> user queries can be auto killed or cancelled after the set time.
>
>>
>>>

---

From: [email-masked]
Date: Wed, 17 Apr 2024 09:10:16 +0200 (CEST)

> De: "Juan Rodrigo Alejandro Burgos Mella" <[email-masked]>
> À: "yudhi s" <[email-masked]>
> Cc: "pgsql-general" <[email-masked]>
> Envoyé: Mardi 16 Avril 2024 22:29:35
> Objet: Re: Controlling resource utilization

> In postgreSQL, that can be done at a session level, or at a general level (in
> the postgresql.conf configuration file)

> El mar, 16 abr 2024 a las 15:18, yudhi s (< [ mailto:[email-masked]
> | [email-masked] ] >) escribió:

>> On Wed, 17 Apr, 2024, 1:32 am Juan Rodrigo Alejandro Burgos Mella, < [
>> mailto:[email-masked] | [email-masked] ] > wrote:

>>> El mar, 16 abr 2024 a las 14:46, yudhi s (< [ mailto:[email-masked]
>>> | [email-masked] ] >) escribió:

>>>> Hi ,
>>>> We want to have controls around the DB resource utilization by the adhoc user
>>>> queries, so that it won't impact the application queries negatively. Its RDS
>>>> postgresql database version 15.4.
>>>> Saw one parameter as statement_timeout which restricts the queries to not run
>>>> after a certain time duration and queries will be automatically
>>>> killed/cancelled. However, I don't see any other options to set this at user
>>>> level, rather it's getting set for all or at session level. So I want to know
>>>> if there exists, anyway to control the database resource utilization specific
>>>> to users?
>>>> Regards
>>>> Yudhi

>> This will set the timeout at session level. However, We want to understand, if
>> it can be done at user/role level, so that any such adhoc user queries can be
>> auto killed or cancelled after the set time.

Or also at role/user level : 
ALTER ROLE < your - username > SET statement_timeout = '<time_unit>' ; 
Regards 
Gilles

---

From: yudhi s <[email-masked]>
Date: Wed, 17 Apr 2024 13:12:49 +0530

On Wed, 17 Apr, 2024, 12:40 pm , <[email-masked]> wrote:

>
>
> ------------------------------
>
> *De: *"Juan Rodrigo Alejandro Burgos Mella" <[email-masked]>
> *À: *"yudhi s" <[email-masked]>
> *Cc: *"pgsql-general" <[email-masked]>
> *Envoyé: *Mardi 16 Avril 2024 22:29:35
> *Objet: *Re: Controlling resource utilization
>
> ALTER ROLE <your-username> SET statement_timeout = '<time_unit>';
>
> Regards
> Gilles
>
>

Thank you so much. That helps.

This statement is succeeding for user as I executed. So it's working I
believe.

But to immediately verify without manually running queries and waiting for
it to be auto killed to confirm, Is there any system table which we can
verify to see if this setting is effective, as because I don't see any such
columns in pg_user or pg_role which shows the statement_timeout.

 And is there a way to put similar cap/restrictions on other db resources
like cpu, memory, I/O at specific user/role level?

---

From: [email-masked]
Date: Wed, 17 Apr 2024 10:14:23 +0200 (CEST)

> De: "yudhi" <[email-masked]>
> À: "gparc" <[email-masked]>
> Cc: "Juan Rodrigo Alejandro Burgos Mella" <[email-masked]>,
> "pgsql-general" <[email-masked]>
> Envoyé: Mercredi 17 Avril 2024 09:42:49

> On Wed, 17 Apr, 2024, 12:40 pm , < [ mailto:[email-masked] | [email-masked] ] >
> wrote:

>>> De: "Juan Rodrigo Alejandro Burgos Mella" < [
>>> mailto:[email-masked] | [email-masked] ] >
>>> À: "yudhi s" < [ mailto:[email-masked] |
>>> [email-masked] ] >
>>> Cc: "pgsql-general" < [ mailto:[email-masked] |
>>> [email-masked] ] >

> This statement is succeeding for user as I executed. So it's working I believe.

> But to immediately verify without manually running queries and waiting for it to
> be auto killed to confirm, Is there any system table which we can verify to see
> if this setting is effective, as because I don't see any such columns in
> pg_user or pg_role which shows the statement_timeout.

> And is there a way to put similar cap/restrictions on other db resources like
> cpu, memory, I/O at specific user/role level?

To verify the setting, you can use this command in psql : \drds <your-username> 

Concerning system resources like CPUs it's not possible. 
You can use pg_settings view to see which setting you can change and in which context : [ https://www.postgresql.org/docs/current/view-pg-settings.html | https://www.postgresql.org/docs/current/view-pg-settings.html ] 

Regards 
Gilles