<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept id="thread_reservation_limit">

  <title>THREAD_RESERVATION_LIMIT Query Option (<keyword keyref="impala31"/> or higher only)</title>

  <titlealts audience="PDF">

    <navtitle>THREAD_RESERVATION_LIMIT</navtitle>

  </titlealts>

  <prolog>
    <metadata>
      <data name="Category" value="Impala"/>
      <data name="Category" value="Impala Query Options"/>
      <data name="Category" value="Scalability"/>
      <data name="Category" value="Memory"/>
      <data name="Category" value="Troubleshooting"/>
      <data name="Category" value="Developers"/>
      <data name="Category" value="Data Analysts"/>
    </metadata>
  </prolog>

  <conbody>

    <p>
      The <codeph>THREAD_RESERVATION_LIMIT</codeph> query option limits the number of reserved
      threads for a query on each node. The option is intended to prevent execution of complex
      queries that can consume excessive CPU or operating system resources on a single node.
      Queries that have more threads per node than this threshold are rejected by Impala’s
      admission controller before they start executing. You can see the number of reserved
      threads for a query in its
      <xref
        href="impala_explain_plan.xml#explain_plan">explain plan</xref> in the
      “Per-Host Resource Reservation" line.
    </p>

    <p>
      For example, an Impala administrator could set a default value of
      <codeph>THREAD_RESERVATION_LIMIT=100</codeph> for a resource pool where they expect only
      relatively simple queries to run. This will reject queries that require more than 100
      reserved threads on a node, for example, queries with more than 100 fragments.
    </p>

    <p>
      You can override the default value per-query or per-session, in the same way as other
      query options, if you do not want the default <codeph>THREAD_RESERVATION_LIMIT</codeph>
      value to apply to a specific query or session.
    </p>

    <p>
      <note>
        The number of reserved threads on a node may be lower than the maximum value in the
        explain plan if not all fragments of that query are scheduled on every node.
      </note>
    </p>

    <p>
      <b>Syntax:</b> <codeph>SET THREAD_RESERVATION_LIMIT=number;</codeph>
    </p>

    <p>
      <b>Type:</b> numeric
    </p>

    <p rev="">
      <b>Default:</b> 3000
    </p>

    <p>
      <b>Added in:</b> <keyword keyref="impala31"/>
    </p>

  </conbody>

</concept>
