public inbox for [email protected]  
help / color / mirror / Atom feed
From: Jelte Fennema-Nio <[email protected]>
To: Pierre Ducroquet <[email protected]>
Cc: Álvaro Herrera <[email protected]>
Cc: PostgreSQL Hackers <[email protected]>
Cc: Andreas Karlsson <[email protected]>
Cc: Anthonin Bonnefoy <[email protected]>
Cc: PostgreSQL Hackers <[email protected]>
Cc: Michael Banck <[email protected]>
Cc: Christoph Berg <[email protected]>
Subject: Change default of jit to off
Date: Fri, 30 Jan 2026 12:28:04 +0100
Message-ID: <[email protected]> (raw)

(forked off from "Add missing JIT inline pass for llvm>=17")

On Mon, 19 Jan 2026 at 11:53, Pierre Ducroquet <[email protected]> wrote:
>
> On Friday, January 16, 2026 10:29:59 AM Central European Standard Time Michael
> Banck wrote:
> > Hi,
> >
> > On Thu, Jan 15, 2026 at 12:26:23PM +0100, Álvaro Herrera wrote:
> > > On 2026-Jan-15, Andreas Karlsson wrote:
> > > > Great find! Sadly shows how little people actually use JIT.
> > >
> > > I disagree.  Given that JIT is enabled by default, I think lots of
> > > people use it.
> >
> > Well, not sure about that - all of the three major hyperscalers disable
> > JIT in their managed Postgres offerings (or at least used to when I last
> > checked), and those are a major chunk of usage these days. Also, both
> > the RPM and (since recently) the Debian/Ubuntu community packages have
> > factored out the LLVM/jit part into their own packages and AFAIK they do
> > not get installed by default.
> >
> > So while the GUC is on by default, a lot of users might not use JIT
> > these days and not know either way.
> >
> > > What they don't do, is realize that things are slower
> > > than they could be -- much less try to figure out why.
> >
> > Right.
>
> People have also seen blog articles saying «JIT is bad, switch it off» that are
> right if you are in the wrong use cases for JIT. Which, to be fair, is not
> easy to figure out.

+1 on disabling jit by default. At the FOSDEM Postgres developer meeting
consensus was hugely in favor of changing the default. So attached is a
trivial patch that does this.


Attachments:

  [text/x-patch] v1-0001-Change-default-of-jit-to-off.patch (3.2K, 2-v1-0001-Change-default-of-jit-to-off.patch)
  download | inline diff:
From 4e10f552e88087650bec97ee141b8dd70e74d405 Mon Sep 17 00:00:00 2001
From: Jelte Fennema-Nio <[email protected]>
Date: Fri, 30 Jan 2026 11:58:50 +0100
Subject: [PATCH v1] Change default of jit to off

While jit can speed up slow analytical queries, it can also cause huge
slowdowns on otherwise very fast queries. This can be especially painful
when due to some unrelated changes (e.g. a few additional INSERTs into a
talbe) the plan is changed to use jit and then results in a huge
performance cliff. That's why the default is already off on all
hyperscalers. This changes our default to align with that that.
---
 doc/src/sgml/config.sgml                      | 3 ++-
 src/backend/jit/jit.c                         | 2 +-
 src/backend/utils/misc/guc_parameters.dat     | 2 +-
 src/backend/utils/misc/postgresql.conf.sample | 2 +-
 4 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 5560b95ee60..e78ad2d3e25 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -6510,7 +6510,8 @@ SELECT * FROM parent WHERE key = 2400;
         Determines whether <acronym>JIT</acronym> compilation may be used by
         <productname>PostgreSQL</productname>, if available (see <xref
         linkend="jit"/>).
-        The default is <literal>on</literal>.
+        The default is <literal>off</literal> (before
+        <productname>PostgreSQL</productname> 19 the default was <literal>on</literal>).
        </para>
       </listitem>
      </varlistentry>
diff --git a/src/backend/jit/jit.c b/src/backend/jit/jit.c
index e92be36932b..1c6261096d0 100644
--- a/src/backend/jit/jit.c
+++ b/src/backend/jit/jit.c
@@ -29,7 +29,7 @@
 #include "utils/fmgrprotos.h"
 
 /* GUCs */
-bool		jit_enabled = true;
+bool		jit_enabled = false;
 char	   *jit_provider = NULL;
 bool		jit_debugging_support = false;
 bool		jit_dump_bitcode = false;
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index f0260e6e412..a164d92d439 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -1356,7 +1356,7 @@
   short_desc => 'Allow JIT compilation.',
   flags => 'GUC_EXPLAIN',
   variable => 'jit_enabled',
-  boot_val => 'true',
+  boot_val => 'false',
 },
 
 { name => 'jit_above_cost', type => 'real', context => 'PGC_USERSET', group => 'QUERY_TUNING_COST',
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index c4f92fcdac8..a277cf560ea 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -469,7 +469,7 @@
 #constraint_exclusion = partition       # on, off, or partition
 #cursor_tuple_fraction = 0.1            # range 0.0-1.0
 #from_collapse_limit = 8
-#jit = on                               # allow JIT compilation
+#jit = off                              # allow JIT compilation
 #join_collapse_limit = 8                # 1 disables collapsing of explicit
                                         # JOIN clauses
 #plan_cache_mode = auto                 # auto, force_generic_plan or

base-commit: 1eb09ed63a8d8063dc6bb75c8f31ec564bf35250
-- 
2.52.0



reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]
  Subject: Re: Change default of jit to off
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox