Are you worried because of the title of this blog post? Don’t worry … it will be about the Oracle database and not about miraculous additives.
Months back I wrote about how to remove options from the Oracle database’s kernel by either using chopt or linking options off:
Recently a very interesting case was logged in relation to a bug:
A customer had linked off the JOX option from the database kernel.
What is JOX?
Well, do a quick search for “JOX” in the Oracle Documentation and you’ll get “zero results” (or you may get results in the 8.1 and 9.0 documentation which does not help here). So our documentation doesn’t want to tell you further details on “JOX“. But once you know that this is the acronym for the JavaVM JIT Compiler then we’ll get more results leading directly to this spfile parameter:
The default in my environments is always TRUE. It enables or disables the Just-in-Time (JIT) compiler for the Oracle Java Virtual Machine (OracleJVM) environment.
And from here a link guides us into the Java Documentation explaining a bit more details about the JIT in case you are interested.
Why am I writing this?
In theory you can unlink the JOX option – and compile oracle without the JIT:
$ cd $ORACLE_HOME/rdbms/lib $ /usr/bin/make -f /u01/app/oracle/product/18.104.22.168/rdbms/lib/ins_rdbms.mk jox_off ioracle
But let me add two things
- We recently had a bug just happening because JOX was unlinked – all our tests have JOX linked in
- As you can control the availability of JOX via the above initialization parameter I don’t see a deeper reason to unlink JOX
- And based on the feedback of Marcelo Ochoa (thanks Marcelo!!!) you’ll encounter a performance dip in some components such as interMedia, XMLDB etc as code will now be interpreted, and not JIT compiled.
- Furthermore based on the feedback of my former colleague, Norbert Debes, unlinking JOX may cause also trouble with the upgrade to Oracle Database 12c
My conclusion: There’s no real reason to take JOX out of the RDBMS kernel. Please leave it linked in..
How do you find out if JOX is linked in?
You can’t query the database for JOX as it is not mentioned in V$OPTION or DBA_REGISTRY. But you can find it out easily on the OS level:
$ cd $ORACLE_HOME/rdbms/lib $ ar -t libknlopt.a | grep -c jox.o
If the result is “1” it means “JOX installed”, and “0” means it is not installed.
Credits to Byron Motta from our Database Upgrade team!
Further information about JIT?
- What the heck are the /dev/shm/JOXSHM_EXT_x files on Linux?
Tanel Poder – May 2014 .
- Oracle 12c Java Documentation