You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2026/10/02 08:59:00 UTC

[jira] [Commented] (DRILL-8555) Physical plan cache for parameterized SQL queries

    [ https://issues.apache.org/jira/browse/DRILL-8555?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18121888#comment-18121888 ] 

ASF GitHub Bot commented on DRILL-8555:
---------------------------------------

letian-jiang opened a new pull request, #3086:
URL: https://github.com/apache/drill/pull/3086

   # [DRILL-8555](https://issues.apache.org/jira/browse/DRILL-8555): Physical plan cache for parameterized SQL queries
   
   ## Description
   
   This PR adds a Drillbit-scoped physical plan cache with HBase and Iceberg support, reusing plans across connections to reduce repeated validation and optimization. It is disabled by default; enable it with `ALTER SESSION SET planner.enable_plan_cache = true`.
   
   ## Method
   
   ```mermaid
   flowchart LR
       SQL[SQL] --> Template[SQL template]
       Template --> Cache{Plan cache}
       Cache -->|Hit| Bind[Bind literals]
       Cache -->|Miss| Planner[Plan query]
       Bind --> Plan[Physical plan]
       Planner --> Plan
   ```
   
   Eligible literals become parameter slots in the SQL template. A hit binds current values to a fresh copy of the cached plan; a miss plans the query normally and populates the cache after successful execution.
   
   ## Safety guarantees
   
   - Only supported read queries are cached. Volatile or query-context functions and unsupported scans bypass caching. Structural literals and function configuration arguments stay in the cache key.
   - Reuse requires matching effective options, plugin configurations and table compatibility versions. Binding checks parameter types and numeric ranges; compatibility or reconstruction failures fall back to normal planning.
   - Cached plans are immutable, and each execution gets a fresh operator graph. Plugins opt in explicitly and must rebuild scan state from current parameters and metadata while preserving residual filters.
   
   ## Benchmark
   
   Measured on one local Drillbit with a Ryzen 7 9700X, 30 GiB RAM and OpenJDK 21. HBase used a 1,000-row mini-cluster for point reads, 50-row range scans and column filters. Iceberg ran all 22 TPC-H queries over eight SF0.01 tables (Q15 used a derived table; Q19 exposed the common equijoin).
   
   ### Cache hits
   
   | Workload | Planning off → hit (reduction) | End-to-end off → hit (reduction) |
   | -

> Physical plan cache for parameterized SQL queries
> -------------------------------------------------
>
>                 Key: DRILL-8555
>                 URL: https://issues.apache.org/jira/browse/DRILL-8555
>             Project: Apache Drill
>          Issue Type: New Feature
>          Components: Query Planning &amp; Optimization
>            Reporter: Letian Jiang
>            Priority: Major
>
> h2. Motivation
> Repeated queries that differ only in literals are a common workload, yet each query currently requires full planning. This adds unnecessary latency and wastes CPU time.
> h2. Brief Design
> Add a per-Drillbit, in-memory plan cache. Drill automatically parameterizes eligible SQL queries and reuses a cached physical plan with the current literal values, without changes to client queries.
> h2. Plan reuse safety
>  * *Engine:* matches the SQL template and checks relevant option changes, plugin configuration changes, and whether base table versions still match.
>  * *Storage plugin:* explicitly opts in, provides a plan-compatible table version, and is responsible for rebuilding its predicate-dependent scan work from the rebound expressions.
> h2. Expected benefit
> Short, frequently executed queries such as HBase reads can benefit substantially. Analytical queries with significant planning cost can benefit as well.
> h2. Implementation status
> A working implementation is available, including HBase, Paimon and Iceberg integrations. A pull request will follow.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)