You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2018/05/12 02:38:42 UTC

[4/7] impala git commit: IMPALA-6957: calc thread resource requirement in planner

http://git-wip-us.apache.org/repos/asf/impala/blob/e12ee485/testdata/workloads/functional-planner/queries/PlannerTest/resource-requirements.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/resource-requirements.test b/testdata/workloads/functional-planner/queries/PlannerTest/resource-requirements.test
index 008b290..59c7fa2 100644
--- a/testdata/workloads/functional-planner/queries/PlannerTest/resource-requirements.test
+++ b/testdata/workloads/functional-planner/queries/PlannerTest/resource-requirements.test
@@ -1,13 +1,13 @@
 # Parquet scan
 select * from tpch_parquet.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=40.00MB
+Max Per-Host Resource Reservation: Memory=40.00MB Threads=2
 Per-Host Resource Estimates: Memory=80.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=80.00MB mem-reservation=40.00MB
+|  Per-Host Resources: mem-estimate=80.00MB mem-reservation=40.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_parquet.lineitem]
    partitions=1/1 files=3 size=193.71MB
@@ -15,66 +15,66 @@ PLAN-ROOT SINK
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=40.00MB
+   mem-estimate=80.00MB mem-reservation=40.00MB thread-reservation=1
    tuple-ids=0 row-size=263B cardinality=6001215
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=40.00MB
+Max Per-Host Resource Reservation: Memory=40.00MB Threads=3
 Per-Host Resource Estimates: Memory=80.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=263B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=80.00MB mem-reservation=40.00MB
+Per-Host Resources: mem-estimate=80.00MB mem-reservation=40.00MB thread-reservation=2
 00:SCAN HDFS [tpch_parquet.lineitem, RANDOM]
    partitions=1/1 files=3 size=193.71MB
    stored statistics:
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=40.00MB
+   mem-estimate=80.00MB mem-reservation=40.00MB thread-reservation=1
    tuple-ids=0 row-size=263B cardinality=6001215
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=80.00MB
+Max Per-Host Resource Reservation: Memory=80.00MB Threads=3
 Per-Host Resource Estimates: Memory=160.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=263B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=160.00MB mem-reservation=80.00MB
+Per-Host Resources: mem-estimate=160.00MB mem-reservation=80.00MB thread-reservation=2
 00:SCAN HDFS [tpch_parquet.lineitem, RANDOM]
    partitions=1/1 files=3 size=193.71MB
    stored statistics:
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=40.00MB
+   mem-estimate=80.00MB mem-reservation=40.00MB thread-reservation=0
    tuple-ids=0 row-size=263B cardinality=6001215
 ====
 # Single column parquet scan - memory reservation is reduced compared to multi-column
 # scan.
 select l_comment from tpch_parquet.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=4.00MB
+Max Per-Host Resource Reservation: Memory=4.00MB Threads=2
 Per-Host Resource Estimates: Memory=80.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=80.00MB mem-reservation=4.00MB
+|  Per-Host Resources: mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_parquet.lineitem]
    partitions=1/1 files=3 size=193.71MB
@@ -82,67 +82,67 @@ PLAN-ROOT SINK
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=4.00MB
+   mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=1
    tuple-ids=0 row-size=42B cardinality=6001215
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=4.00MB
+Max Per-Host Resource Reservation: Memory=4.00MB Threads=3
 Per-Host Resource Estimates: Memory=80.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=42B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=80.00MB mem-reservation=4.00MB
+Per-Host Resources: mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=2
 00:SCAN HDFS [tpch_parquet.lineitem, RANDOM]
    partitions=1/1 files=3 size=193.71MB
    stored statistics:
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=4.00MB
+   mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=1
    tuple-ids=0 row-size=42B cardinality=6001215
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=3
 Per-Host Resource Estimates: Memory=160.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=42B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=160.00MB mem-reservation=8.00MB
+Per-Host Resources: mem-estimate=160.00MB mem-reservation=8.00MB thread-reservation=2
 00:SCAN HDFS [tpch_parquet.lineitem, RANDOM]
    partitions=1/1 files=3 size=193.71MB
    stored statistics:
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=4.00MB
+   mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=0
    tuple-ids=0 row-size=42B cardinality=6001215
 ====
 # Small parquet files - memory reservation is reduced because of small file size.
 select string_col from functional_parquet.alltypes;
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=16.00KB
+Max Per-Host Resource Reservation: Memory=16.00KB Threads=2
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=16.00KB
+|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=16.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [functional_parquet.alltypes]
    partitions=24/24 files=24 size=188.29KB
@@ -151,25 +151,25 @@ PLAN-ROOT SINK
      partitions: 0/24 rows=unavailable
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=16.00KB
+   mem-estimate=16.00MB mem-reservation=16.00KB thread-reservation=1
    tuple-ids=0 row-size=16B cardinality=unavailable
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=16.00KB
+Max Per-Host Resource Reservation: Memory=16.00KB Threads=3
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=16B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=16.00MB mem-reservation=16.00KB
+Per-Host Resources: mem-estimate=16.00MB mem-reservation=16.00KB thread-reservation=2
 00:SCAN HDFS [functional_parquet.alltypes, RANDOM]
    partitions=24/24 files=24 size=188.29KB
    stored statistics:
@@ -177,25 +177,25 @@ Per-Host Resources: mem-estimate=16.00MB mem-reservation=16.00KB
      partitions: 0/24 rows=unavailable
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=16.00KB
+   mem-estimate=16.00MB mem-reservation=16.00KB thread-reservation=1
    tuple-ids=0 row-size=16B cardinality=unavailable
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=32.00KB
+Max Per-Host Resource Reservation: Memory=32.00KB Threads=3
 Per-Host Resource Estimates: Memory=32.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=16B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=32.00MB mem-reservation=32.00KB
+Per-Host Resources: mem-estimate=32.00MB mem-reservation=32.00KB thread-reservation=2
 00:SCAN HDFS [functional_parquet.alltypes, RANDOM]
    partitions=24/24 files=24 size=188.29KB
    stored statistics:
