| ==== |
| ---- QUERY |
| # All queries in this file are run with num_nodes=1 by default unless specified. |
| ############################ |
| # No mem_limit set |
| # check if mem_admitted is same as mem_estimate |
| set request_pool=regularPool; |
| # set this to make estimates deterministic. |
| set num_scanner_threads=2; |
| select * from (select * from functional_parquet.alltypes limit 10) A, |
| (select * from functional_parquet.alltypes limit 10) B; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Per-Host Resource Estimates: Memory=64MB.* |
| row_regex: .*Cluster Memory Admitted: 64.00 MB.* |
| ==== |
| ---- QUERY |
| # No mem_limit set |
| # lower bound enforced based on largest min_reservation (32.09 MB for this query) |
| set request_pool=poolLowMinLimit; |
| select * from functional_parquet.alltypes limit 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Per-Host Resource Estimates: Memory=16MB.* |
| row_regex: .*Cluster Memory Admitted: 32.09 MB.* |
| ==== |
| ---- QUERY |
| # No mem_limit set |
| # lower bound enforced based on largest min_reservation (32.09 MB for this query) but the |
| # upper bound enforced by pool.max_query_mem_limit takes precedence that cause the query |
| # to be rejected eventually. |
| set request_pool=poolLowMaxLimit; |
| select * from functional_parquet.alltypes limit 1; |
| ---- CATCH |
| Rejected query from pool root.poolLowMaxLimit: minimum memory reservation is greater than |
| memory available to the query for buffer reservations. Memory reservation needed given |
| the current plan: 88.00 KB. Adjust either the mem_limit or the pool config |
| (max-query-mem-limit, min-query-mem-limit) for the query to allow the query |
| memory limit to be at least 32.09 MB. Note that changing the mem_limit may also change |
| the plan. See the query profile for more information about the per-node memory |
| requirements. |
| ==== |
| ---- QUERY |
| # No mem_limit set |
| # Upper bound enforced by pool.max_query_mem_limit |
| set request_pool=regularPool; |
| # set this to make estimates deterministic. |
| set num_scanner_threads=2; |
| select * from functional_parquet.alltypes A, functional_parquet.alltypes B where |
| A.int_col = B.int_col limit 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Per-Host Resource Estimates: Memory=67MB.* |
| row_regex: .*Cluster Memory Admitted: 66.94 MB.* |
| ==== |
| ---- QUERY |
| # No mem_limit set |
| # Upper bound enforced by pool.max_query_mem_limit |
| set request_pool=regularPool; |
| # set this to make estimates deterministic. |
| set num_scanner_threads=2; |
| # Disable the estimation of cardinality for an hdfs table withot stats. |
| set DISABLE_HDFS_NUM_ROWS_ESTIMATE=1; |
| select * from functional_parquet.alltypes A, functional_parquet.alltypes B where |
| A.int_col = B.int_col limit 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Per-Host Resource Estimates: Memory=2.06GB.* |
| row_regex: .*Cluster Memory Admitted: 1.50 GB.* |
| ==== |
| ---- QUERY |
| # No mem_limit set |
| # Lower bound enforced by pool.min_query_mem_limit |
| set request_pool=regularPool; |
| select 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Per-Host Resource Estimates: Memory=10MB.* |
| row_regex: .*Cluster Memory Admitted: 50.00 MB.* |
| ==== |
| ---- QUERY |
| ############################ |
| # mem_limit is set |
| # check if mem_admitted is same as mem_limit set in query options |
| set request_pool=regularPool; |
| set mem_limit=200mb; |
| select 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Cluster Memory Admitted: 200.00 MB.* |
| ==== |
| ---- QUERY |
| # mem_limit is set |
| # No lower bound enforced based on largest min_reservation (32.09 MB for this query) |
| set request_pool=poolLowMinLimit; |
| set mem_limit=27mb; |
| select * from functional_parquet.alltypes limit 1; |
| ---- CATCH |
| Rejected query from pool root.poolLowMinLimit: minimum memory reservation is greater than |
| memory available to the query for buffer reservations. Memory reservation needed given |
| the current plan: 88.00 KB. Adjust either the mem_limit or the pool config |
| (max-query-mem-limit, min-query-mem-limit) for the query to allow the query |
| memory limit to be at least 32.09 MB. Note that changing the mem_limit may also change |
| the plan. See the query profile for more information about the per-node memory |
| requirements. |
| ==== |
| ---- QUERY |
| # mem_limit is set and pool.clamp_mem_limit_query_option is true |
| # Upper bound using pool.max_query_mem_limit |
| set request_pool=regularPool; |
| set mem_limit=2G; |
| select 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Cluster Memory Admitted: 1.50 GB.* |
| ==== |
| ---- QUERY |
| # mem_limit is set and pool.clamp_mem_limit_query_option is true |
| # Lower bound using pool.min_query_mem_limit |
| set request_pool=regularPool; |
| set mem_limit=40mb; |
| select 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Cluster Memory Admitted: 50.00 MB.* |
| ==== |
| ---- QUERY |
| # mem_limit is set and pool.clamp_mem_limit_query_option is false |
| # Upper bound using pool.max_query_mem_limit |
| set request_pool=regularPoolWithoutClamping; |
| set mem_limit=2G; |
| select 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Cluster Memory Admitted: 2.00 GB.* |
| ==== |
| ---- QUERY |
| # mem_limit is set and pool.clamp_mem_limit_query_option is false |
| # Lower bound using pool.min_query_mem_limit |
| set request_pool=regularPoolWithoutClamping; |
| set mem_limit=50mb; |
| select 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Cluster Memory Admitted: 50.00 MB.* |
| ==== |
| ---- QUERY |
| ############################ |
| # Old behaviour: Both pool.max_query_mem_limit and pool.min_query_mem_limit are zero |
| # No mem_limit set, check that the mem_estimate is used as mem_admitted and is allowed to |
| # run which implies that it passes the check for min mem_limit required based on largest |
| # min_reservation because the mem_limit is -1 (since it is not set in query options) |
| set request_pool=poolNoMemLimits; |
| select 1; |
| ---- RUNTIME_PROFILE |
| row_regex: .*Per-Host Resource Estimates: Memory=10MB.* |
| row_regex: .*Cluster Memory Admitted: 10.00 MB.* |
| ==== |
| ---- QUERY |
| ############################ |
| # Invalid pool config |
| # min_query_mem_limit is greater than the max_query_mem_limit |
| set request_pool=maxLessThanMinLimit; |
| Select 1; |
| ---- CATCH |
| Rejected query from pool root.maxLessThanMinLimit: Invalid pool config: the |
| min_query_mem_limit is greater than the max_query_mem_limit (100001 > 100000) |
| ==== |
| ---- QUERY |
| # Invalid pool config |
| # min_query_mem_limit is greater than the max_mem_resources |
| set request_pool=maxMemLessThanMinLimit; |
| Select 1; |
| ---- CATCH |
| Rejected query from pool root.maxMemLessThanMinLimit: Invalid pool config: the |
| min_query_mem_limit 2621440001 is greater than the max_mem_resources 2621440000 |
| (configured statically) |
| ==== |