cockroachdb / cockroachdb/cockroach

sql: prepared statements over-account for memory on query cache hits

Open
#98,071 1 comment 0 reactions 0 assignees View on GitHub
A-prepared-stmts C-bug O-support P-3 T-sql-queries
Dominant language
Go
Stars
32.5k
Forks
4.1k
PR merge metrics
PR metrics pending

Description

Cached prepared statements track their own memory usage, since they are potentially long-lived. This memory accounting includes the metadata needed for the prepared statement (e.g. SQL string, AST etc.) as well as the Memo data structured used by the optimizer to store the query plan. It is possible for the plan for a prepared statement to be kept in the query cache, in which case preparing the statement does not require construction of a new Memo data structure. However, the memory usage of this Memo is still registered with the prepared statement's memory accounting, which can cause a significant overestimate of SQL memory usage - in one customer issue, the reported SQL memory was 3x higher than the actual hardware memory usage.

See also #72581

Jira issue: CRDB-25064

Contributor guide

Open the contributing guide

Research direction

Start by tracing memory accounting for cached prepared statements through the query-cache hit path, focusing on when the optimizer's Memo data is registered. Read the related discussion in #72581 and verify that a cache hit no longer counts an already-retained Memo toward prepared-statement memory usage.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, sql
Domain
databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.