@@ -203,22 +203,22 @@ Per-Host Resources: mem-estimate=32.00MB mem-reservation=32.00KB
      partitions: 0/24 rows=unavailable
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=16.00KB
+   mem-estimate=16.00MB mem-reservation=16.00KB thread-reservation=0
    tuple-ids=0 row-size=16B cardinality=unavailable
 ====
 # Multi-column parquet scan with small files - memory reservation is reduced because of
 # small file size but a minimum amount is reserved per column.
 select int_col, float_col, string_col from functional_parquet.alltypes;
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=24.00KB
+Max Per-Host Resource Reservation: Memory=24.00KB Threads=2
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=24.00KB
+|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=24.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [functional_parquet.alltypes]
    partitions=24/24 files=24 size=188.29KB
@@ -227,25 +227,25 @@ PLAN-ROOT SINK
      partitions: 0/24 rows=unavailable
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=24.00KB
+   mem-estimate=16.00MB mem-reservation=24.00KB thread-reservation=1
    tuple-ids=0 row-size=24B cardinality=unavailable
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=24.00KB
+Max Per-Host Resource Reservation: Memory=24.00KB Threads=3
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=24B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=16.00MB mem-reservation=24.00KB
+Per-Host Resources: mem-estimate=16.00MB mem-reservation=24.00KB thread-reservation=2
 00:SCAN HDFS [functional_parquet.alltypes, RANDOM]
    partitions=24/24 files=24 size=188.29KB
    stored statistics:
@@ -253,25 +253,25 @@ Per-Host Resources: mem-estimate=16.00MB mem-reservation=24.00KB
      partitions: 0/24 rows=unavailable
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=24.00KB
+   mem-estimate=16.00MB mem-reservation=24.00KB thread-reservation=1
    tuple-ids=0 row-size=24B cardinality=unavailable
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=48.00KB
+Max Per-Host Resource Reservation: Memory=48.00KB Threads=3
 Per-Host Resource Estimates: Memory=32.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=24B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=32.00MB mem-reservation=48.00KB
+Per-Host Resources: mem-estimate=32.00MB mem-reservation=48.00KB thread-reservation=2
 00:SCAN HDFS [functional_parquet.alltypes, RANDOM]
    partitions=24/24 files=24 size=188.29KB
    stored statistics:
@@ -279,22 +279,22 @@ Per-Host Resources: mem-estimate=32.00MB mem-reservation=48.00KB
      partitions: 0/24 rows=unavailable
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=24.00KB
+   mem-estimate=16.00MB mem-reservation=24.00KB thread-reservation=0
    tuple-ids=0 row-size=24B cardinality=unavailable
 ====
 # Parquet scan with no materialized columns. Need reservation to scan levels to determine
 # row count.
 select 'foo' from functional_parquet.alltypes
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=16.00KB
+Max Per-Host Resource Reservation: Memory=16.00KB Threads=2
 Per-Host Resource Estimates: Memory=10.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=1.00MB mem-reservation=16.00KB
+|  Per-Host Resources: mem-estimate=1.00MB mem-reservation=16.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [functional_parquet.alltypes]
    partitions=24/24 files=24 size=188.29KB
@@ -303,25 +303,25 @@ PLAN-ROOT SINK
      partitions: 0/24 rows=unavailable
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=1.00MB mem-reservation=16.00KB
+   mem-estimate=1.00MB mem-reservation=16.00KB thread-reservation=1
    tuple-ids=0 row-size=0B cardinality=unavailable
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=16.00KB
+Max Per-Host Resource Reservation: Memory=16.00KB Threads=3
 Per-Host Resource Estimates: Memory=10.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=0B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=1.00MB mem-reservation=16.00KB
+Per-Host Resources: mem-estimate=1.00MB mem-reservation=16.00KB thread-reservation=2
 00:SCAN HDFS [functional_parquet.alltypes, RANDOM]
    partitions=24/24 files=24 size=188.29KB
    stored statistics:
@@ -329,25 +329,25 @@ Per-Host Resources: mem-estimate=1.00MB mem-reservation=16.00KB
      partitions: 0/24 rows=unavailable
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=1.00MB mem-reservation=16.00KB
+   mem-estimate=1.00MB mem-reservation=16.00KB thread-reservation=1
    tuple-ids=0 row-size=0B cardinality=unavailable
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=32.00KB
+Max Per-Host Resource Reservation: Memory=32.00KB Threads=3
 Per-Host Resource Estimates: Memory=32.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=0B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=32.00MB mem-reservation=32.00KB
+Per-Host Resources: mem-estimate=32.00MB mem-reservation=32.00KB thread-reservation=2
 00:SCAN HDFS [functional_parquet.alltypes, RANDOM]
    partitions=24/24 files=24 size=188.29KB
    stored statistics:
@@ -355,20 +355,20 @@ Per-Host Resources: mem-estimate=32.00MB mem-reservation=32.00KB
      partitions: 0/24 rows=unavailable
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=16.00KB
+   mem-estimate=16.00MB mem-reservation=16.00KB thread-reservation=0
    tuple-ids=0 row-size=0B cardinality=unavailable
 ====
 # Parquet scan - reservation estimate based on dictionary-encoded size reduces
 # reservation for column with low NDV.
 select c_nationkey from tpch_parquet.customer
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=128.00KB
+Max Per-Host Resource Reservation: Memory=128.00KB Threads=2
 Per-Host Resource Estimates: Memory=24.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=24.00MB mem-reservation=128.00KB
+|  Per-Host Resources: mem-estimate=24.00MB mem-reservation=128.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_parquet.customer]
    partitions=1/1 files=1 size=12.31MB
@@ -376,20 +376,20 @@ PLAN-ROOT SINK
      table: rows=150000 size=12.31MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=150000
-   mem-estimate=24.00MB mem-reservation=128.00KB
+   mem-estimate=24.00MB mem-reservation=128.00KB thread-reservation=1
    tuple-ids=0 row-size=2B cardinality=150000
 ====
 # Parquet scan - reservation estimate based on uncompressed size reduces reservation
 # for fixed-width column with high NDV.
 select c_custkey from tpch_parquet.customer
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=2.00MB
+Max Per-Host Resource Reservation: Memory=2.00MB Threads=2
 Per-Host Resource Estimates: Memory=24.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=24.00MB mem-reservation=2.00MB
