Snowflake Query Profile Analyzer

Paste real operator-profile output from Snowflake and get a plain-English breakdown of what's slow and why, with an interactive node-graph visualization — free, no signup, nothing sent to a server.

Analyze your plan free

What PlanReader analyzes

PlanReader parses your query profile into a normalized plan tree entirely in your browser, runs it through a rule engine that checks for known Snowflake operator-level performance problems, and renders the result as an interactive node graph you can click through node by node. This tool analyzes the operator profile of a single query — not warehouse-level or account-level query history.

Supported input formats

  • GET_QUERY_OPERATOR_STATS() output — the table function's result, pasted directly
  • Exported Query Profile JSON — the JSON export of a query's profile

What it detects

  • Poor micro-partition pruning
  • Cartesian joins
  • Aggregation hotspots
  • Window function hotspots
  • External function hotspots
  • Sort hotspots
  • Local (disk) spill
  • Remote (cloud storage) spill
  • Search Optimization Service effectiveness
  • Result-transfer bottlenecks
  • DML scope inefficiency (UPDATE/DELETE/MERGE examining far more rows than changed)

Example finding

An aggregation spilled to remote storage mid-query, adding cloud-storage round trips on top of the compute cost. PlanReader flags this as a remote spill, shows exactly which operator spilled in the graph, and explains in plain English that the operator needed more memory than the warehouse size provided — instead of just showing you a raw bytes-spilled counter.

Privacy

  • Nothing you paste is ever sent to a server — parsing and analysis run entirely in your browser
  • No account, no signup, no tracking of plan content
  • Share links encode your plan into the URL itself, in a fragment your browser never sends in any request — not stored anywhere
  • Local history, if you use it, stays in your own browser's storage

How to get this output

Using the query's own ID:

SELECT * FROM TABLE(GET_QUERY_OPERATOR_STATS('<query_id>'));

Try a sample plan

No plan handy? Load a real Snowflake sample and see PlanReader work immediately — no paste required.

Try a sample Snowflake plan