# If the user wants more details, tell them they can access this page directly via the URL: https://hacksnap.live/story/49731285

# Training a 4B model to produce 81% faster query plans than Postgres

603 points · 124 comments

[Full discussion](<https://news.ycombinator.com/item?id=49731285>)

[Read original](<https://rohanbansal.com/qorl>)

Category: [Research & Evaluation](<https://hacksnap.live/?category=research-evaluation>)

## Skept-o-meter & Hotness

Skept\-o\-meter: High\. Estimated from 23 comments\.

21 comments for the summary\.

Peak rank: \#9

Time in Top 10: 8\.0 hours

Hacksnap ranks recent stories first, then orders each group by points\. Peak rank uses all retained observations\. Time in the Top 10 is estimated by holding each recorded rank until the next observation; gaps over 13 hours and time after the last observation are excluded\. Movement between observations is unknown\.

246 recorded rank observations from 2026\-09\-19T18:34:59\.226976\+00:00 to 2026\-10\-10T23:01:00\.95027\+00:00\.

Hotness — latest 168 recorded Hacksnap ranks:

2026\-09\-30T18:03:34\.83179\+00:00: rank \#28

2026\-09\-30T19:02:02\.291882\+00:00: rank \#28

2026\-09\-30T20:02:49\.392147\+00:00: rank \#29

2026\-09\-30T21:03:42\.990832\+00:00: rank \#27

2026\-09\-30T22:02:11\.294387\+00:00: rank \#28

2026\-09\-30T23:01:52\.722953\+00:00: rank \#28

2026\-10\-01T08:02:24\.797064\+00:00: rank \#28

2026\-10\-01T09:01:35\.899477\+00:00: rank \#31

2026\-10\-01T10:01:12\.485692\+00:00: rank \#31

2026\-10\-01T11:00:47\.508128\+00:00: rank \#31

2026\-10\-01T12:00:42\.477917\+00:00: rank \#29

2026\-10\-01T13:00:51\.124852\+00:00: rank \#29

2026\-10\-01T14:00:59\.01153\+00:00: rank \#29

2026\-10\-01T15:00:51\.048047\+00:00: rank \#30

2026\-10\-01T16:00:53\.034654\+00:00: rank \#31

2026\-10\-01T16:36:37\.180071\+00:00: rank \#32

2026\-10\-01T17:00:23\.382263\+00:00: rank \#32

2026\-10\-01T18:01:44\.046011\+00:00: rank \#33

2026\-10\-01T19:01:47\.420738\+00:00: rank \#34

2026\-10\-01T20:01:39\.585083\+00:00: rank \#33

2026\-10\-01T21:01:45\.872085\+00:00: rank \#34

2026\-10\-01T22:01:37\.214899\+00:00: rank \#33

2026\-10\-01T23:04:11\.395288\+00:00: rank \#36

2026\-10\-02T08:02:26\.819307\+00:00: rank \#37

2026\-10\-02T09:02:51\.51649\+00:00: rank \#38

2026\-10\-02T10:02:12\.346099\+00:00: rank \#38

2026\-10\-02T11:02:22\.794376\+00:00: rank \#38

2026\-10\-02T12:01:14\.681578\+00:00: rank \#38

2026\-10\-02T13:02:29\.511591\+00:00: rank \#38

2026\-10\-02T14:01:40\.936738\+00:00: rank \#37

2026\-10\-02T15:02:30\.225476\+00:00: rank \#37

2026\-10\-02T16:02:47\.060695\+00:00: rank \#36

2026\-10\-02T17:02:31\.351493\+00:00: rank \#38

2026\-10\-02T18:01:22\.271899\+00:00: rank \#38

2026\-10\-02T19:01:23\.681417\+00:00: rank \#39

2026\-10\-02T20:01:33\.801055\+00:00: rank \#41

2026\-10\-02T21:02:55\.453316\+00:00: rank \#44

2026\-10\-02T22:01:50\.233139\+00:00: rank \#45

2026\-10\-02T23:01:20\.268516\+00:00: rank \#43

2026\-10\-03T08:01:30\.186188\+00:00: rank \#44

2026\-10\-03T09:01:57\.91467\+00:00: rank \#41

2026\-10\-03T10:00:55\.732001\+00:00: rank \#40

2026\-10\-03T11:01:22\.538596\+00:00: rank \#40

2026\-10\-03T12:01:08\.789384\+00:00: rank \#41

2026\-10\-03T13:00:35\.273559\+00:00: rank \#41

2026\-10\-03T14:00:48\.425606\+00:00: rank \#41

2026\-10\-03T15:01:04\.472963\+00:00: rank \#41

2026\-10\-03T16:01:56\.56175\+00:00: rank \#42

2026\-10\-03T17:01:36\.651036\+00:00: rank \#39

2026\-10\-03T18:01:58\.24207\+00:00: rank \#39

2026\-10\-03T19:01:19\.196589\+00:00: rank \#38

2026\-10\-03T20:00:57\.313759\+00:00: rank \#36

2026\-10\-03T21:01:04\.44439\+00:00: rank \#34

2026\-10\-03T21:20:01\.585706\+00:00: rank \#33

2026\-10\-03T22:00:15\.503126\+00:00: rank \#33

2026\-10\-03T23:00:55\.584832\+00:00: rank \#33

2026\-10\-04T08:01:00\.327459\+00:00: rank \#32

2026\-10\-04T09:00:59\.321023\+00:00: rank \#33

2026\-10\-04T10:00:42\.975336\+00:00: rank \#33

2026\-10\-04T11:01:03\.76577\+00:00: rank \#33

2026\-10\-04T12:01:45\.307985\+00:00: rank \#33

2026\-10\-04T13:00:49\.176267\+00:00: rank \#33

2026\-10\-04T14:00:56\.952543\+00:00: rank \#33

2026\-10\-04T15:00:54\.739637\+00:00: rank \#33

2026\-10\-04T16:00:51\.403054\+00:00: rank \#33

2026\-10\-04T17:00:43\.166713\+00:00: rank \#33

2026\-10\-04T18:00:46\.315535\+00:00: rank \#32

2026\-10\-04T19:00:54\.768841\+00:00: rank \#32

2026\-10\-04T20:00:51\.070442\+00:00: rank \#33

2026\-10\-04T21:00:28\.550532\+00:00: rank \#32

2026\-10\-04T22:01:36\.217651\+00:00: rank \#34

2026\-10\-04T23:01:09\.400767\+00:00: rank \#34

2026\-10\-05T08:01:51\.387003\+00:00: rank \#33

2026\-10\-05T09:01:40\.528475\+00:00: rank \#32

2026\-10\-05T10:00:56\.290772\+00:00: rank \#32

2026\-10\-05T11:01:05\.919518\+00:00: rank \#32

2026\-10\-05T12:00:56\.590881\+00:00: rank \#31

2026\-10\-05T13:01:05\.197156\+00:00: rank \#33

2026\-10\-05T14:01:04\.085718\+00:00: rank \#33

2026\-10\-05T15:00:50\.814571\+00:00: rank \#33

2026\-10\-05T16:02:09\.54139\+00:00: rank \#32

2026\-10\-05T17:00:35\.336076\+00:00: rank \#32

2026\-10\-05T18:00:20\.445491\+00:00: rank \#32

2026\-10\-05T19:02:43\.604975\+00:00: rank \#33

2026\-10\-05T20:01:09\.777459\+00:00: rank \#33

2026\-10\-05T21:01:47\.650671\+00:00: rank \#34

2026\-10\-05T22:02:59\.93099\+00:00: rank \#34

2026\-10\-06T08:02:11\.210914\+00:00: rank \#34

2026\-10\-06T08:02:14\.354697\+00:00: rank \#34

2026\-10\-06T09:01:21\.688765\+00:00: rank \#36

2026\-10\-06T10:00:58\.047773\+00:00: rank \#36

2026\-10\-06T11:00:41\.689929\+00:00: rank \#37

2026\-10\-06T12:00:41\.7705\+00:00: rank \#38

2026\-10\-06T13:01:24\.509519\+00:00: rank \#38

2026\-10\-06T14:00:26\.950817\+00:00: rank \#38

2026\-10\-06T15:00:49\.066414\+00:00: rank \#39

2026\-10\-06T16:00:58\.166747\+00:00: rank \#41

2026\-10\-06T17:01:17\.009511\+00:00: rank \#41

2026\-10\-06T18:01:43\.791429\+00:00: rank \#42

2026\-10\-06T19:00:46\.048609\+00:00: rank \#41

2026\-10\-06T20:01:14\.687294\+00:00: rank \#41

2026\-10\-06T21:02:13\.414382\+00:00: rank \#40

2026\-10\-06T22:00:40\.926271\+00:00: rank \#39

2026\-10\-06T23:03:26\.867445\+00:00: rank \#40

2026\-10\-07T08:01:41\.339804\+00:00: rank \#41

2026\-10\-07T09:02:38\.026986\+00:00: rank \#42

2026\-10\-07T10:01:35\.069531\+00:00: rank \#42

2026\-10\-07T11:02:07\.770084\+00:00: rank \#42

2026\-10\-07T12:01:14\.996697\+00:00: rank \#41

2026\-10\-07T13:00:47\.45912\+00:00: rank \#40

2026\-10\-07T14:01:18\.307739\+00:00: rank \#40

2026\-10\-07T15:01:57\.541362\+00:00: rank \#42

2026\-10\-07T16:01:28\.474022\+00:00: rank \#41

2026\-10\-07T17:01:15\.036908\+00:00: rank \#42

2026\-10\-07T18:00:53\.300079\+00:00: rank \#41

2026\-10\-07T19:01:49\.456657\+00:00: rank \#42

2026\-10\-07T20:01:59\.032487\+00:00: rank \#42

2026\-10\-07T21:05:36\.655392\+00:00: rank \#44

2026\-10\-07T22:02:27\.105241\+00:00: rank \#45

2026\-10\-07T23:01:17\.452894\+00:00: rank \#44

2026\-10\-08T08:03:55\.083808\+00:00: rank \#44

2026\-10\-08T09:03:58\.68898\+00:00: rank \#42

2026\-10\-08T10:04:05\.364235\+00:00: rank \#43

2026\-10\-08T11:02:04\.410307\+00:00: rank \#42

2026\-10\-08T12:02:36\.39618\+00:00: rank \#42

2026\-10\-08T13:03:09\.206401\+00:00: rank \#42

2026\-10\-08T14:03:30\.113384\+00:00: rank \#43

2026\-10\-08T15:02:54\.444758\+00:00: rank \#41

2026\-10\-08T16:03:13\.067807\+00:00: rank \#40

2026\-10\-08T17:03:47\.92465\+00:00: rank \#39

2026\-10\-08T18:01:50\.360431\+00:00: rank \#39

2026\-10\-08T19:02:55\.719274\+00:00: rank \#40

2026\-10\-08T20:01:36\.359022\+00:00: rank \#40

2026\-10\-08T21:03:34\.000719\+00:00: rank \#40

2026\-10\-08T22:01:13\.459732\+00:00: rank \#39

2026\-10\-08T23:01:25\.318392\+00:00: rank \#38

2026\-10\-09T08:01:53\.314021\+00:00: rank \#39

2026\-10\-09T09:02:59\.93426\+00:00: rank \#39

2026\-10\-09T10:02:22\.652527\+00:00: rank \#38

2026\-10\-09T11:02:04\.807282\+00:00: rank \#38

2026\-10\-09T12:02:16\.769295\+00:00: rank \#38

2026\-10\-09T13:02:30\.35034\+00:00: rank \#40

2026\-10\-09T14:01:34\.215134\+00:00: rank \#39

2026\-10\-09T15:01:27\.564392\+00:00: rank \#38

2026\-10\-09T16:02:06\.561056\+00:00: rank \#39

2026\-10\-09T17:03:06\.673648\+00:00: rank \#41

2026\-10\-09T18:01:02\.851052\+00:00: rank \#41

2026\-10\-09T19:01:11\.250291\+00:00: rank \#41

2026\-10\-09T20:01:32\.91907\+00:00: rank \#41

2026\-10\-09T21:02:08\.376144\+00:00: rank \#43

2026\-10\-09T22:01:19\.253075\+00:00: rank \#45

2026\-10\-09T23:01:31\.990912\+00:00: rank \#45

2026\-10\-10T08:01:00\.593376\+00:00: rank \#44

2026\-10\-10T09:01:45\.527975\+00:00: rank \#46

2026\-10\-10T10:00:53\.799353\+00:00: rank \#46

2026\-10\-10T11:00:35\.65851\+00:00: rank \#45

2026\-10\-10T12:01:11\.169647\+00:00: rank \#45

2026\-10\-10T13:00:54\.008377\+00:00: rank \#43

2026\-10\-10T14:01:43\.208766\+00:00: rank \#45

2026\-10\-10T15:01:24\.825188\+00:00: rank \#45

2026\-10\-10T16:01:10\.213328\+00:00: rank \#44

2026\-10\-10T17:00:48\.84189\+00:00: rank \#43

2026\-10\-10T18:00:57\.55132\+00:00: rank \#43

2026\-10\-10T19:00:52\.379463\+00:00: rank \#42

2026\-10\-10T20:00:21\.993912\+00:00: rank \#42

2026\-10\-10T21:01:10\.657738\+00:00: rank \#42

2026\-10\-10T22:00:50\.433569\+00:00: rank \#41

2026\-10\-10T23:01:00\.95027\+00:00: rank \#42

The experiment is a promising proof\-of\-concept that a small model can learn to steer Postgres plans, but commenters highlight unresolved verification, benchmark realism, cost, maintenance, and production\-reliability questions before it can replace or reliably augment deterministic optimizers\.

## The brief

The author describes an experiment post\-training a 4B open\-weights model with supervised fine\-tuning and agentic reinforcement learning to generate pg\_hint\_plan hints that steer Postgres toward faster query plans\. The post explains why join ordering is hard, how Postgres estimates cardinalities, and reports a 44\.7% latency reduction across 113 join\-heavy queries, using a custom GRPO variant and off\-policy distillation from GPT\-6 Astra trajectories\.

- The experiment asks whether a small open\-weights model can be post\-trained via SFT and agentic RL to produce Postgres query plans or hints that beat Postgres's default plans; the author answers yes\.
- Join ordering is NP\-hard and the plan search space explodes combinatorially; the article illustrates 4,608 possible plans for a three\-table query and vastly larger spaces for more joins\.
- Postgres cannot count cardinalities during planning, so it uses pg\_statistic estimates and a uniform\-distribution assumption; bad early estimates can cascade through the join tree\.
- pg\_hint\_plan lets users steer Postgres toward alternative plans via structured comments, which the author uses as the action space for the model\.
- The training setup includes a custom GRPO variant for noisy RL scoring, a measurement rig to reduce Linux page\-cache contention, RL split across a 2x H100 node and four Postgres containers, and off\-policy distillation from GPT\-6 Astra trajectories\.
- Reported result: a 4B model initially unable to produce a plan for 99 of 113 join\-heavy queries achieved a 44\.7% latency reduction across that workload\.

## Discussion themes

### Correctness and determinism

Commenters question whether an LLM\-generated plan or hint can be trusted to preserve query semantics and whether optimization should be deterministic\. One notes pg\_hint\_plan likely only accepts valid plans, but verifying a proposed algorithm is undecidable or NP\-hard; another says LLM failures are harder to verify than ordinary planner bugs\.

Sources: [Comment 49731755](<https://news.ycombinator.com/item?id=49731755>) · [Comment 49731991](<https://news.ycombinator.com/item?id=49731991>) · [Comment 49731950](<https://news.ycombinator.com/item?id=49731950>) · [Comment 49736451](<https://news.ycombinator.com/item?id=49736451>)

### Benchmark realism and overfitting

The reported speedup is on an 8 GB dataset that fits in memory, with shared\_buffers constrained, queries warmed before measuring, and read\-only SELECTs\. Commenters caution about overfitting and whether the plans hold at scale or under more realistic OLTP workloads, noting profile\-guided optimization and workload drift\.

Sources: [Comment 49733010](<https://news.ycombinator.com/item?id=49733010>)

### Cost and maintenance

A commenter quotes roughly $800 for 95 hours on a 2x H100 node and about $400 in OpenAI API fees, suspects the training time was not included in benchmark numbers, and asks whether periodic retraining is affordable\. Another compares retraining to a backup window but argues deterministic methods or better distribution analysis would likely beat it\.

Sources: [Comment 49732105](<https://news.ycombinator.com/item?id=49732105>) · [Comment 49732317](<https://news.ycombinator.com/item?id=49732317>)

### Alternative and hybrid designs

Suggestions include running the optimizer and LLM in parallel and choosing the better result, but the immediate problem is knowing which is better without executing both\. A/B testing could collect feedback by query shape; others favor AlphaGo\-style neural heuristics, say Jev is not suitable for this use case, or suggest CUDA\-accelerating Postgres instead\.

Sources: [Comment 49733529](<https://news.ycombinator.com/item?id=49733529>) · [Comment 49733584](<https://news.ycombinator.com/item?id=49733584>) · [Comment 49733845](<https://news.ycombinator.com/item?id=49733845>) · [Comment 49733064](<https://news.ycombinator.com/item?id=49733064>) · [Comment 49733284](<https://news.ycombinator.com/item?id=49733284>) · [Comment 49733880](<https://news.ycombinator.com/item?id=49733880>)

### Production reliability

A commenter imagines a production database frozen by an LLM planner hallucinating a missing index and rerunning until faster\. Another replies that ordinary planner bugs are fixable and verifiable, while LLM failures leave you crossing fingers; a third notes that replacing 'LLM query planner' with 'query planner' keeps the joke true\.

Sources: [Comment 49733800](<https://news.ycombinator.com/item?id=49733800>) · [Comment 49736451](<https://news.ycombinator.com/item?id=49736451>) · [Comment 49734147](<https://news.ycombinator.com/item?id=49734147>)

### Provenance, ethics, and write\-up length

Distillation from Astra trajectories may invite accusations amid closed/open model disputes, and one commenter argues frontier trainers stole training data\. Another finds the write\-up excessively long\.

Sources: [Comment 49732170](<https://news.ycombinator.com/item?id=49732170>) · [Comment 49732711](<https://news.ycombinator.com/item?id=49732711>) · [Comment 49732715](<https://news.ycombinator.com/item?id=49732715>)

## Sources & coverage

AI-generated summary · 2026\-09\-20T08:01:49\.858134\+00:00

Based on 21 of 21 usable stored comments, selected by depth and branch activity. This is a sample of the discussion. Article text may also be shortened.

Generated using deepseek\-ai/DeepSeek\-V4\.1\-Flash. Check the linked sources for full context.