+|  Per-Host Resources: mem-estimate=24.00MB mem-reservation=2.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_parquet.customer]
    partitions=1/1 files=1 size=12.31MB
@@ -397,7 +397,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=12.31MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=150000
-   mem-estimate=24.00MB mem-reservation=2.00MB
+   mem-estimate=24.00MB mem-reservation=2.00MB thread-reservation=1
    tuple-ids=0 row-size=8B cardinality=150000
 ====
 # Parquet scan - reservation estimate is not reduced based on column stats when they
@@ -405,15 +405,15 @@ PLAN-ROOT SINK
 # the column size to significantly smaller than the file size.
 select c_mktsegment from functional_parquet.customer_multiblock
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=512.00KB
+Max Per-Host Resource Reservation: Memory=512.00KB Threads=2
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_parquet.customer_multiblock
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=512.00KB
+|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [functional_parquet.customer_multiblock]
    partitions=1/1 files=1 size=482.93KB
@@ -421,20 +421,20 @@ PLAN-ROOT SINK
      table: rows=unavailable size=unavailable
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=512.00KB
+   mem-estimate=16.00MB mem-reservation=512.00KB thread-reservation=1
    tuple-ids=0 row-size=16B cardinality=unavailable
 ====
 # Parquet nested types, unnested in scan - should reserve memory for each column.
 select o_orderkey, o_orderstatus, o_totalprice, o_orderdate, o_orderpriority, o_clerk
 from tpch_nested_parquet.customer.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=24.00MB
+Max Per-Host Resource Reservation: Memory=24.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=24.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=24.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders]
    partitions=1/1 files=4 size=288.98MB
@@ -442,7 +442,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=24.00MB
+   mem-estimate=88.00MB mem-reservation=24.00MB thread-reservation=1
    tuple-ids=0 row-size=80B cardinality=1500000
 ====
 # Parquet nested types, unnested in scan - don't reserve extra memory for "pos" virtual
@@ -450,13 +450,13 @@ PLAN-ROOT SINK
 select o_orderkey, pos
 from tpch_nested_parquet.customer.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=4.00MB
+Max Per-Host Resource Reservation: Memory=4.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=4.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=4.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders]
    partitions=1/1 files=4 size=288.98MB
@@ -464,7 +464,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=4.00MB
+   mem-estimate=88.00MB mem-reservation=4.00MB thread-reservation=1
    tuple-ids=0 row-size=16B cardinality=1500000
 ====
 # Parquet nested types, unnested in scan - reserve memory for "pos" virtual column if it
@@ -472,13 +472,13 @@ PLAN-ROOT SINK
 select pos
 from tpch_nested_parquet.customer.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=4.00MB
+Max Per-Host Resource Reservation: Memory=4.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=4.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=4.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_nested_parquet.customer.c_orders]
    partitions=1/1 files=4 size=288.98MB
@@ -486,7 +486,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=4.00MB
+   mem-estimate=88.00MB mem-reservation=4.00MB thread-reservation=1
    tuple-ids=0 row-size=8B cardinality=1500000
 ====
 # Parquet nested types, left nested in scan - should reserve memory for each scalar
@@ -495,32 +495,32 @@ select c_custkey, o_orderkey, o_orderstatus, o_totalprice, o_orderdate, o_orderp
     o_clerk
 from tpch_nested_parquet.customer c, c.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=32.00MB
+Max Per-Host Resource Reservation: Memory=32.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_nested_parquet.customer
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=32.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=32.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:SUBPLAN
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1,0 row-size=104B cardinality=1500000
 |
 |--04:NESTED LOOP JOIN [CROSS JOIN]
-|  |  mem-estimate=24B mem-reservation=0B
+|  |  mem-estimate=24B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=1,0 row-size=104B cardinality=10
 |  |
 |  |--02:SINGULAR ROW SRC
 |  |     parent-subplan=01
-|  |     mem-estimate=0B mem-reservation=0B
+|  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |     tuple-ids=0 row-size=24B cardinality=1
 |  |
 |  03:UNNEST [c.c_orders]
 |     parent-subplan=01
-|     mem-estimate=0B mem-reservation=0B
+|     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |     tuple-ids=1 row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
@@ -530,7 +530,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns missing stats: c_orders
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=32.00MB
+   mem-estimate=88.00MB mem-reservation=32.00MB thread-reservation=1
    tuple-ids=0 row-size=24B cardinality=150000
 ====
 # Parquet nested types, left nested in scan - should reserve memory for each scalar
@@ -538,32 +538,32 @@ PLAN-ROOT SINK
 select c_custkey, o_orderkey, pos
 from tpch_nested_parquet.customer c, c.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_nested_parquet.customer
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:SUBPLAN
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1,0 row-size=40B cardinality=1500000
 |
 |--04:NESTED LOOP JOIN [CROSS JOIN]
-|  |  mem-estimate=24B mem-reservation=0B
+|  |  mem-estimate=24B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=1,0 row-size=40B cardinality=10
 |  |
 |  |--02:SINGULAR ROW SRC
 |  |     parent-subplan=01
-|  |     mem-estimate=0B mem-reservation=0B
+|  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |     tuple-ids=0 row-size=24B cardinality=1
 |  |
 |  03:UNNEST [c.c_orders]
 |     parent-subplan=01
-|     mem-estimate=0B mem-reservation=0B
+|     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |     tuple-ids=1 row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
@@ -573,7 +573,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns missing stats: c_orders
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=24B cardinality=150000
 ====
 # Parquet nested types, left nested in scan - should reserve memory for virtual
@@ -582,32 +582,32 @@ PLAN-ROOT SINK
 select c_custkey, pos
 from tpch_nested_parquet.customer c, c.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_nested_parquet.customer
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:SUBPLAN
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1,0 row-size=32B cardinality=1500000
 |
 |--04:NESTED LOOP JOIN [CROSS JOIN]
-|  |  mem-estimate=24B mem-reservation=0B
+|  |  mem-estimate=24B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=1,0 row-size=32B cardinality=10
 |  |
 |  |--02:SINGULAR ROW SRC
 |  |     parent-subplan=01
