Real purpose of "query_budget_KB"
I am trying to deal with some load (volume) issues we are having and in the process have been goiing through memory settings and concurrency. In reading through various pages of documentation I came across the "query_budge_kb" value of the resource_pool_status table. I cannot however find a good explanation of *exactly* what it does - the definition in the manual "The current amount of memory that queries are tuned to use." does not tell me the impact of having it too high or too low.
In my case, the query_budget_kb is only 327mb but the average memory inuse by a query in this pool is almost 2gb and clearly some use much more than that so I can assume it is not limiting what is allowed to run. Anyone have a good explanation of the impact of having it too high or too low ?
Side note - the calculation is funky as well. If memory_size_kb for the pool is 0 and all the memory is borrowed from the general pool, then its (queueing_threshold_kb / planned_concurrency). The manual says: "If MEMORYSIZE is set for the pool other than the GENERAL pool, the target memory is set to Queuing Threshold of the pool/ PLANNEDCONCURRENCY of the pool. Queuing threshold of the pool is based off MEMORYSIZE". That second sentence leads to the confusion for me - what i observe is that if there is a memory_size_kb set for the pool, it ignores the queueing_threshold_kb and just calculates it as (memory_size_kb / planned_concurrency).
max_memory_size_kb: 81,837,186 (70%)
planned_concurrency: 24 (set)
max_memory_size_kb: 93,528,214 (80%)
planned_concurrency: 16 (set from AUTO)
I *expected* the query_budget to be 88gb/16 = 5.5gb; but instead its 5gb/16 = 337mb.
Input is appreciated! thanks