-|  |     mem-estimate=0B mem-reservation=0B
+|  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |     tuple-ids=0 row-size=24B cardinality=1
 |  |
 |  03:UNNEST [c.c_orders]
 |     parent-subplan=01
-|     mem-estimate=0B mem-reservation=0B
+|     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |     tuple-ids=1 row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
@@ -617,7 +617,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns missing stats: c_orders
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=24B cardinality=150000
 ====
 # Parquet nested types, left nested in scan - should reserve memory for nested column
@@ -626,32 +626,32 @@ PLAN-ROOT SINK
 select c_custkey
 from tpch_nested_parquet.customer c, c.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_nested_parquet.customer
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:SUBPLAN
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1,0 row-size=24B cardinality=1500000
 |
 |--04:NESTED LOOP JOIN [CROSS JOIN]
-|  |  mem-estimate=24B mem-reservation=0B
+|  |  mem-estimate=24B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=1,0 row-size=24B cardinality=10
 |  |
 |  |--02:SINGULAR ROW SRC
 |  |     parent-subplan=01
-|  |     mem-estimate=0B mem-reservation=0B
+|  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |     tuple-ids=0 row-size=24B cardinality=1
 |  |
 |  03:UNNEST [c.c_orders]
 |     parent-subplan=01
-|     mem-estimate=0B mem-reservation=0B
+|     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |     tuple-ids=1 row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
@@ -661,7 +661,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns missing stats: c_orders
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=24B cardinality=150000
 ====
 # Parquet nested types, left nested in scan - should reserve memory for nested column
@@ -669,32 +669,32 @@ PLAN-ROOT SINK
 select o_orderkey
 from tpch_nested_parquet.customer c, c.c_orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=4.00MB
+Max Per-Host Resource Reservation: Memory=4.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_nested_parquet.customer
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=4.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=4.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:SUBPLAN
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1,0 row-size=24B cardinality=1500000
 |
 |--04:NESTED LOOP JOIN [CROSS JOIN]
-|  |  mem-estimate=16B mem-reservation=0B
+|  |  mem-estimate=16B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=1,0 row-size=24B cardinality=10
 |  |
 |  |--02:SINGULAR ROW SRC
 |  |     parent-subplan=01
-|  |     mem-estimate=0B mem-reservation=0B
+|  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |     tuple-ids=0 row-size=16B cardinality=1
 |  |
 |  03:UNNEST [c.c_orders]
 |     parent-subplan=01
-|     mem-estimate=0B mem-reservation=0B
+|     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |     tuple-ids=1 row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
@@ -704,7 +704,7 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=4.00MB
+   mem-estimate=88.00MB mem-reservation=4.00MB thread-reservation=1
    tuple-ids=0 row-size=16B cardinality=150000
 ====
 # Parquet nested types with two levels of nesting materialized in scan. Should
@@ -712,50 +712,50 @@ PLAN-ROOT SINK
 select c_custkey, o_orderkey, l_comment
 from tpch_nested_parquet.customer c, c.c_orders o, o.o_lineitems
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=16.00MB
+Max Per-Host Resource Reservation: Memory=16.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_nested_parquet.customer
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=16.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=16.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:SUBPLAN
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=2,1,0 row-size=64B cardinality=15000000
 |
 |--08:NESTED LOOP JOIN [CROSS JOIN]
-|  |  mem-estimate=24B mem-reservation=0B
+|  |  mem-estimate=24B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=2,1,0 row-size=64B cardinality=100
 |  |
 |  |--02:SINGULAR ROW SRC
 |  |     parent-subplan=01
-|  |     mem-estimate=0B mem-reservation=0B
+|  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |     tuple-ids=0 row-size=24B cardinality=1
 |  |
 |  04:SUBPLAN
-|  |  mem-estimate=0B mem-reservation=0B
+|  |  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  tuple-ids=2,1 row-size=40B cardinality=100
 |  |
 |  |--07:NESTED LOOP JOIN [CROSS JOIN]
-|  |  |  mem-estimate=24B mem-reservation=0B
+|  |  |  mem-estimate=24B mem-reservation=0B thread-reservation=0
 |  |  |  tuple-ids=2,1 row-size=40B cardinality=10
 |  |  |
 |  |  |--05:SINGULAR ROW SRC
 |  |  |     parent-subplan=04
-|  |  |     mem-estimate=0B mem-reservation=0B
+|  |  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |  |     tuple-ids=1 row-size=24B cardinality=1
 |  |  |
 |  |  06:UNNEST [o.o_lineitems]
 |  |     parent-subplan=04
-|  |     mem-estimate=0B mem-reservation=0B
+|  |     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  |     tuple-ids=2 row-size=0B cardinality=10
 |  |
 |  03:UNNEST [c.c_orders o]
 |     parent-subplan=01
-|     mem-estimate=0B mem-reservation=0B
+|     mem-estimate=0B mem-reservation=0B thread-reservation=0
 |     tuple-ids=1 row-size=0B cardinality=10
 |
 00:SCAN HDFS [tpch_nested_parquet.customer c]
@@ -766,19 +766,19 @@ PLAN-ROOT SINK
      table: rows=150000 size=288.98MB
      columns missing stats: c_orders
    extrapolated-rows=disabled max-scan-range-rows=44229
-   mem-estimate=88.00MB mem-reservation=16.00MB
+   mem-estimate=88.00MB mem-reservation=16.00MB thread-reservation=1
    tuple-ids=0 row-size=24B cardinality=150000
 ====
 # Text scan
 select * from tpch.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch.lineitem]
    partitions=1/1 files=1 size=718.94MB
@@ -786,65 +786,65 @@ PLAN-ROOT SINK
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=263B cardinality=6001215
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=3
 Per-Host Resource Estimates: Memory=88.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=263B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 00:SCAN HDFS [tpch.lineitem, RANDOM]
    partitions=1/1 files=1 size=718.94MB
    stored statistics:
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=263B cardinality=6001215
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=16.00MB
+Max Per-Host Resource Reservation: Memory=16.00MB Threads=3
 Per-Host Resource Estimates: Memory=176.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=263B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB
+Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB thread-reservation=2
 00:SCAN HDFS [tpch.lineitem, RANDOM]
    partitions=1/1 files=1 size=718.94MB
    stored statistics:
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=0
    tuple-ids=0 row-size=263B cardinality=6001215
 ====
 # Single column text scan - memory reservation is same as multi-column scan.
 select l_comment from tpch.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch.lineitem]
    partitions=1/1 files=1 size=718.94MB
@@ -852,66 +852,66 @@ PLAN-ROOT SINK
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=42B cardinality=6001215
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=3
 Per-Host Resource Estimates: Memory=88.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=42B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 00:SCAN HDFS [tpch.lineitem, RANDOM]
    partitions=1/1 files=1 size=718.94MB
    stored statistics:
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=42B cardinality=6001215
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=16.00MB
+Max Per-Host Resource Reservation: Memory=16.00MB Threads=3
 Per-Host Resource Estimates: Memory=176.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=42B cardinality=6001215
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB
+Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB thread-reservation=2
 00:SCAN HDFS [tpch.lineitem, RANDOM]
    partitions=1/1 files=1 size=718.94MB
    stored statistics:
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=0
    tuple-ids=0 row-size=42B cardinality=6001215
 ====
 # Text scan on small files - memory reservation is reduced.
 select * from functional.alltypes
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=32.00KB
+Max Per-Host Resource Reservation: Memory=32.00KB Threads=2
 Per-Host Resource Estimates: Memory=16.00MB
 Codegen disabled by planner
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB
+|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [functional.alltypes]
    partitions=24/24 files=24 size=478.45KB
@@ -920,24 +920,24 @@ PLAN-ROOT SINK
      partitions: 24/24 rows=7300
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=310
-   mem-estimate=16.00MB mem-reservation=32.00KB
+   mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=1
    tuple-ids=0 row-size=97B cardinality=7300
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=32.00KB
+Max Per-Host Resource Reservation: Memory=32.00KB Threads=3
 Per-Host Resource Estimates: Memory=16.00MB
 Codegen disabled by planner
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=97B cardinality=7300
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB
+Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=2
 00:SCAN HDFS [functional.alltypes, RANDOM]
    partitions=24/24 files=24 size=478.45KB
    stored statistics:
@@ -945,24 +945,24 @@ Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB
      partitions: 24/24 rows=7300
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=310
-   mem-estimate=16.00MB mem-reservation=32.00KB
+   mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=1
    tuple-ids=0 row-size=97B cardinality=7300
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=64.00KB
+Max Per-Host Resource Reservation: Memory=64.00KB Threads=3
 Per-Host Resource Estimates: Memory=32.00MB
 Codegen disabled by planner
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=97B cardinality=7300
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=32.00MB mem-reservation=64.00KB
+Per-Host Resources: mem-estimate=32.00MB mem-reservation=64.00KB thread-reservation=2
 00:SCAN HDFS [functional.alltypes, RANDOM]
    partitions=24/24 files=24 size=478.45KB
    stored statistics:
@@ -970,21 +970,21 @@ Per-Host Resources: mem-estimate=32.00MB mem-reservation=64.00KB
      partitions: 24/24 rows=7300
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=310
-   mem-estimate=16.00MB mem-reservation=32.00KB
+   mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=0
    tuple-ids=0 row-size=97B cardinality=7300
 ====
 # Avro scan.
 select * from tpch_avro.orders
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_avro.orders
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_avro.orders]
    partitions=1/1 files=2 size=156.92MB
@@ -992,71 +992,71 @@ PLAN-ROOT SINK
      table: rows=unavailable size=156.92MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=108B cardinality=unavailable
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=3
 Per-Host Resource Estimates: Memory=88.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_avro.orders
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=108B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=2 instances=2
-Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 00:SCAN HDFS [tpch_avro.orders, RANDOM]
    partitions=1/1 files=2 size=156.92MB
    stored statistics:
      table: rows=unavailable size=156.92MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=108B cardinality=unavailable
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=16.00MB
+Max Per-Host Resource Reservation: Memory=16.00MB Threads=5
 Per-Host Resource Estimates: Memory=176.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_avro.orders
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=108B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=2 instances=4
-Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB
+Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB thread-reservation=4
 00:SCAN HDFS [tpch_avro.orders, RANDOM]
    partitions=1/1 files=2 size=156.92MB
    stored statistics:
      table: rows=unavailable size=156.92MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=108B cardinality=unavailable
 ====
 # RC scan.
 select * from tpch_rc.customer
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=32.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_rc.customer
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=32.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=32.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_rc.customer]
    partitions=1/1 files=1 size=22.47MB
@@ -1064,71 +1064,71 @@ PLAN-ROOT SINK
      table: rows=unavailable size=22.47MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=32.00MB mem-reservation=8.00MB
+   mem-estimate=32.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=98B cardinality=unavailable
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=3
 Per-Host Resource Estimates: Memory=32.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_rc.customer
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=98B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-Per-Host Resources: mem-estimate=32.00MB mem-reservation=8.00MB
+Per-Host Resources: mem-estimate=32.00MB mem-reservation=8.00MB thread-reservation=2
 00:SCAN HDFS [tpch_rc.customer, RANDOM]
    partitions=1/1 files=1 size=22.47MB
    stored statistics:
      table: rows=unavailable size=22.47MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=32.00MB mem-reservation=8.00MB
+   mem-estimate=32.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=98B cardinality=unavailable
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=16.00MB
+Max Per-Host Resource Reservation: Memory=16.00MB Threads=5
 Per-Host Resource Estimates: Memory=64.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpch_rc.customer
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=98B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=2
-Per-Host Resources: mem-estimate=64.00MB mem-reservation=16.00MB
+Per-Host Resources: mem-estimate=64.00MB mem-reservation=16.00MB thread-reservation=4
 00:SCAN HDFS [tpch_rc.customer, RANDOM]
    partitions=1/1 files=1 size=22.47MB
    stored statistics:
      table: rows=unavailable size=22.47MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=32.00MB mem-reservation=8.00MB
+   mem-estimate=32.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=98B cardinality=unavailable
 ====
 # Seq scan.
 select * from tpcds_seq_snap.web_returns
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpcds_seq_snap.web_returns
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpcds_seq_snap.web_returns]
    partitions=1/1 files=1 size=6.61MB
@@ -1136,69 +1136,69 @@ PLAN-ROOT SINK
      table: rows=unavailable size=6.61MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=8.00MB
+   mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=104B cardinality=unavailable
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=3
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpcds_seq_snap.web_returns
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=104B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-Per-Host Resources: mem-estimate=16.00MB mem-reservation=8.00MB
+Per-Host Resources: mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=2
 00:SCAN HDFS [tpcds_seq_snap.web_returns, RANDOM]
    partitions=1/1 files=1 size=6.61MB
    stored statistics:
      table: rows=unavailable size=6.61MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=8.00MB
+   mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=104B cardinality=unavailable
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=16.00MB
+Max Per-Host Resource Reservation: Memory=16.00MB Threads=5
 Per-Host Resource Estimates: Memory=32.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 tpcds_seq_snap.web_returns
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=104B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=2
-Per-Host Resources: mem-estimate=32.00MB mem-reservation=16.00MB
+Per-Host Resources: mem-estimate=32.00MB mem-reservation=16.00MB thread-reservation=4
 00:SCAN HDFS [tpcds_seq_snap.web_returns, RANDOM]
    partitions=1/1 files=1 size=6.61MB
    stored statistics:
      table: rows=unavailable size=6.61MB
      columns: unavailable
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=8.00MB
+   mem-estimate=16.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=104B cardinality=unavailable
 ====
 # ORC scan
 select * from tpch_orc_def.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=40.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=40.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=40.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_orc_def.lineitem]
    partitions=1/1 files=6 size=144.66MB
@@ -1206,19 +1206,19 @@ PLAN-ROOT SINK
      table: rows=6001215 size=144.66MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1075682
-   mem-estimate=40.00MB mem-reservation=8.00MB
+   mem-estimate=40.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=263B cardinality=6001215
 ====
 # Single column ORC scan - memory reservation is same as multi-column scan.
 select l_comment from tpch_orc_def.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=40.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=40.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=40.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [tpch_orc_def.lineitem]
    partitions=1/1 files=6 size=144.66MB
@@ -1226,21 +1226,21 @@ PLAN-ROOT SINK
      table: rows=6001215 size=144.66MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1075682
-   mem-estimate=40.00MB mem-reservation=8.00MB
+   mem-estimate=40.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=42B cardinality=6001215
 ====
 # ORC scan on small files - memory reservation is reduced.
 select * from functional_orc_def.alltypes
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=88.00KB
+Max Per-Host Resource Reservation: Memory=88.00KB Threads=2
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_orc_def.alltypes
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=88.00KB
+|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=88.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [functional_orc_def.alltypes]
    partitions=24/24 files=24 size=42.27KB
@@ -1249,21 +1249,21 @@ PLAN-ROOT SINK
      partitions: 0/24 rows=unavailable
      columns missing stats: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=88.00KB
+   mem-estimate=16.00MB mem-reservation=88.00KB thread-reservation=1
    tuple-ids=0 row-size=88B cardinality=unavailable
 ====
 # Mixed table format scan
 select * from functional.alltypesmixedformat
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=32.00KB
+Max Per-Host Resource Reservation: Memory=32.00KB Threads=2
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional.alltypesmixedformat
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB
+|  Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HDFS [functional.alltypesmixedformat]
    partitions=3/3 files=3 size=58.17KB
@@ -1272,25 +1272,25 @@ PLAN-ROOT SINK
      partitions: 0/3 rows=unavailable
      columns missing stats: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=32.00KB
+   mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=1
    tuple-ids=0 row-size=88B cardinality=unavailable
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=32.00KB
+Max Per-Host Resource Reservation: Memory=32.00KB Threads=3
 Per-Host Resource Estimates: Memory=16.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional.alltypesmixedformat
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=88B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB
+Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=2
 00:SCAN HDFS [functional.alltypesmixedformat, RANDOM]
    partitions=3/3 files=3 size=58.17KB
    stored statistics:
@@ -1298,25 +1298,25 @@ Per-Host Resources: mem-estimate=16.00MB mem-reservation=32.00KB
      partitions: 0/3 rows=unavailable
      columns missing stats: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=32.00KB
+   mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=1
    tuple-ids=0 row-size=88B cardinality=unavailable
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=64.00KB
+Max Per-Host Resource Reservation: Memory=64.00KB Threads=5
 Per-Host Resource Estimates: Memory=32.00MB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional.alltypesmixedformat
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=88B cardinality=unavailable
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=32.00MB mem-reservation=64.00KB
+Per-Host Resources: mem-estimate=32.00MB mem-reservation=64.00KB thread-reservation=4
 00:SCAN HDFS [functional.alltypesmixedformat, RANDOM]
    partitions=3/3 files=3 size=58.17KB
    stored statistics:
@@ -1324,130 +1324,130 @@ Per-Host Resources: mem-estimate=32.00MB mem-reservation=64.00KB
      partitions: 0/3 rows=unavailable
      columns missing stats: id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col
    extrapolated-rows=disabled max-scan-range-rows=unavailable
-   mem-estimate=16.00MB mem-reservation=32.00KB
+   mem-estimate=16.00MB mem-reservation=32.00KB thread-reservation=1
    tuple-ids=0 row-size=88B cardinality=unavailable
 ====
 # HBase scan
 select * from functional_hbase.alltypes
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=0B
+Max Per-Host Resource Reservation: Memory=0B Threads=1
 Per-Host Resource Estimates: Memory=1.00GB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_hbase.alltypes
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B
+|  Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN HBASE [functional_hbase.alltypes]
    stored statistics:
      table: rows=unavailable
      columns: unavailable
-   mem-estimate=1.00GB mem-reservation=0B
+   mem-estimate=1.00GB mem-reservation=0B thread-reservation=0
    tuple-ids=0 row-size=88B cardinality=14298
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=0B
+Max Per-Host Resource Reservation: Memory=0B Threads=2
 Per-Host Resource Estimates: Memory=1.00GB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_hbase.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=88B cardinality=14298
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B
+Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B thread-reservation=1
 00:SCAN HBASE [functional_hbase.alltypes]
    stored statistics:
      table: rows=unavailable
      columns: unavailable
-   mem-estimate=1.00GB mem-reservation=0B
+   mem-estimate=1.00GB mem-reservation=0B thread-reservation=0
    tuple-ids=0 row-size=88B cardinality=14298
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=0B
+Max Per-Host Resource Reservation: Memory=0B Threads=3
 Per-Host Resource Estimates: Memory=2.00GB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional_hbase.alltypes
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=88B cardinality=14298
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=2
-Per-Host Resources: mem-estimate=2.00GB mem-reservation=0B
+Per-Host Resources: mem-estimate=2.00GB mem-reservation=0B thread-reservation=2
 00:SCAN HBASE [functional_hbase.alltypes]
    stored statistics:
      table: rows=unavailable
      columns: unavailable
-   mem-estimate=1.00GB mem-reservation=0B
+   mem-estimate=1.00GB mem-reservation=0B thread-reservation=0
    tuple-ids=0 row-size=88B cardinality=14298
 ====
 # Data source scan
 select * from functional.alltypes_datasource
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=0B
+Max Per-Host Resource Reservation: Memory=0B Threads=1
 Per-Host Resource Estimates: Memory=1.00GB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional.alltypes_datasource
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B
+|  Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:SCAN DATA SOURCE [functional.alltypes_datasource]
-   mem-estimate=1.00GB mem-reservation=0B
+   mem-estimate=1.00GB mem-reservation=0B thread-reservation=0
    tuple-ids=0 row-size=116B cardinality=5000
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=0B
+Max Per-Host Resource Reservation: Memory=0B Threads=2
 Per-Host Resource Estimates: Memory=1.00GB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional.alltypes_datasource
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=116B cardinality=5000
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=1
-Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B
+Per-Host Resources: mem-estimate=1.00GB mem-reservation=0B thread-reservation=1
 00:SCAN DATA SOURCE [functional.alltypes_datasource]
-   mem-estimate=1.00GB mem-reservation=0B
+   mem-estimate=1.00GB mem-reservation=0B thread-reservation=0
    tuple-ids=0 row-size=116B cardinality=5000
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=0B
+Max Per-Host Resource Reservation: Memory=0B Threads=3
 Per-Host Resource Estimates: Memory=2.00GB
 WARNING: The following tables are missing relevant table and/or column statistics.
 functional.alltypes_datasource
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=0 row-size=116B cardinality=5000
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=1 instances=2
-Per-Host Resources: mem-estimate=2.00GB mem-reservation=0B
+Per-Host Resources: mem-estimate=2.00GB mem-reservation=0B thread-reservation=2
 00:SCAN DATA SOURCE [functional.alltypes_datasource]
-   mem-estimate=1.00GB mem-reservation=0B
+   mem-estimate=1.00GB mem-reservation=0B thread-reservation=0
    tuple-ids=0 row-size=116B cardinality=5000
 ====
 # Union
@@ -1455,17 +1455,17 @@ select * from tpch.lineitem
 union all
 select * from tpch.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=2
 Per-Host Resource Estimates: Memory=88.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+|  Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 00:UNION
 |  pass-through-operands: all
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=2 row-size=263B cardinality=12002430
 |
 |--02:SCAN HDFS [tpch.lineitem]
@@ -1474,7 +1474,7 @@ PLAN-ROOT SINK
 |       table: rows=6001215 size=718.94MB
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=1068457
-|     mem-estimate=88.00MB mem-reservation=8.00MB
+|     mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
 |     tuple-ids=1 row-size=263B cardinality=6001215
 |
 01:SCAN HDFS [tpch.lineitem]
@@ -1483,26 +1483,26 @@ PLAN-ROOT SINK
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=263B cardinality=6001215
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=8.00MB
+Max Per-Host Resource Reservation: Memory=8.00MB Threads=3
 Per-Host Resource Estimates: Memory=88.00MB
 
 F03:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 03:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=2 row-size=263B cardinality=12002430
 |
 F02:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
+Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=2
 00:UNION
 |  pass-through-operands: all
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=2 row-size=263B cardinality=12002430
 |
 |--02:SCAN HDFS [tpch.lineitem, RANDOM]
@@ -1511,7 +1511,7 @@ Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
 |       table: rows=6001215 size=718.94MB
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=1068457
-|     mem-estimate=88.00MB mem-reservation=8.00MB
+|     mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
 |     tuple-ids=1 row-size=263B cardinality=6001215
 |
 01:SCAN HDFS [tpch.lineitem, RANDOM]
@@ -1520,26 +1520,26 @@ Per-Host Resources: mem-estimate=88.00MB mem-reservation=8.00MB
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=1
    tuple-ids=0 row-size=263B cardinality=6001215
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=16.00MB
+Max Per-Host Resource Reservation: Memory=16.00MB Threads=3
 Per-Host Resource Estimates: Memory=176.00MB
 
 F03:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 03:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=2 row-size=263B cardinality=12002430
 |
 F02:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB
+Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB thread-reservation=2
 00:UNION
 |  pass-through-operands: all
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=2 row-size=263B cardinality=12002430
 |
 |--02:SCAN HDFS [tpch.lineitem, RANDOM]
@@ -1548,7 +1548,7 @@ Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB
 |       table: rows=6001215 size=718.94MB
 |       columns: all
 |     extrapolated-rows=disabled max-scan-range-rows=1068457
-|     mem-estimate=88.00MB mem-reservation=8.00MB
+|     mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=0
 |     tuple-ids=1 row-size=263B cardinality=6001215
 |
 01:SCAN HDFS [tpch.lineitem, RANDOM]
@@ -1557,7 +1557,7 @@ Per-Host Resources: mem-estimate=176.00MB mem-reservation=16.00MB
      table: rows=6001215 size=718.94MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=1068457
-   mem-estimate=88.00MB mem-reservation=8.00MB
+   mem-estimate=88.00MB mem-reservation=8.00MB thread-reservation=0
    tuple-ids=0 row-size=263B cardinality=6001215
 ====
 # Grouping aggregation
@@ -1565,18 +1565,18 @@ select l_orderkey, count(*)
 from tpch_parquet.lineitem
 group by l_orderkey
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=38.00MB
+Max Per-Host Resource Reservation: Memory=38.00MB Threads=2
 Per-Host Resource Estimates: Memory=114.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=114.00MB mem-reservation=38.00MB
+|  Per-Host Resources: mem-estimate=114.00MB mem-reservation=38.00MB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:AGGREGATE [FINALIZE]
 |  output: count(*)
 |  group by: l_orderkey
-|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB
+|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 00:SCAN HDFS [tpch_parquet.lineitem]
@@ -1585,39 +1585,39 @@ PLAN-ROOT SINK
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=4.00MB
+   mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=1
    tuple-ids=0 row-size=8B cardinality=6001215
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=46.50MB
+Max Per-Host Resource Reservation: Memory=46.50MB Threads=4
 Per-Host Resource Estimates: Memory=124.00MB
 
 F02:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 04:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 F01:PLAN FRAGMENT [HASH(l_orderkey)] hosts=3 instances=3
-Per-Host Resources: mem-estimate=10.00MB mem-reservation=8.50MB
+Per-Host Resources: mem-estimate=10.00MB mem-reservation=8.50MB thread-reservation=1
 03:AGGREGATE [FINALIZE]
 |  output: count:merge(*)
 |  group by: l_orderkey
-|  mem-estimate=10.00MB mem-reservation=8.50MB spill-buffer=512.00KB
+|  mem-estimate=10.00MB mem-reservation=8.50MB spill-buffer=512.00KB thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 02:EXCHANGE [HASH(l_orderkey)]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=3
-Per-Host Resources: mem-estimate=114.00MB mem-reservation=38.00MB
+Per-Host Resources: mem-estimate=114.00MB mem-reservation=38.00MB thread-reservation=2
 01:AGGREGATE [STREAMING]
 |  output: count(*)
 |  group by: l_orderkey
-|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB
+|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 00:SCAN HDFS [tpch_parquet.lineitem, RANDOM]
@@ -1626,39 +1626,39 @@ Per-Host Resources: mem-estimate=114.00MB mem-reservation=38.00MB
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=4.00MB
+   mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=1
    tuple-ids=0 row-size=8B cardinality=6001215
 ---- PARALLELPLANS
-Max Per-Host Resource Reservation: Memory=85.50MB
+Max Per-Host Resource Reservation: Memory=85.50MB Threads=5
 Per-Host Resource Estimates: Memory=248.00MB
 
 F02:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=0B mem-reservation=0B
+|  Per-Host Resources: mem-estimate=0B mem-reservation=0B thread-reservation=1
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 04:EXCHANGE [UNPARTITIONED]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 F01:PLAN FRAGMENT [HASH(l_orderkey)] hosts=3 instances=6
-Per-Host Resources: mem-estimate=20.00MB mem-reservation=9.50MB
+Per-Host Resources: mem-estimate=20.00MB mem-reservation=9.50MB thread-reservation=2
 03:AGGREGATE [FINALIZE]
 |  output: count:merge(*)
 |  group by: l_orderkey
-|  mem-estimate=10.00MB mem-reservation=4.75MB spill-buffer=256.00KB
+|  mem-estimate=10.00MB mem-reservation=4.75MB spill-buffer=256.00KB thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 02:EXCHANGE [HASH(l_orderkey)]
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 F00:PLAN FRAGMENT [RANDOM] hosts=3 instances=6
-Per-Host Resources: mem-estimate=228.00MB mem-reservation=76.00MB
+Per-Host Resources: mem-estimate=228.00MB mem-reservation=76.00MB thread-reservation=2
 01:AGGREGATE [STREAMING]
 |  output: count(*)
 |  group by: l_orderkey
-|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB
+|  mem-estimate=34.00MB mem-reservation=34.00MB spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=1 row-size=16B cardinality=1563438
 |
 00:SCAN HDFS [tpch_parquet.lineitem, RANDOM]
@@ -1667,23 +1667,23 @@ Per-Host Resources: mem-estimate=228.00MB mem-reservation=76.00MB
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=80.00MB mem-reservation=4.00MB
+   mem-estimate=80.00MB mem-reservation=4.00MB thread-reservation=0
    tuple-ids=0 row-size=8B cardinality=6001215
 ====
 # Non-grouping aggregation with zero-slot parquet scan
 select count(*) from tpch_parquet.lineitem
 ---- PLAN
-Max Per-Host Resource Reservation: Memory=128.00KB
+Max Per-Host Resource Reservation: Memory=128.00KB Threads=2
 Per-Host Resource Estimates: Memory=11.00MB
 
 F00:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=11.00MB mem-reservation=128.00KB
+|  Per-Host Resources: mem-estimate=11.00MB mem-reservation=128.00KB thread-reservation=2
 PLAN-ROOT SINK
-|  mem-estimate=0B mem-reservation=0B
+|  mem-estimate=0B mem-reservation=0B thread-reservation=0
 |
 01:AGGREGATE [FINALIZE]
 |  output: sum_init_zero(tpch_parquet.lineitem.parquet-stats: num_rows)
-|  mem-estimate=10.00MB mem-reservation=0B spill-buffer=2.00MB
+|  mem-estimate=10.00MB mem-reservation=0B spill-buffer=2.00MB thread-reservation=0
 |  tuple-ids=1 row-size=8B cardinality=1
 |
 00:SCAN HDFS [tpch_parquet.lineitem]
@@ -1692,31 +1692,31 @@ PLAN-ROOT SINK
      table: rows=6001215 size=193.71MB
      columns: all
    extrapolated-rows=disabled max-scan-range-rows=2141802
-   mem-estimate=1.00MB mem-reservation=128.00KB
+   mem-estimate=1.00MB mem-reservation=128.00KB thread-reservation=1
    tuple-ids=0 row-size=8B cardinality=6001215
 ---- DISTRIBUTEDPLAN
-Max Per-Host Resource Reservation: Memory=128.00KB
+Max Per-Host Resource Reservation: Memory=128.00KB Threads=3
 Per-Host Resource Estimates: Memory=21.00MB
 
 F01:PLAN FRAGMENT [UNPARTITIONED] hosts=1 instances=1
-|  Per-Host Resources: mem-estimate=10.00MB mem-reservation=0B
+|  Per-Host Resources: mem-estimate=

<TRUNCATED>